このノートブックでは、PaLM の Colab マジック コマンドについて説明します。Magics を使用すると、Colab ノートブックからプロンプトを簡単に開発、テスト、比較、評価できます。
ai.google.dev で表示 | Colab ノートブックを試す | GitHub のノートブックを表示 |
セットアップ
以下の手順に沿って、これらのマジックをインストールしてテストします。
PaLM マジックのインストール
Colab またはその他の IPython 環境で PaLM マジック コマンドを使用するには、まず google-generativeai
Python パッケージをダウンロードしてインストールする必要があります。
%pip install -q google-generativeai
PaLM のマジックを読み込む
次に、%load_ext
マジックを使用して %%palm
マジックを読み込みます。
%load_ext google.generativeai.notebook
インストールをテストする
マジック コマンドが正しくインストールされていることを確認するには、%%palm --help
を実行します。PaLM API キーも必要です(まだ取得していない場合)。(次のステップを参照)。
%%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 キーを取得する
PaLM API を使用するには、API キーを作成する必要があります。(この手順が必要なのは 1 回だけです)。
ノートブックで API キーを設定する
下のセルを実行して API キーを設定します。
%env GOOGLE_API_KEY=YOUR PALM KEY
PaLM マジック コマンド: run
、compile
、compare
、evaluate
PaLM マジックには、次の 4 つのコマンドがあります。
run
compile
compare
evaluate
コマンド: palm run
run
コマンドは、セルの内容をモデルに送信します。
プロンプトの実行は非常に一般的であるため、コマンドが指定されていない場合、PaLM マジックはデフォルトで run
コマンドを実行します。たとえば、次の 2 つのセルは同じです。
%%palm run
The opposite of hot is
%%palm
The opposite of hot is
出力について
Prompt
列にはモデルに送信されたテキストが表示され、text_result
列には結果が表示されます。その他の列は、このガイドを進めていく中で紹介していきます。
プロンプト テンプレート
プロンプトは固定文字列である必要はありません。テンプレート プレースホルダを使用してプロンプトに値を注入するには、{curly braces}
を使用します。
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
出力について
Input Num
列は、リスト内の入力単語のインデックスを追跡します。イン
この例では、0
の Input Num
が 'hot'
、1
が 'cold'
です。
複数の入力セットを指定する
一度に複数の入力セットを指定することもできます。
extreme_temperatures = {
'word': ['hot', 'cold']
}
minor_temperatures = {
'word': ['warm', 'chilly']
}
%%palm --inputs extreme_temperatures minor_temperatures
The opposite of {word} is
Google スプレッドシートからデータを読み取る
PaLM マジックでは Google スプレッドシートに対する読み取りと書き込みもできます。Google スプレッドシートのデータにアクセスするには、ログインする必要があります。このセクションでは、スプレッドシートからのデータの読み取りに焦点を当てます。出力を Google スプレッドシートに書き込む方法については、後のセクションで説明します。
ログインしてスプレッドシートへのアクセスを承認
<ph type="x-smartling-placeholder">PaLM のマジックで使用するためにスプレッドシートをフォーマットする
Google スプレッドシートの ID または URL を --sheets_input_names
フラグに渡して、テンプレート データとして読み込みます。
プロンプト テンプレートでデータを使用するには、スプレッドシートで次の形式を使用します。
- シートの最初の行に(プロンプト テンプレートの)変数名を入力します。
- 各変数に代入するデータを各行に入力します。
たとえば、プロンプト テンプレートに name
と temperament
という 2 つの変数を置き換える場合、スプレッドシートを次のように記述します。
name | 気性 |
---|---|
Milo | 生意気な |
ビッグスリー | リラックス |
スブラ | 恥ずかしい |
%%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.
実際に試してみましょう。
自分のデータを使ってこれを試すには、新しいスプレッドシートを作成し、ID を --sheets_input_names
に渡します。ID と URL だけでなく、タイトルでシートを検索することもできます(例:%%palm --sheets_input_names "Animal adjectives"
。
スプレッドシートの入力と Python の入力の組み合わせ
スプレッドシートの入力は --inputs
と組み合わせることもできます。
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.
コマンド: palm eval
%%palm eval
を使用して、プロンプトの出力を既知のグラウンド トゥルース データと比較します。
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:
モデル出力の後処理
グラウンド トゥルース テストを実行するには、モデルの出力の後処理が必要になる場合があります。
後処理関数を使用すると、モデルの出力を処理する関数を定義できます。eval
コマンドの場合、最終的な等価チェックでは結果列のみが使用されます。
post_process_replace_fn
デコレータを使用して、結果を後処理する関数を定義します。
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()
上で定義した extract_and_normalize
関数は、モデルからの出力を受け取り、最初のレスポンスのみを残して、繰り返し出現する言語ペアを削除します。後処理について詳しくは、後処理のセクションをご覧ください。
%%palm eval --inputs test_data --ground_truth ground_truth | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:
コマンド: palm compile
%%palm compile
コマンドを使用して、プレースホルダを含むプロンプトを Python 内から呼び出し可能な関数に変換します。
すべてのフラグと後処理が「コンパイルされる」関数に渡され、呼び出されたときに使用されます。
この例では、前の extract_and_normalize
後処理関数を使用して、translate_en_to_fr
という関数を作成しています。
%%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})
出力形式
デフォルトでは、「compiled」関数は、その出力を Pandas DataFrame
として表示されるオブジェクトとして返します。ただし、結果オブジェクトをそれぞれ .as_dict()
または .as_dataframe()
を使用して DataFrame
または辞書に変換できます。
詳細については、--outputs
フラグをご覧ください。
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
コマンド: palm compare
%%palm compare
はコンパイルされたプロンプトを実行し、比較結果を並べたテーブルを生成するため、違いを調べることができます。
%%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
カスタム比較関数
デフォルトでは、compare
は返された結果の等価性をチェックするだけです。ただし、--compare_fn
フラグを使用して 1 つ以上のカスタム関数を指定できます。
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
その他のコマンド
ヘルプ
--help
フラグを指定すると、%%palm
に直接渡すことができるサポート対象のコマンドが表示されます。
--help
を追加して、各コマンドの詳細なドキュメントを表示します。次に例を示します。
%%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.
モデル
--model
フラグを使用して、使用する PaLM モデル バリアントを指定します。
サポートされているモデルを取得するには、list_models()
メソッドをご覧ください。PaLM マジックは、generateText
メソッドをサポートするすべてのモデルで使用できます。
%%palm run --model models/text-bison-001
My favourite color is
モデル パラメータ
--candidate_count
や --temperature
などのモデル パラメータを構成することもできます。
%%palm run --model models/text-bison-001 --temperature 0.5
My favourite color is
デバッグ: エコーモデル
プロンプトをエコーバックする echo
モデルも使用できます。API 呼び出しや割り当ての消費を行わないため、出力や後処理のテストをすばやく簡単に行うことができます。
%%palm --model_type echo
A duck's quack does not echo.
出力を Python にエクスポートする
PaLM のマジックでは、表形式の出力を表示するだけでなく、モデルの出力を Python 変数に保存できるため、出力をさらに操作したり、結果をエクスポートしたりできます。
この例では、出力が Python 変数 fave_colors
に保存されます。
%%palm --outputs fave_colors
The best colors to wear in spring-time are
出力変数は、デフォルトで Pandas DataFrame
として表示されるカスタム オブジェクトです。as_dict()
または as_pandas_dataframe()
を呼び出すことで、明示的に Python 辞書またはデータフレームに強制変換できます。
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 スプレッドシートに書き込む
--sheets_output_names
を使用して、出力を Google スプレッドシートに保存し直すことができます。ログインし、非公開のスプレッドシートにアクセスするための適切な権限が必要です。
これを試すために、新しいスプレッドシートを作成して「Translation results
」という名前を付けます。入力フラグと同様に、--sheets_output_names
フラグもテキスト名の代わりにシートの URL または ID を受け入れます。
%%palm --inputs english_words --sheets_output_names "Translation results"
English: Hello
French: Bonjour
English: {word}
French:
結果は新しいタブに保存され、ここに Colab で表示されるものと同じデータが含まれます。
複数の候補の生成
1 つのプロンプトに対して複数の出力を生成するには、--candidate_count
をモデルに渡します。デフォルトでは 1 に設定されており、上位の結果のみが出力されます。
複数の候補で同じ出力が生成されることがあります。これらは --unique
フラグを使用してフィルタリングできます。これにより、候補バッチから結果の重複が解消されます(ただし、複数のプロンプト間で重複を排除することはできません)。
%%palm run --temperature 1.0 --candidate_count 8 --unique
In a single word, my favourite color is
Result Num
列では、同じプロンプトから生成された複数の候補が区別されます。
モデル出力の後処理
想定される出力と構造が多岐にわたると、モデルの出力を問題の分野に適応させるのが難しくなる場合があります。PaLM マジックには後処理オプションが用意されており、Python コードを使用してモデル出力を変更または処理できます。
後処理関数では、出力に新しい列を追加するか、text_result
列を変更できます。text_result
列は最後の列であり、eval
コマンドと compare
コマンドで最終出力を決定するために使用されます。
後処理で使用するサンプル関数の例を次に示します。1 つは新しい列を追加し、もう 1 つは post_process_replace_fn
デコレータを使用して結果列を更新します。
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
これらの関数を使用するには、以下のように、パイプ演算子(|
)を使用して %%palm
コマンドに追加します。
%%palm run | word_count | extract_first_sentence
The happiest thing I can imagine is
ここでは順序が重要です。word_count
が呼び出されると、元のモデル出力を使用して単語数が計算されます。これらを入れ替えると、単語カウントは抽出された最初の文の単語数になります。
関連情報
- LLM について詳しくは、LLM のコンセプト ガイドをご覧ください。
- PaLM を最大限に活用するため、プロンプトの作成方法について詳しくは、プロンプト ガイドラインをご覧ください。
- さまざまなプロンプトでプロトタイプを作成してテストするには、Google AI Studio をご覧ください。また、詳細については、Google AI Studio クイックスタートをご覧ください。