嵌入向量
文本嵌入是文本的數值表示,可用於衡量語義相似度。本指南介紹嵌入向量、其應用場景,以及如何使用嵌入模型進行搜索、推薦和異常檢測等任務。
在實施嵌入向量之前
在選擇嵌入向量提供商時,根據您的需求和偏好,可以考慮以下幾個因素:
- 數據集大小和領域特異性: 模型訓練數據集的大小及其與您要嵌入的領域的相關性。更大或更具領域特異性的數據通常會產生更好的領域內嵌入效果
- 推理性能: 嵌入查找速度和端到端延遲。這對於大規模生產部署來說是一個特別重要的考慮因素
- 自定義: 在私有數據上繼續訓練的選項,或針對特定領域的模型專門化。這可以提高在獨特詞彙表上的性能
如何使用 Anthropic 獲取嵌入向量
Anthropic 不提供自己的嵌入模型。Voyage AI 是一個涵蓋上述所有考慮因素的嵌入向量提供商,具有多種選項和功能。
Voyage AI 提供最先進的嵌入模型,並為金融和醫療保健等特定行業領域提供定制模型,或為個別客戶提供定制微調模型。
本指南的其餘部分是關於 Voyage AI 的,但我們建議您評估各種嵌入向量供應商,以找到最適合您特定用例的供應商。
Voyage AI 入門
要訪問 Voyage 嵌入向量:
- 在 Voyage AI 的網站上註冊
- 獲取 API 密鑰
- 為方便起見,將 API 密鑰設置為環境變量:
您可以通過使用官方 voyageai Python 包或 HTTP 請求來運行嵌入向量,如下所述。
Voyage Python 包
可以使用以下命令安裝 voyageai
包:
然後,您可以創建一個客戶端對象並開始使用它來嵌入您的文本:
result.embeddings
將是一個包含兩個嵌入向量的列表,每個向量包含 1024 個浮點數。
運行上述代碼後,兩個嵌入向量將顯示在屏幕上:
在創建嵌入向量時,您可以為 embed()
函數指定其他幾個參數。以下是規範:
voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)
- texts (List[str]) - 作為字符串列表的文本列表,例如
["I like cats", "I also like dogs"]
。目前,列表的最大長度為 128,列表中的總標記數對於voyage-2
最多為 320K,對於voyage-large-2
/voyage-code-2
最多為 120K。 - model (str) - 模型名稱。推薦選項:
voyage-2
、voyage-large-2
、voyage-code-2
。 - input_type (str, 可選,默認為
None
) - 輸入文本的類型。默認為None
。其他選項:query
、document
- 當 input_type 設置為
None
時,輸入文本將直接由 Voyage 的嵌入模型編碼。或者,當輸入是文檔或查詢時,用戶可以將input_type
指定為query
或document
。在這種情況下,Voyage 將在輸入文本前添加特殊提示,並將擴展的輸入發送到嵌入模型 - 對於檢索/搜索用例,我們建議在編碼查詢或文檔時指定此參數以提高檢索質量。使用和不使用
input_type
參數生成的嵌入向量是兼容的
- 當 input_type 設置為
- truncation (bool, 可選,默認為
None
) - 是否將輸入文本截斷以適應上下文長度。- 如果為
True
,超長輸入文本將被截斷以適應上下文長度,然後由嵌入模型向量化 - 如果為
False
,當任何給定文本超過上下文長度時將引發錯誤 - 如果未指定(默認為
None
),如果輸入文本略微超過上下文窗口長度,Voyage 將在將其發送到嵌入模型之前截斷輸入文本。如果它顯著超過上下文窗口長度,將引發錯誤
- 如果為
Voyage HTTP API
您也可以通過請求 Voyage HTTP API 獲取嵌入向量。例如,您可以通過終端中的 curl
命令發送 HTTP 請求:
您將收到一個包含嵌入向量和標記使用情況的 JSON 對象:
Voyage AI 的嵌入端點是 https://api.voyageai.com/v1/embeddings
(POST)。請求標頭必須包含 API 密鑰。請求主體是一個包含以下參數的 JSON 對象:
- input (str, List[str]) - 單個文本字符串,或作為字符串列表的文本列表。目前,列表的最大長度為 128,列表中的總標記數對於
voyage-2
最多為 320K,對於voyage-large-2
/voyage-code-2
最多為 120K。 - model (str) - 模型名稱。推薦選項:
voyage-2
、voyage-large-2
、voyage-code-2
。 - input_type (str, 可選,默認為
None
) - 輸入文本的類型。默認為None
。其他選項:query
、document
- truncation (bool, 可選,默認為
None
) - 是否將輸入文本截斷以適應上下文長度- 如果為
True
,超長輸入文本將在被嵌入模型向量化之前截斷以適應上下文長度 - 如果為
False
,當任何給定文本超過上下文長度時將引發錯誤 - 如果未指定(默認為
None
),如果輸入文本略微超過上下文窗口長度,Voyage 將在將其發送到嵌入模型之前截斷輸入文本。如果它顯著超過上下文窗口長度,將引發錯誤
- 如果為
- encoding_format (str, 可選,默認為
None
) - 嵌入向量的編碼格式。Voyage 目前支持兩個選項:- 如果未指定(默認為
None
):嵌入向量表示為浮點數列表 "base64"
:嵌入向量壓縮為 Base64 編碼
- 如果未指定(默認為
Voyage 嵌入向量示例
現在我們知道了如何使用 Voyage 獲取嵌入向量,讓我們通過一個簡短的示例來看看它的實際應用。
假設我們有一個包含六個文檔的小型語料庫可供檢索
我們首先使用 Voyage 將每個文檔轉換為嵌入向量
嵌入向量將允許我們在向量空間中進行語義搜索/檢索。然後我們可以將一個示例查詢,
轉換為嵌入向量,然後進行最近鄰搜索,根據嵌入空間中的距離找到最相關的文檔。
請注意,我們分別使用 input_type="document"
和 input_type="query"
來嵌入文檔和查詢。更多規範可以在這裡找到。
輸出將是第 5 個文檔,這確實是與查詢最相關的:
可用的 Voyage 模型
Voyage 推薦使用以下嵌入模型:
模型 | 上下文長度 | 嵌入維度 | 描述 |
---|---|---|---|
voyage-large-2 | 16000 | 1536 | Voyage AI 最強大的通用嵌入模型。 |
voyage-code-2 | 16000 | 1536 | 針對代碼檢索進行優化(比替代方案好 17%),並且在通用語料庫上也達到了最先進水平。詳情請參見這篇 Voyage 博客文章。 |
voyage-2 | 4000 | 1024 | 基礎通用嵌入模型,針對延遲和質量進行優化。 |
voyage-lite-02-instruct | 4000 | 1024 | 指令微調用於分類、聚類和句子文本相似度任務,這些是此模型唯一推薦的使用場景。 |
voyage-2
和 voyage-large-2
是通用嵌入模型,在各個領域都能達到最先進的性能,並保持高效率。voyage-code-2
針對代碼領域進行了優化,提供了 4 倍的上下文長度以實現更靈活的使用,儘管延遲相對較高。
Voyage 正在積極開發更先進和專門化的模型,並提供微調服務以為個別客戶定制專屬模型。有關專屬模型的更多信息,請聯繫您的 Anthropic 客戶經理或聯繫 Anthropic 支持。
voyage-finance-2
:即將推出voyage-law-2
:即將推出voyage-multilingual-2
:即將推出voyage-healthcare-2
:即將推出
AWS Marketplace 上的 Voyage
Voyage 嵌入向量也可在 AWS Marketplace 上使用。以下是在 AWS 上訪問 Voyage 的說明:
- 訂閱模型包
- 導航到模型包列表頁面並選擇要部署的模型
- 點擊
Continue to subscribe
按鈕 - 仔細查看
Subscribe to this software
頁面上的詳細信息。如果您同意標準最終用戶許可協議 (EULA)、定價和支持條款,請點擊 “Accept Offer” - 選擇
Continue to configuration
並選擇區域後,您將看到一個 Product Arn。這是使用 Boto3 創建可部署模型所需的模型包 ARN- 複製與您選擇的區域相對應的 ARN,並在後續單元格中使用它
- 部署模型包
從這裡開始,在 Sagemaker Studio 中創建一個 JupyterLab 空間,上傳 Voyage 的筆記本,並按照其中的說明進行操作。
常見問題
定價
訪問 Voyage 的定價頁面以獲取最新的定價詳情。