Gemini API : Tutorials : クイックスタート with Python (3) 埋め込みの使用
翻訳 : クラスキャット セールスインフォメーション
作成日時 : 03/14/2024
* 本ページは、ai.google.dev の以下のページを参考にしてまとめ直し、適宜、補足説明したものです :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
Gemini API : Tutorials : クイックスタート with Python (3) 埋め込みの使用
埋め込みの使用
埋め込み は、情報を配列内の浮動小数点数のリストとして表現するために使用されるテクニックです。Gemini では、テキスト (単語、センテンス、そしてテキストブロック) をベクトル化形式で表現できて、埋め込みを比較して対比することを簡単にします。例えば、類似の主題や感情を共有する 2 つのテキストは類似の埋め込みを持つはずで、コサイン類似度のような数学的比較テクニックで識別できます。埋め込みをどのように、そして何故使用するべきかの詳細は、埋め込みガイド を参照してください。
embed_content メソッドを使用して埋め込みを生成します。このメソッドは以下のタスク (task_type) のために埋め込みを扱います :
タスクタイプ | 説明 |
---|---|
RETRIEVAL_QUERY | 与えられたテキストが検索/取得設定でクエリーであることを指定します。 |
RETRIEVAL_DOCUMENT | 与えられたテキストが検索/取得設定でドキュメントであることを指定します。このタスクタイプの使用はタイトルを必要とします。 |
SEMANTIC_SIMILARITY | 与えられたテキストが意味的テキスト類似度 (STS, Semantic Textual Similarity) のために使用されることを指定します。 |
CLASSIFICATION | 埋め込みが分類のために使用されることを指定します。 |
CLUSTERING | 埋め込みがクラスタリングのために使用されることを指定します。 |
以下はドキュメント取得用に単一文字列の埋め込みを生成します :
result = genai.embed_content(
model="models/embedding-001",
content="What is the meaning of life?",
task_type="retrieval_document",
title="Embedding of single string")
# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')
[-0.003216741, -0.013358698, -0.017649598, -0.0091 ... TRIMMED]
embedding-001 は 768 次元です :
len(result['embedding'])
768
⭐️ Note : retrieval_document タスクタイプはタイトルを受け取る唯一のタスクです。
日本語の場合でも同様です :
result2 = genai.embed_content(
model="models/embedding-001",
content="人生の意味とは?",
task_type="retrieval_document",
title="単一文字列の埋め込み")
print(str(result2['embedding'])[:50], '... TRIMMED]')
[0.04308387, -0.04839182, -0.05800489, -0.02060021 ... TRIMMED]
len(result2['embedding'])
768
文字列のバッチを処理するには、content 内で文字列のリストを渡します :
result = genai.embed_content(
model="models/embedding-001",
content=[
'What is the meaning of life?',
'How much wood would a woodchuck chuck?',
'How does the brain work?'],
task_type="retrieval_document",
title="Embedding of list of strings")
# A list of inputs > A list of vectors output
for v in result['embedding']:
print(str(v)[:50], '... TRIMMED ...')
[0.0040260437, 0.004124458, -0.014209415, -0.00183 ... TRIMMED ... [-0.004049845, -0.0075574904, -0.0073463684, -0.03 ... TRIMMED ... [0.025310587, -0.0080734305, -0.029902633, 0.01160 ... TRIMMED ...
genai.embed_content 関数が単純な文字列や文字列のリストを受け取る一方で、それは実際には (GenerativeModel.generate_content のように) glm.Content タイプ周りに構築されます。glm.Content オブジェクトは API で会話の主要なユニットです。
glm.Content オブジェクトがマルチモーダルである一方で、embed_content メソッドはテキスト埋め込みのみをサポートします。この設計は API にマルチモーダルな埋め込みへの拡張の可能性を与えます。
response.candidates[0].content
parts { text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results." } role: "model"
result = genai.embed_content(
model = 'models/embedding-001',
content = response.candidates[0].content)
# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED ...')
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED ...
同様に、チャット履歴は glm.Content オブジェクトのリストを含み、これを embed_content 関数に直接渡すことができます :
chat.history
[parts { text: "In one sentence, explain how a computer works to a young child." } role: "user", parts { text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!" } role: "model", parts { text: "Okay, how about a more detailed explanation to a high schooler?" } role: "user", parts { text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results." } role: "model"]
result = genai.embed_content(
model = 'models/embedding-001',
content = chat.history)
# 1 input > 1 vector output
for i,v in enumerate(result['embedding']):
print(str(v)[:50], '... TRIMMED...')
[-0.014632266, -0.042202696, -0.015757175, 0.01548 ... TRIMMED... [-0.010979066, -0.024494737, 0.0092659835, 0.00803 ... TRIMMED... [-0.010055617, -0.07208932, -0.00011750793, -0.023 ... TRIMMED... [-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED...
以上