エンベディング
テキストエンベディングは、意味的類似性を測定できるテキストの数値表現です。このガイドでは、エンベディング、その応用、および検索、レコメンデーション、異常検知などのタスクにエンベディングモデルを使用する方法を紹介します。
エンベディングを実装する前に
エンベディングプロバイダーを選択する際、ニーズと好みに応じて考慮すべき要因がいくつかあります:
- データセットのサイズとドメインの特異性:モデルの学習データセットのサイズと、エンベッドしたいドメインとの関連性。より大きなデータセットや、より特定のドメインに特化したデータは、一般的にドメイン内でより良いエンベディングを生成します
- 推論パフォーマンス:エンベディングの検索速度とエンドツーエンドのレイテンシー。これは特に大規模な本番環境での展開において重要な考慮事項です
- カスタマイズ:プライベートデータでの継続的なトレーニング、または非常に特定のドメイン向けのモデルの特殊化のオプション。これにより、独自の語彙に対するパフォーマンスを向上させることができます
Anthropicでエンベディングを取得する方法
Anthropicは独自のエンベディングモデルを提供していません。上記の考慮事項をすべて網羅する幅広いオプションと機能を持つエンベディングプロバイダーの1つがVoyage AIです。
Voyage AIは最先端のエンベディングモデルを提供し、金融や医療などの特定の業界ドメイン向けのカスタマイズされたモデル、または個々の顧客向けにカスタマイズされた微調整モデルを提供しています。
このガイドの残りの部分はVoyage AIについてですが、特定のユースケースに最適なものを見つけるために、さまざまなエンベディングベンダーを評価することをお勧めします。
利用可能なモデル
Voyageは以下のテキストエンベディングモデルの使用を推奨しています:
モデル | コンテキスト長 | エンベディング次元 | 説明 |
---|---|---|---|
voyage-3-large | 32,000 | 1024(デフォルト)、256、512、2048 | 最高の汎用および多言語検索品質。 |
voyage-3 | 32,000 | 1024 | 汎用および多言語検索品質に最適化。詳細はブログ記事をご覧ください。 |
voyage-3-lite | 32,000 | 512 | レイテンシーとコストに最適化。詳細はブログ記事をご覧ください。 |
voyage-code-3 | 32,000 | 1024(デフォルト)、256、512、2048 | コード検索に最適化。詳細はブログ記事をご覧ください。 |
voyage-finance-2 | 32,000 | 1024 | 金融検索とRAGに最適化。詳細はブログ記事をご覧ください。 |
voyage-law-2 | 16,000 | 1024 | 法律および長文コンテキスト検索とRAGに最適化。すべてのドメインでパフォーマンスが向上。詳細はブログ記事をご覧ください。 |
さらに、以下のマルチモーダルエンベディングモデルが推奨されています:
モデル | コンテキスト長 | エンベディング次元 | 説明 |
---|---|---|---|
voyage-multimodal-3 | 32000 | 1024 | PDFのスクリーンショット、スライド、表、図などのテキストとコンテンツが豊富な画像を組み合わせてベクトル化できる豊かなマルチモーダルエンベディングモデル。詳細はブログ記事をご覧ください。 |
どのテキストエンベディングモデルを使用すべきか迷っていますか?FAQをご確認ください。
Voyage AIを始める
Voyageエンベディングにアクセスするには:
- Voyage AIのウェブサイトでサインアップ
- APIキーを取得
- 便宜上、APIキーを環境変数として設定:
以下に説明するように、公式のvoyageai
PythonパッケージまたはHTTPリクエストを使用してエンベディングを取得できます。
Voyage Pythonパッケージ
voyageai
パッケージは以下のコマンドでインストールできます:
その後、クライアントオブジェクトを作成し、テキストのエンベディングを開始できます:
result.embeddings
は、それぞれ1024個の浮動小数点数を含む2つのエンベディングベクトルのリストになります。上記のコードを実行すると、2つのエンベディングが画面に表示されます:
エンベディングを作成する際、embed()
関数に他のいくつかの引数を指定することもできます。仕様の詳細はこちらをご覧ください
Voyage HTTP API
Voyage HTTP APIにリクエストを送信してエンベディングを取得することもできます。例えば、ターミナルでcurl
コマンドを使用してHTTPリクエストを送信できます:
レスポンスとして、エンベディングとトークン使用量を含むJSONオブジェクトが返されます:
エンベディングエンドポイントの詳細については、Voyageのドキュメントをご覧ください。
AWS Marketplace
VoyageエンベディングはAWS Marketplaceでも利用可能です。AWSでのVoyageへのアクセス手順はこちらで確認できます。
クイックスタート例
エンベディングの取得方法がわかったところで、簡単な例を見てみましょう。
6つの文書からなる小さなコーパスから検索を行うとします:
まず、Voyageを使用してそれぞれをエンベディングベクトルに変換します:
エンベディングにより、ベクトル空間での意味的検索/検索が可能になります。例えばこのようなクエリがあるとします:
これをエンベディングに変換し、エンベディング空間での距離に基づいて最も関連性の高い文書を見つけるために最近傍検索を行います。
文書とクエリのエンベディングには、それぞれinput_type="document"
とinput_type="query"
を使用していることに注意してください。詳細な仕様はこちらで確認できます。
出力は5番目の文書となり、これが実際にクエリに最も関連性の高いものです:
ベクターデータベースを含むエンベディングを使用したRAGの詳細なクックブックをお探しの場合は、RAGクックブックをご覧ください。
FAQ
なぜVoyageエンベディングは優れた品質を持つのですか?
なぜVoyageエンベディングは優れた品質を持つのですか?
エンベディングモデルは、生成モデルと同様に、意味的コンテキストをキャプチャーして圧縮するために強力なニューラルネットワークに依存しています。Voyageのチームは経験豊富なAI研究者で構成されており、エンベディングプロセスのあらゆる要素を最適化しています:
- モデルアーキテクチャ
- データ収集
- 損失関数
- オプティマイザーの選択
Voyageの技術的アプローチについては、ブログで詳しく説明されています。
どのエンベディングモデルが利用可能で、どれを使用すべきですか?
どのエンベディングモデルが利用可能で、どれを使用すべきですか?
汎用エンベディングには以下を推奨します:
voyage-3-large
:最高品質voyage-3-lite
:最低レイテンシーとコストvoyage-3
:競争力のある価格で優れた検索品質を実現するバランスの取れたパフォーマンス
検索タスクでは、input_type
パラメータを使用してクエリまたはドキュメントタイプを指定します。
ドメイン固有のモデル:
- 法律タスク:
voyage-law-2
- コードとプログラミングドキュメント:
voyage-code-3
- 金融関連タスク:
voyage-finance-2
どの類似度関数を使用すべきですか?
どの類似度関数を使用すべきですか?
Voyageエンベディングは以下をサポートしています:
- 内積類似度
- コサイン類似度
- ユークリッド距離
Voyage AIのエンベディングは長さ1に正規化されているため:
- コサイン類似度は内積類似度と等しくなります(内積計算の方が高速です)
- コサイン類似度とユークリッド距離は同じランキングを生成します
エンベディングの類似度についての詳細はPineconeのガイドをご覧ください。
input_typeパラメータはどのように使用すべきですか?
input_typeパラメータはどのように使用すべきですか?
RAGを含む検索タスクでは、常にinput_type
を”query”または”document”として指定してください。この最適化により、特殊なプロンプトプレフィックスを通じて検索品質が向上します:
クエリの場合:
ドキュメントの場合:
検索タスクでは、input_type
を省略したりNone
に設定したりしないでください。
voyage-large-2-instruct
を使用した分類、クラスタリング、その他のMTEBタスクについては、GitHubリポジトリの指示に従ってください。
どの量子化オプションが利用可能ですか?
どの量子化オプションが利用可能ですか?
量子化は、高精度の値を低精度のフォーマットに変換することで、ストレージ、メモリ、コストを削減します。利用可能な出力データ型(output_dtype
):
型 | 説明 | サイズ削減 |
---|---|---|
float | 32ビット単精度浮動小数点(デフォルト) | なし |
int8 /uint8 | 8ビット整数(-128~127 / 0~255) | 4倍 |
binary /ubinary | ビットパックされた1ビット値 | 32倍 |
バイナリ型は8ビット整数を使用してパックされたビットを表現し、binary
はオフセットバイナリ方式を使用します。
例: バイナリ量子化は8つのエンベディング値を1つの8ビット整数に変換します:
マトリョーシカエンベディングをどのように切り詰めることができますか?
マトリョーシカエンベディングをどのように切り詰めることができますか?
マトリョーシカエンベディングには粗から細かいまでの表現が含まれており、先頭の次元を保持することで切り詰めることができます。1024次元のベクトルを256次元に切り詰める方法は以下の通りです:
価格
最新の価格詳細については、Voyageの価格ページをご覧ください。