埋め込み
テキスト埋め込みは、意味的な類似性の測定を可能にするテキストの数値表現です。このガイドでは、埋め込みとその応用、そして検索、レコメンデーション、異常検知などのタスクに埋め込みモデルを使用する方法を紹介します。
埋め込みを実装する前に
埋め込みプロバイダーを選択する際には、ニーズや好みに応じて考慮できるいくつかの要素があります。
- データセットのサイズとドメイン特異性:モデルの訓練データセットのサイズと、埋め込みたいドメインとの関連性。一般的に、より大規模またはよりドメイン特化したデータほど、ドメイン内でより優れた埋め込みを生成します
- 推論パフォーマンス:埋め込みの検索速度とエンドツーエンドの「latency」(レイテンシ)。これは大規模な本番デプロイメントにおいて特に重要な考慮事項です
- カスタマイズ:プライベートデータでの継続的な訓練や、非常に特定のドメイン向けのモデルの特化のためのオプション。これにより、独自の語彙に対するパフォーマンスを向上させることができます
Anthropicで埋め込みを取得する方法
Anthropicは独自の埋め込みモデルを提供していません。幅広いモデルと機能を備えた埋め込みプロバイダーの1つが、MongoDBのVoyage AIです。
Voyage AIは埋め込みモデルとリランカーを提供しています。その埋め込みモデルには、汎用、マルチモーダル、コンテキスト化、およびドメイン特化型のモデルが含まれます。
このガイドの残りの部分はVoyage AIに関するものですが、特定のユースケースに最適なものを見つけるために、さまざまな埋め込みベンダーを評価することをお勧めします。
利用可能なモデル
Voyage AIは以下のテキスト埋め込みモデルを提供しています。
最新世代
| モデル | コンテキスト長 | 埋め込み次元 | 説明 |
|---|---|---|---|
voyage-4-large | 32,000 | 1024(デフォルト)、256、512、2048 | 最高の汎用および多言語検索品質。詳細はVoyage 4ブログ記事を参照してください。 |
voyage-4 | 32,000 | 1024(デフォルト)、256、512、2048 | 汎用および多言語検索品質に最適化。品質と効率のバランスが取れています。詳細はVoyage 4ブログ記事を参照してください。 |
voyage-4-lite | 32,000 | 1024(デフォルト)、256、512、2048 | レイテンシとコストに最適化。詳細はVoyage 4ブログ記事を参照してください。 |
voyage-code-4 | 32,000 | 1024(デフォルト)、256、512、2048 | コード検索およびエージェント型コーディングアプリケーションに最適化されています。詳細はvoyage-code-4のブログ記事を参照してください。 |
voyage-4-nano | 32,000 | 2048(デフォルト)、256、512、1024 | Hugging Faceからダウンロードして自分で実行するオープンウェイトモデル(Apache 2.0ライセンス)。Atlas Embedding and Reranking APIでは利用できません。詳細はVoyage 4のブログ記事を参照してください。 |
前世代
各モデルのライフサイクルステータスと推奨される代替モデルについては、MongoDBドキュメントのModel deprecations, lifecycle states, and supportを参照してください。
| モデル | コンテキスト長 | 埋め込み次元 | 説明 |
|---|---|---|---|
voyage-3-large | 32,000 | 1024(デフォルト)、256、512、2048 | voyage-4-largeの前世代。詳細はvoyage-3-largeのブログ記事を参照してください。 |
voyage-3.5 | 32,000 | 1024(デフォルト)、256、512、2048 | voyage-4の前世代。詳細はvoyage-3.5のブログ記事を参照してください。 |
voyage-3.5-lite | 32,000 | 1024(デフォルト)、256、512、2048 | voyage-4-liteの前世代。詳細はvoyage-3.5のブログ記事を参照してください。 |
voyage-code-3 | 32,000 | 1024(デフォルト)、256、512、2048 | voyage-code-4の前世代。詳細はvoyage-code-3のブログ記事を参照してください。 |
voyage-finance-2 | 32,000 | 1024 | 金融分野の検索とRAGに最適化されています。詳細はvoyage-finance-2のブログ記事を参照してください。 |
voyage-law-2 | 16,000 | 1024 | 法律分野の検索とRAGに最適化されています。詳細はvoyage-law-2のブログ記事を参照してください。 |
さらに、Voyage AIは以下のマルチモーダル埋め込みモデルを提供しています。これらのモデルはembed()の代わりにmultimodal_embed()で呼び出します。
| モデル | コンテキスト長 | 埋め込み次元 | 説明 |
|---|---|---|---|
voyage-multimodal-3.5 | 32,000 | 1024(デフォルト)、256、512、2048 | テキスト、画像、動画が混在したコンテンツをベクトル化できる高機能なマルチモーダル埋め込みモデル。初の本番グレードの動画埋め込みモデルとして動画をサポートしています。詳細はvoyage-multimodal-3.5のブログ記事を参照してください。 |
voyage-multimodal-3 | 32,000 | 1024 | voyage-multimodal-3.5の前世代。テキストと、PDFのスクリーンショット、スライド、表、図などのコンテンツが豊富な画像が混在したものをベクトル化します。詳細はvoyage-multimodal-3のブログ記事を参照してください。 |
以下のコンテキスト化チャンク埋め込みモデルは、手動でのメタデータ拡張なしにドキュメント全体のコンテキストを捉えたチャンクレベルのベクトルを生成します。これらのモデルはembed()の代わりにcontextualized_embed()で呼び出してください。
| モデル | コンテキスト長 | 埋め込み次元 | 説明 |
|---|---|---|---|
voyage-context-4 | 120,000 | 1024(デフォルト)、256、512、2048 | 汎用および多言語検索品質に最適化されたコンテキスト化チャンク埋め込み。詳細はvoyage-context-4のブログ記事を参照してください。 |
voyage-context-3 | 120,000 | 1024(デフォルト)、256、512、2048 | voyage-context-4の前世代。詳細はvoyage-context-3のブログ記事を参照してください。 |
120,000トークンの制限は、enable_auto_chunkingをtrueに設定した場合に適用されます。それ以外の場合、すべての入力の合計トークン数は32,000を超えることはできません。
Voyage AIはリランカーも提供しています。リランカーはクエリとドキュメントのリストを受け取り、クエリとの関連性でランク付けして返します。これらのモデルはrerank()で呼び出してください。
| モデル | コンテキスト長 | 説明 |
|---|---|---|
rerank-3 | 32,000 | 最高の精度。ほとんどのアプリケーションに推奨されます。詳細はrerank-3のブログ記事を参照してください。 |
rerank-3-lite | 32,000 | レイテンシとコストに最適化されています。詳細はrerank-3のブログ記事を参照してください。 |
rerank-2.5 | 32,000 | rerank-3の前世代。詳細はrerank-2.5のブログ記事を参照してください。 |
rerank-2.5-lite | 32,000 | rerank-3-liteの前世代。詳細はrerank-2.5のブログ記事を参照してください。 |
どのモデルを使用すべきか迷っていますか?MongoDBドキュメントのVoyage AI embedding and reranking models overviewを参照してください。
Voyage AIを使い始める
Voyage AIモデルにアクセスするには、MongoDB AtlasでモデルAPIキーを作成します。
- MongoDB Atlasアカウントにサインアップするか、ログインします。
- Atlasプロジェクトで、ナビゲーションバーのAI Model APIsを選択し、Create model API keyをクリックしてキーに名前を付け、Createをクリックします。
- 便宜上、APIキーを環境変数として設定します。
export VOYAGE_API_KEY="<your model API key>"詳細については、MongoDBドキュメントのVoyage AI quick startを参照してください。
埋め込みは、以下のセクションで説明するように、公式のvoyageai PythonパッケージまたはHTTPリクエストのいずれかを使用して取得できます。Voyage AIには公式のTypeScriptクライアントもあります。AtlasのモデルAPIキーで使用するには、MongoDBドキュメントのTypeScript clientで説明されているように、そのenvironmentオプションをhttps://ai.mongodb.com/v1に設定します。
Voyage AI Pythonライブラリ
次のコマンドを使用してvoyageaiパッケージをインストールします。AtlasのモデルAPIキーを使用するには、バージョン0.3.7以降が必要です。
pip install -U voyageai次に、クライアントオブジェクトを作成し、それを使用してテキストの埋め込みを開始できます。
import voyageai
vo = voyageai.Client()
# これにより、環境変数 VOYAGE_API_KEY が自動的に使用されます。
# または、vo = voyageai.Client(api_key="<your model API key>") を使用することもできます
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddingsは2つの埋め込みベクトルのリストで、それぞれ1024個の浮動小数点数を含んでいます。前述のコードを実行すると、2つの埋め込みが画面に出力されます。
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"埋め込みを作成する際に、embed()関数に他のいくつかの引数を指定できます。
Pythonパッケージの詳細については、MongoDBドキュメントのAccessing Voyage AI modelsを参照してください。
Voyage AI HTTP API
Atlas Embedding and Reranking APIにHTTPリクエストを送信して埋め込みを取得することもできます。たとえば、ターミナルでcurlコマンドを使用してHTTPリクエストを送信できます。
curl https://ai.mongodb.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4",
"input_type": "document"
}'得られるレスポンスは、埋め込みとトークン使用量を含むJSONオブジェクトです。
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"object": "embedding",
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}AtlasのモデルAPIキーはai.mongodb.comで動作しますが、地域にスコープされたキーは例外で、その地域のエンドポイントを使用します。代わりにVoyage AIプラットフォームのAPIキーをお持ちの場合は、MongoDBドキュメントのMigrate your applications to use the Atlas Embedding and Reranking APIを参照してください。
リクエストとレスポンスの完全なリファレンスについては、Atlas Embedding and Reranking APIドキュメントのCreate text embeddingsを参照してください。
AWS Marketplace
Voyage AIモデルは、MongoDBのセラープロファイルを通じてAWS Marketplaceでも利用できます。手順については、MongoDBドキュメントのDeploy Voyage AI models using AWS Marketplaceを参照してください。
クイックスタートの例
以下の簡単な例は、埋め込みの使用方法を示しています。
検索対象として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 AIを使用して各ドキュメントを埋め込みベクトルに変換します。
import voyageai
vo = voyageai.Client()
# ドキュメントを埋め込む
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddings埋め込みにより、ベクトル空間でセマンティック検索/取得を行うことができます。例として次のクエリが与えられたとします。
query = "When is Apple's conference call scheduled?"次に、これを埋め込みに変換し、最近傍探索を行って、埋め込み空間内の距離に基づいて最も関連性の高いドキュメントを見つけます。
import numpy as np
# クエリを埋め込みます
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# 類似度を計算します
# Voyage AI の埋め込みは長さ 1 に正規化されているため、内積と
# コサイン類似度は同じになります。
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])ドキュメントとクエリの埋め込みには、それぞれinput_type="document"とinput_type="query"が使用されていることに注意してください。input_typeの詳細については、FAQのinput_typeパラメータはいつ、どのように使用すべきですか?を参照してください。
出力は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.ベクトルデータベースを含め、埋め込みを使用してRAGを行う方法に関する詳細なレシピ集をお探しの場合は、RAGレシピをご確認ください。
FAQ
埋め込みモデルは、生成モデルと同様に、強力なニューラルネットワークを利用してセマンティックなコンテキストを捉えて圧縮します。Voyage AIの経験豊富なAI研究者チームは、以下を含む埋め込みプロセスのあらゆるコンポーネントを最適化しています。
- モデルアーキテクチャ
- データ収集
- 損失関数
- オプティマイザーの選択
Voyage AIの技術的アプローチの詳細については、Voyage AIブログをご覧ください。
汎用的な埋め込みには、以下のモデルが推奨されます。
voyage-4-large:最高品質voyage-4-lite:最低のレイテンシとコストvoyage-4:バランスの取れたパフォーマンス
検索には、input_typeパラメータを使用して、テキストがクエリタイプかドキュメントタイプかを指定してください。
ドメイン特化モデル:
- 法律関連のタスク:
voyage-law-2 - コード検索とエージェント型コーディング:
voyage-code-4 - 金融関連のタスク:
voyage-finance-2
チャンクレベルおよびドキュメントレベルの検索:voyage-context-4
テキスト、画像、動画:voyage-multimodal-3.5
Voyage AIの埋め込みは、ドット積類似度、コサイン類似度、またはユークリッド距離で使用できます。埋め込みの類似度の説明については、このベクトル類似度ガイドを参照してください。
Voyage AIの埋め込みは長さ1に正規化されているため、以下のことが言えます。
- コサイン類似度はドット積類似度と等価ですが、後者の方がより高速に計算できます。
- コサイン類似度とユークリッド距離は同一のランキング結果になります。
MongoDBドキュメントのTokenizationを参照してください。
すべての検索タスクとユースケース(例えばRAG)では、input_typeパラメータを使用して、入力テキストがクエリかドキュメントかを指定してください。input_typeを省略したり、input_type=Noneに設定したりしないでください。入力テキストがクエリかドキュメントかを指定することで、検索のためのより優れた密ベクトル表現を作成でき、検索品質の向上につながります。
input_typeパラメータを使用すると、埋め込みの前に特別なプロンプトが入力テキストの先頭に付加されます。具体的には:
📘
input_typeに関連付けられたプロンプト
- クエリの場合、プロンプトは
"Represent the query for retrieving supporting documents: "です。- ドキュメントの場合、プロンプトは
"Represent the document for retrieval: "です。- 例
input_type="query"の場合、「When is Apple's conference call scheduled?」のようなクエリは「Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?」になります。input_type="document"の場合、「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.」のようなドキュメントは「Represent the document for retrieval: 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.」になります。
埋め込みにおける「quantization」(量子化)は、32ビット単精度浮動小数点数などの高精度の値を、8ビット整数や1ビットのバイナリ値などの低精度の形式に変換し、ストレージ、メモリ、コストをそれぞれ4分の1および32分の1に削減します。サポートされているVoyage AIモデルでは、output_dtypeパラメータで出力データ型を指定することで量子化を有効にできます。
float:返される各埋め込みは、32ビット(4バイト)単精度浮動小数点数のリストです。これはデフォルトであり、最高の精度/検索精度を提供します。int8とuint8:返される各埋め込みは、それぞれ-128から127、および0から255の範囲の8ビット(1バイト)整数のリストです。binaryとubinary:返される各埋め込みは、ビットパックされた量子化済みの単一ビット埋め込み値を表す8ビット整数のリストです。binaryの場合はint8、ubinaryの場合はuint8です。返される整数リストの長さは、埋め込みの実際の次元の1/8です。バイナリ型は、次の例に示すようにオフセットバイナリ方式を使用します。
バイナリ量子化の例
次の8つの埋め込み値を考えてみましょう:-0.03955078、0.006214142、-0.07446289、-0.039001465、0.0046463013、0.00030612946、-0.08496094、0.03994751。バイナリ量子化では、0以下の値はバイナリの0に、正の値はバイナリの1に量子化され、次のバイナリシーケンスになります:0、1、0、0、1、1、0、1。これらの8ビットは、単一の8ビット整数01001101にパックされます(左端のビットが最上位ビット)。
ubinary:バイナリシーケンスは直接変換され、符号なし整数(uint8)77として表されます。binary:バイナリシーケンスは、オフセットバイナリ方式(77 - 128 = -51)を使用して計算された符号付き整数(int8)-51として表されます。
各データ型をサポートするモデルについては、Atlas Embedding and Reranking APIドキュメントのCreate text embeddingsを参照してください。
マトリョーシカ学習は、単一のベクトル内に粗いものから細かいものまでの表現を持つ埋め込みを作成します。voyage-code-4など、複数の出力次元をサポートするVoyage AIモデルは、このようなマトリョーシカ埋め込みを生成します。APIからより短いベクトルを取得するには、output_dimensionを渡します(たとえばoutput_dimension=256)。すでに保存したベクトルを短くするには、先頭の次元のサブセットを保持して切り詰め、その後再度正規化します。たとえば、次のPythonコードは、1024次元のベクトルを256次元に切り詰める方法を示しています。
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# voyage-code-4 のベクトルを生成します(デフォルトでは 1024 次元の浮動小数点数です)
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-4").embeddings
# 短い次元数を設定します
short_dim = 256
# ベクトルを短い次元数にリサイズして正規化します
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()料金
最新の料金の詳細については、MongoDBドキュメントのModel pricingを参照してください。
Was this page helpful?