埋め込み
テキスト埋め込みは、意味的類似性を測定できるテキストの数値表現です。このガイドでは、埋め込み、その応用、および検索、レコメンデーション、異常検出などのタスクに埋め込みモデルを使用する方法を紹介します。
埋め込みを実装する前に
埋め込みプロバイダーを選択する際、ニーズと好みに応じて考慮すべき要因がいくつかあります:
- データセットのサイズとドメインの特異性: モデルの学習データセットのサイズと、埋め込みたいドメインとの関連性。より大きなデータセットや、よりドメイン固有のデータは、一般的にドメイン内での埋め込みの性能が向上します
- 推論性能: 埋め込みの検索速度とエンドツーエンドのレイテンシー。これは特に大規模な本番環境での展開において重要な考慮事項です
- カスタマイズ: プライベートデータでの継続的な学習や、非常に特定のドメイン向けのモデルの特殊化のオプション。これにより、独自の語彙に対する性能を向上させることができます
Anthropicで埋め込みを取得する方法
Anthropicは独自の埋め込みモデルを提供していません。上記の考慮事項をすべて網羅する幅広いオプションと機能を持つ埋め込みプロバイダーの1つがVoyage AIです。
Voyage AIは最先端の埋め込みモデルを提供し、金融や医療などの特定の業界ドメイン向けのカスタマイズされたモデル、または個々の顧客向けにカスタマイズされたモデルを提供しています。
このガイドの残りの部分はVoyage AIについてですが、特定のユースケースに最適なものを見つけるために、さまざまな埋め込みベンダーを評価することをお勧めします。
Voyage AIを始める
Voyage埋め込みにアクセスするには:
- Voyage AIのウェブサイトでサインアップ
- APIキーを取得
- 利便性のためにAPIキーを環境変数として設定:
export VOYAGE_API_KEY="<your secret key>"
公式のvoyageai PythonパッケージまたはHTTPリクエストを使用して、以下のように埋め込みを実行できます。
Voyage Pythonパッケージ
voyageai
パッケージは以下のコマンドでインストールできます:
pip install -U voyageai
その後、クライアントオブジェクトを作成し、テキストの埋め込みを開始できます:
import voyageai
vo = voyageai.Client()
# これは自動的に環境変数VOYAGE_API_KEYを使用します。
# 代わりにvo = voyageai.Client(api_key="<your secret key>")も使用できます
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])
result.embeddings
は、それぞれ1024個の浮動小数点数を含む2つの埋め込みベクトルのリストになります。
上記のコードを実行すると、2つの埋め込みが画面に表示されます:
[0.02012746, 0.01957859, ...] # "Sample text 1"の埋め込み
[0.01429677, 0.03077182, ...] # "Sample text 2"の埋め込み
埋め込みを作成する際、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
HTTPリクエストを通じて埋め込みを取得することもできます。例えば、ターミナルでcurl
コマンドを使用してHTTPリクエストを送信できます:
curl https://api.voyageai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-2"
}'
レスポンスとして、埋め込みとトークン使用量を含むJSONオブジェクトが返されます:
{
"object": "list",
"data": [
{
"embedding": [0.02012746, 0.01957859, ...],
"index": 0
},
{
"embedding": [0.01429677, 0.03077182, ...],
"index": 1
}
],
"model": "voyage-2",
"usage": {
"total_tokens": 10
}
}
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は現在2つのオプションをサポートしています:- 指定されていない場合(デフォルトは
None
):埋め込みは浮動小数点数のリストとして表現されます "base64"
:埋め込みはBase64エンコーディングに圧縮されます
- 指定されていない場合(デフォルトは
Voyage埋め込みの例
Voyageで埋め込みを取得する方法がわかったので、簡単な例で実際に見てみましょう。
6つの文書からなる小さなコーパスから検索を行うとします
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature."
]
まず、Voyageを使用してそれぞれを埋め込みベクトルに変換します
import voyageai
vo = voyageai.Client()
# ドキュメントを埋め込む
doc_embds = vo.embed(
documents, model="voyage-2", input_type="document"
).embeddings
埋め込みにより、ベクトル空間でセマンティック検索/検索を行うことができます。次に、例のクエリを変換し、
query = "When is Apple's conference call scheduled?"
埋め込みに変換し、埋め込み空間での距離に基づいて最も関連性の高い文書を見つけるために最近傍検索を実行します。
import numpy as np
# クエリを埋め込む
query_embd = vo.embed(
[query], model="voyage-2", input_type="query"
).embeddings[0]
# 類似度を計算
# Voyage埋め込みは長さ1に正規化されているため、内積と
# コサイン類似度は同じです。
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])
ドキュメントとクエリの埋め込みには、それぞれinput_type="document"
とinput_type="query"
を使用していることに注意してください。詳細な仕様はこちらで確認できます。
出力は5番目のドキュメントになり、これは実際にクエリに最も関連性の高いものです:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.
利用可能なVoyageモデル
Voyageは以下の埋め込みモデルを推奨しています:
モデル | コンテキスト長 | 埋め込み次元 | 説明 |
---|---|---|---|
voyage-large-2 | 16000 | 1536 | Voyage AIの最も強力な汎用埋め込みモデル。 |
voyage-code-2 | 16000 | 1536 | コード検索用に最適化(代替案より17%優れている)され、汎用コーパスでもSoTAを達成。詳細は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のノートブックをアップロードして、その中の指示に従ってください。
FAQ
価格
最新の価格詳細については、Voyageの価格ページをご覧ください。