Colab'in Büyüsü

Bu not defteri, PaLM için Colab sihirli komutlarını tanıtıyor. Sihirler, bir Colab not defterinden istemleri geliştirmeyi, test etmeyi, karşılaştırmayı ve değerlendirmeyi kolaylaştırır.

ai.google.dev'de görüntüleyin Colab not defterini deneyin GitHub'da not defterini görüntüle

Kurulum

Sihirli özellikleri yükleyip test etmek için aşağıdaki adımları uygulayın.

PaLM büyüsü yükleniyor

PaLM sihir komutlarını Colab veya diğer IPython ortamlarında kullanmak için önce google-generativeai Python paketini indirip yüklemeniz gerekir.

%pip install -q google-generativeai

PaLM büyüsü yükleniyor

Sonra, %load_ext sihrini kullanarak %%palm sihrini yükleyin:

%load_ext google.generativeai.notebook

Yüklemeyi test etme

Sihirli komutların doğru şekilde yüklenip yüklenmediğini test etmek için %%palm --help komutunu çalıştırın. Henüz yoksa PaLM API anahtarı da gerekecektir (sonraki adıma bakın).

%%palm --help
usage: palm [-h] {run,compile,compare,eval} ...

A system for interacting with LLMs.

positional arguments:
  {run,compile,compare,eval}

options:
  -h, --help            show this help message and exit

PaLM API anahtarı alma

PaLM API'yi kullanmak için API anahtarı oluşturmanız gerekir. (Bu adımı yalnızca bir kez yapmanız yeterlidir.)

Not defterinde API anahtarını ayarlama

Aşağıdaki hücreyi çalıştırarak API anahtarınızı ayarlayın.

%env GOOGLE_API_KEY=YOUR PALM KEY

PaLM sihir komutları: run, compile, compare ve evaluate

PaLM büyüleri dört farklı komut sağlar:

  1. run
  2. compile
  3. compare
  4. evaluate

Komut: palm run

run komutu, hücrenin içeriğini modele gönderir.

İstemleri çalıştırmak çok yaygın olduğundan PaLM, herhangi bir komut verilmemesi durumunda varsayılan olarak run komutunu kullanır. Örneğin, sonraki iki hücre aynıdır.

%%palm run
The opposite of hot is
%%palm
The opposite of hot is

Sonucu anlama

Prompt sütunu modele gönderilen metni, text_result sütununda ise sonuç gösterilir. Bu kılavuzda ilerledikçe diğer sütunlar tanıtılacaktır.

İstem şablonları

İstemlerin sabit dizeler olması gerekmez. {curly braces} ile şablon yer tutucuları içeren bir isteme değer ekleyebilirsiniz.

english_words = {
    # Each value here (hot, cold) will be substituted in for {word} in the prompt
    'word': ['hot', 'cold']
}
%%palm --inputs english_words
The opposite of {word} is

Sonucu anlama

Input Num sütunu, listelerdeki giriş kelimesinin dizinini izler. İçinde bu örneklerde, 0 için Input Num 'hot' ve 1 'cold' değerine sahip.

Birden fazla giriş grubu belirtme

Ayrıca tek seferde birden fazla giriş grubu da belirtebilirsiniz.

extreme_temperatures = {
    'word': ['hot', 'cold']
}
minor_temperatures = {
    'word': ['warm', 'chilly']
}
%%palm --inputs extreme_temperatures minor_temperatures
The opposite of {word} is

Google E-Tablolar'daki veriler okunuyor

PaLM büyüsü, Google E-Tablolar'da okuma ve yazma da yapabilir. E-Tablolar verilerine erişmek için giriş yapmanız gerekir. Bu bölümde, E-Tablolar'daki verilerin okunmasına odaklanılmaktadır; sonraki bölümde, bir Google E-Tablosu'na nasıl çıktı yazabileceğiniz gösterilmektedir.

Giriş yapın ve E-Tablolar'a erişimi yetkilendirin

PaLM büyüsüyle kullanmak üzere e-tabloyu biçimlendirme

Şablon verisi olarak yüklemek için bir Google E-Tablosu'nun kimliğini veya URL'sini --sheets_input_names işaretine iletin.

Verileri bir istem şablonunda kullanmak için e-tablonuzda aşağıdaki biçimi kullanın:

  1. İstem şablonunuzun değişkenlerinin adlarını sayfanın ilk satırına girin.
  2. Aşağıdaki satırlarda değişkenlerin yerini alacak verileri koyun.

Örneğin, istem şablonunuzda değiştirilecek iki değişken (name ve temperament) varsa e-tablonuzu şu şekilde yazarsınız:

ad mizaç
Milo arsız
Büyük rahat
Subra Dili utangaç
%%palm --sheets_input_names https://docs.google.com/spreadsheets/d/1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc/edit
Create a single sentence description of a monkey's personality. The monkey's name is {name} and it has a {temperament} temperament.

Kendiniz deneyin

Bunu kendi verilerinizi kullanarak denemek için yeni bir e-tablo oluşturun ve kimliği --sheets_input_names adlı geliştiriciye iletin. Kimlik ve URL'nin yanı sıra, sayfalarınızı başlığa göre (ör. %%palm --sheets_input_names "Animal adjectives"

E-Tablolar girişlerini Python girişleriyle birleştirme

E-Tablolar girişleri --inputs ile de birleştirilebilir:

new_monkeys = {
    'name': ['Hackerella'],
    'temperament': ['clever'],
}
%%palm --inputs new_monkeys --sheets_input_names 1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc 1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc
Create a single sentence description of a monkey's personality. The monkey's name is {name} and it has a {temperament} temperament.

Komut: palm eval

İstemin çıkışını bilinen kesin referans verileriyle karşılaştırmak için %%palm eval kullanın.

test_data = {
    "word": ["dog", "cat", "house"]
}
ground_truth = ["chien", "chat", "maison"]
%%palm eval --inputs test_data --ground_truth ground_truth
English: Hello
French: Bonjour
English: {word}
French:

İşleme sonrası model çıkışları

Kesin referans testi yapmak için model çıkışını sonradan işlemeniz gerekebilir.

İşleme sonrası işlevler, model çıkışını işleyen bir işlev tanımlamanızı sağlar. eval komutu söz konusu olduğunda son eşitlik kontrolünde yalnızca sonuç sütunu kullanılır.

İşlem sonrası sonuçları elde etmek üzere bir işlev tanımlamak için post_process_replace_fn tasarımcısını kullanın:

from google.generativeai.notebook import magics

# Define a function to extract only the first response.
@magics.post_process_replace_fn
def extract_and_normalize(input):
  first_line, *unused = input.split('English:')
  return first_line.strip().lower()

Yukarıda tanımlanan extract_and_normalize işlevi, modelin çıkışını alır ve tekrar eden dil çiftlerini kırparak yalnızca ilk yanıtı bırakır. İşleme sonrası hakkında daha fazla bilgi edinmek için işleme sonrası bölümüne göz atın.

%%palm eval --inputs test_data --ground_truth ground_truth | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:

Komut: palm compile

Yer tutucu içeren bir istemi Python'dan çağrılabilir bir işleve dönüştürmek için %%palm compile komutunu kullanın.

Tüm işaretler ve son işleme "derlendi" işleve eklenir ve çağrıldığında kullanılır.

Bu örnekte, önce ait işleme sonrası extract_and_normalize işlevi kullanılarak translate_en_to_fr adında bir işlev oluşturulmuştur.

%%palm compile translate_en_to_fr | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:
'Saved function to Python variable: translate_en_to_fr'
en_words = ['cat', 'dog']
translate_en_to_fr({'word': en_words})

Çıkış biçimleri

Varsayılan olarak, işlevi, çıkışını Pandas DataFrame olarak görüntülenecek bir nesne olarak döndürür. Ancak, sırasıyla .as_dict() veya .as_dataframe() kullanarak sonuç nesnesini DataFrame öğesine veya sözlüğe dönüştürebilirsiniz.

Daha fazla bilgi için --outputs işaretini inceleyin.

results = translate_en_to_fr({'word': en_words}).as_dict()

fr_words = results['text_result']

for en, fr in zip(en_words, fr_words):
  print(f'{fr} is French for {en}')
chat is French for cat
chien is French for dog

Komut: palm compare

%%palm compare, derlenmiş istemleri çalıştırır ve karşılaştırma sonuçlarını yan yana gösteren bir tablo oluşturur. Böylece farklılıkları inceleyebilirsiniz.

%%palm compile few_shot_prompt
English: Hello
French: Bonjour
English: {word}
French:
'Saved function to Python variable: few_shot_prompt'
%%palm compile zero_shot_prompt
{word} translated to French is:
'Saved function to Python variable: zero_shot_prompt'
words = {
    "word": ["dog", "cat", "house"]
}
%%palm compare few_shot_prompt zero_shot_prompt --inputs words

Özel karşılaştırma işlevleri

Varsayılan olarak compare, döndürülen sonuçlarda eşitlik olup olmadığını kontrol eder. Ancak --compare_fn işaretini kullanarak bir veya daha fazla özel işlev belirtebilirsiniz:.

def average_word_length(lhs, rhs):
  """Count the average number of words used across prompts."""
  return (len(lhs.split(' ')) + len(rhs.split(' '))) / 2

def shortest_answer(lhs, rhs):
  """Label the prompt that generated the shortest output."""
  if len(lhs) < len(rhs):
    return 'first'
  elif len(lhs) > len(rhs):
    return 'second'
  else:
    return 'same'
%%palm compare few_shot_prompt zero_shot_prompt --inputs words --compare_fn average_word_length shortest_answer

Diğer komutlar

Yardım

--help işareti, doğrudan %%palm hizmetine iletebileceğiniz desteklenen komutları gösterir.

Her bir komutla ilgili ayrıntılı dokümanları görüntülemek için --help komut dosyasını ekleyin. Örneğin,

%%palm run --help
usage: palm run [-h] [--model_type {echo,text}] [--temperature TEMPERATURE]
                [--model MODEL] [--candidate_count CANDIDATE_COUNT] [--unique]
                [--inputs INPUTS [INPUTS ...]]
                [--sheets_input_names SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...]]
                [--outputs OUTPUTS [OUTPUTS ...]]
                [--sheets_output_names SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...]]

options:
  -h, --help            show this help message and exit
  --model_type {echo,text}, -mt {echo,text}
                        The type of model to use.
  --temperature TEMPERATURE, -t TEMPERATURE
                        Controls the randomness of the output. Must be
                        positive. Typical values are in the range: [0.0, 1.0].
                        Higher values produce a more random and varied
                        response. A temperature of zero will be deterministic.
  --model MODEL, -m MODEL
                        The name of the model to use. If not provided, a
                        default model will be used.
  --candidate_count CANDIDATE_COUNT, -cc CANDIDATE_COUNT
                        The number of candidates to produce.
  --unique              Whether to dedupe candidates returned by the model.
  --inputs INPUTS [INPUTS ...], -i INPUTS [INPUTS ...]
                        Optional names of Python variables containing inputs
                        to use to instantiate a prompt. The variable must be
                        either: a dictionary {'key1': ['val1', 'val2'] ...},
                        or an instance of LLMFnInputsSource such as
                        SheetsInput.
  --sheets_input_names SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...], -si SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...]
                        Optional names of Google Sheets to read inputs from.
                        This is equivalent to using --inputs with the names of
                        variables that are instances of SheetsInputs, just
                        more convenient to use.
  --outputs OUTPUTS [OUTPUTS ...], -o OUTPUTS [OUTPUTS ...]
                        Optional names of Python variables to output to. If
                        the Python variable has not already been defined, it
                        will be created. If the variable is defined and is an
                        instance of LLMFnOutputsSink, the outputs will be
                        written through the sink's write_outputs() method.
  --sheets_output_names SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...], -so SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...]
                        Optional names of Google Sheets to write inputs to.
                        This is equivalent to using --outputs with the names
                        of variables that are instances of SheetsOutputs, just
                        more convenient to use.

Modeller

Kullanmak istediğiniz PaLM modeli varyantını belirtmek için --model işaretini kullanın.

Desteklenen modelleri almak için list_models() yöntemine bakın. PaLM sihri, generateText yöntemini destekleyen tüm modellerle kullanılabilir.

%%palm run --model models/text-bison-001
My favourite color is

Model parametreleri

--candidate_count ve --temperature gibi model parametrelerini de yapılandırabilirsiniz.

%%palm run --model models/text-bison-001 --temperature 0.5
My favourite color is

Hata ayıklama: Yankı modeli

İstemi size geri getirecek bir echo modeli de mevcut. API çağrısı yapmaz veya kotanızı tüketmez. Böylece, çıktıyı veya işleme sonunu test etmenin hızlı ve kolay bir yolu olabilir.

%%palm --model_type echo
A duck's quack does not echo.

Çıkışı Python'a aktarma

PaLM sihri, tablo çıktılarını görüntülemenin yanı sıra model çıkışını Python değişkenlerine kaydederek daha fazla değişiklik yapmanıza veya sonuçlarınızı dışa aktarmanıza olanak tanır.

Bu örnekte, çıkış bir Python değişkenine kaydedilir: fave_colors

%%palm --outputs fave_colors
The best colors to wear in spring-time are

Çıkış değişkenleri, varsayılan olarak Pandas DataFrame şeklinde gösterilecek özel nesnelerdir. Bunlar, as_dict() veya as_pandas_dataframe() çağrısı yapılarak açık bir şekilde Python sözlüğüne veya veri çerçevesine zorlanabilir.

from pprint import pprint

pprint(fave_colors.as_dict())
{'Input Num': [0],
 'Prompt': ['The best colors to wear in spring-time are'],
 'Prompt Num': [0],
 'Result Num': [0],
 'text_result': ['* Pastels: These soft, muted colors are perfect for the '
                 'springtime, as they are fresh and airy. Some popular pastel '
                 'colors include baby blue, mint green, and pale pink.\n'
                 '* Brights: If you want to make a statement, bright colors '
                 'are a great option for spring. Some popular bright colors '
                 'include fuchsia, cobalt blue, and yellow.\n'
                 '* Neutrals: Neutral colors are always a good choice, as they '
                 'can be easily dressed up or down. Some popular neutrals '
                 'include beige, gray, and white.\n'
                 '\n'
                 'When choosing colors to wear in the spring, it is important '
                 'to consider the occasion and your personal style. For '
                 'example, if you are attending a formal event, you may want '
                 'to choose a more muted color palette, such as pastels or '
                 'neutrals. If you are going for a more casual look, you may '
                 'want to choose brighter colors, such as brights or pastels.']}

Google E-Tablolar'a yaz

Çıktıyı --sheets_output_names kullanarak tekrar Google E-Tablolar'a kaydedebilirsiniz. Giriş yapmış olmanız ve gizli E-Tablolar'a erişmek için gerekli izinlere sahip olmanız gerekir.

Bunu denemek için yeni bir E-Tablo oluşturup Translation results olarak adlandırın. Giriş işareti gibi --sheets_output_names işareti de metin adı yerine sayfa URL'sini veya kimliğini kabul eder.

%%palm --inputs english_words --sheets_output_names "Translation results"
English: Hello
French: Bonjour
English: {word}
French:

Sonuçlar yeni bir sekmeye kaydedilir ve Colab'de gördüğünüz verileri içerir.

Kayıtlı sayfa örneği

Birden fazla aday oluşturma

Tek bir istem için birden fazla çıkış oluşturmak isterseniz --candidate_count öğesini modele iletebilirsiniz. Bu değer varsayılan olarak 1'e ayarlanır ve yalnızca en iyi sonucu verir.

Bazen model, adaylar genelinde aynı çıkışı oluşturur. Bunlar, aday grubundaki sonuçların tekilleştirildiği (birden fazla istemde değil) --unique işaretiyle filtrelenebilir.

%%palm run --temperature 1.0 --candidate_count 8 --unique
In a single word, my favourite color is

Result Num sütunu, aynı istemden oluşturulan birden fazla adayı ayırt eder.

İşleme sonrası model çıkışı

Olası çıktıların ve yapıların geniş bir yelpazede olması, modelin çıktısını sorun alanınıza uyarlamayı zorlaştırabilir. PaLM sihir, Python kodunu kullanarak model çıkışını değiştirmenize veya işlemenize olanak tanıyan işleme sonrası seçenekleri sunar.

İşleme sonrası işlevler, çıkışa yeni bir sütun ekleyebilir veya text_result sütununu değiştirebilir. text_result sütunu son sütundur ve nihai çıkışı belirlemek için eval ve compare komutları tarafından kullanılır.

İşleme sonrasında kullanılacak bazı örnek işlevler aşağıda verilmiştir. Biri yeni bir sütun ekler, diğeri post_process_replace_fn tasarımcısını kullanarak sonuç sütununu günceller.

import re
from google.generativeai.notebook import magics

# Add a new column.
def word_count(result):
  return len(result.split(' '))

# Modify the text_result column
@magics.post_process_replace_fn
def extract_first_sentence(result):
  """Extracts the first word from the raw result."""
  first, *_ = re.split(r'\.\s*', result)
  return first

Bu işlevleri kullanmak için dikey çizgi (|) operatörünü kullanarak %%palm komutuna ekleyin.

%%palm run | word_count | extract_first_sentence
The happiest thing I can imagine is

Burada sıralama önemlidir. word_count çağrıldığında, kelime sayısını hesaplamak için orijinal model çıkışı kullanılır. Bunların yerlerini değiştirirseniz kelime sayısı, çıkarılan ilk cümledeki kelime sayısı olacaktır.

Daha fazla bilgi