iT邦幫忙

2024 iThome 鐵人賽

DAY 16
1

4-3 Gemini API: Embeddings 快速入門指南

Gemini API 生成最先進的文本嵌入。嵌入是一組浮點數,代表一個單詞、句子或段落的含義。您可以在許多下游應用中使用嵌入,例如文檔搜索。

此筆記本提供了一些快速的代碼示例,展示了如何開始生成嵌入。


安裝必要套件

!pip install -q -U google-generativeai

導入庫

import google.generativeai as genai

配置您的 API 密鑰

要運行以下代碼單元,您的 API 密鑰必須存儲在名為 GOOGLE_API_KEY 的 Colab Secret 中。如果您尚未擁有 API 密鑰,或者不確定如何創建 Colab Secret,請參見 Authentication 示例。

from google.colab import userdata
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)

嵌入內容

使用 models/text-embedding-004 模型調用 embed_content 方法來生成文本嵌入。

text = "Hello world"
result = genai.embed_content(model="models/text-embedding-004", content=text)

# 為了使輸出易於管理,只打印嵌入的一部分
print(str(result['embedding'])[:50], '... TRIMMED]')

檢查嵌入維度

print(len(result['embedding'])) # 嵌入的維度是 768

批量嵌入內容

您可以用一次 API 調用嵌入多個提示,以提高效率。

result = genai.embed_content(
    model="models/text-embedding-004",
    content=[
      'What is the meaning of life?',
      'How much wood would a woodchuck chuck?',
      'How does the brain work?'])

for embedding in result['embedding']:
  print(str(embedding)[:50], '... TRIMMED]')

截短嵌入

text-embedding-004 模型還支持更低的嵌入維度。指定 output_dimensionality 來截短輸出。

# 未截短
result1 = genai.embed_content(
    model="models/text-embedding-004",
    content="Hello world")

# 截短
result2 = genai.embed_content(
    model="models/text-embedding-004",
    content="Hello world",
    output_dimensionality=10)

(len(result1['embedding']), len(result2['embedding']))

指定 task_type

讓我們來看看 embed_content 方法所接受的所有參數。共有五個參數:

  • model: 必填。必須是 models/text-embedding-004models/embedding-001
  • content: 必填。您想嵌入的內容。
  • task_type: 可選。嵌入將用於的任務類型。
  • title: 可選。如果您的任務類型是 retrieval_document(或 document),則應僅設置此參數。
  • output_dimensionality: 可選。輸出嵌入的縮減維度。如果設置,將從結尾截短輸出嵌入中的多餘值。這由 models/text-embedding-004 支持,但不能在 models/embedding-001 中指定。

task_type 是一個可選參數,向 API 提供您打算在應用中使用嵌入的提示。

以下是接受的 task_type 參數:

  • unspecified: 如果您未設置值,默認為 retrieval_query
  • retrieval_query(或 query):給定文本在搜索/檢索設置中是查詢。
  • retrieval_document(或 document):給定文本是被檢索語料庫中的文檔。可選的,還設置文檔標題參數 title
  • semantic_similarity(或 similarity):給定文本將用於語義文本相似性(STS)。
  • classification: 給定文本將被分類。
  • clustering: 嵌入將用於聚類。
  • question_answering: 給定文本將用於問答。
  • fact_verification: 給定文本將用於事實驗證。
# 注意,API 根據 `task_type` 返回不同的嵌入
result1 = genai.embed_content(
    model="models/text-embedding-004",
    content="Hello world")

result2 = genai.embed_content(
    model="models/text-embedding-004",
    content="Hello world",
    task_type="document")

print(str(result1['embedding'])[:50], '... TRIMMED]')
print(str(result2['embedding'])[:50], '... TRIMMED]')

學習更多

查看這些 Cookbook 中的示例,以了解有關嵌入的更多信息:

  • 搜索重排序: 使用 Gemini API 的嵌入對 Wikipedia 的搜索結果進行重排序。
  • 異常檢測: 使用 Gemini API 的嵌入檢測數據集中潛在的異常值。
  • 訓練文本分類器: 使用 Gemini API 的嵌入訓練模型,以分類不同類型的新聞組文章。
  • 嵌入在向量數據庫中也有很多應用。查看這個 Chroma DB 示例

您可以在 ai.google.dev 的 嵌入指南 中了解有關嵌入的一般信息。

參考:

https://ywctech.net/ml-ai/langchain-vs-llamaindex-naive-rag/

https://github.com/google-gemini/cookbook/blob/main/quickstarts/Embeddings.ipynb

關於我

我是 Wolke。我是一名專業程式開發者,專長是開發 AI 和程式解決方案。

我投入了不少時間在專業發展上。我是多本書的作者,其中包括《LINE聊天機器人+AI+雲端+開源+程式:輕鬆入門到完整學習》《ChatGPT來襲,未來人人都需具備的運算思維!應用詠唱工程來釋放程式生產力—程式學習/開發篇》。也有出版線上課程,我熱衷於分享我的經驗和技術,幫助其他開發者更好地利用 AI 工具。

也在許多知名大學、論壇、社團擔任講者,如果貴方有需要也歡迎與我聯繫。
2023年 講座 紀錄

最後這篇文章若有切合你的需求,敬請訂閱按讚分享


上一篇
4-2 使用 Gemini API 實現檢索增強生成 (RAG) 和模型調優指南(structured data 結構化數據)
下一篇
4-4 Gemini Function Calling 技術說明
系列文
運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言