検索クエリとドキュメントの埋め込みを作成する
Azure AI Search ではベクトル化モデルがホストされないため、課題の 1 つは、クエリの入力と出力用の埋め込みを作成することです。 任意の埋め込みモデルを使用できますが、この記事では Azure OpenAI 埋め込みモデルを前提としています。
組み込みのデータのチャンク分割とベクトル化を提供する垂直統合をお勧めします。 垂直統合は、インデクサー、スキルセット、Azure AI 検索の外部から実行されるモデルを指す組み込みまたはカスタム スキルのいずれかに依存します。
データのチャンク分割とベクトル化を自分で処理する場合は、他のコミュニティ ソリューションと統合する方法を示すデモがサンプル リポジトリに用意されています。
ベクトル クエリでの埋め込みモデルの使用方法
クエリ入力は、ベクトル、またはクエリ処理中にベクトルに変換されるテキストまたは画像のいずれかです。 Azure AI 検索における組み込みソリューションは、ベクターライザーを使用することです。
あるいは、クエリ入力を選択した埋め込みモデルに渡すことで、変換を自分で処理することもできます。 レート制限を回避するために、ワークロードで再試行ロジックを実装できます。 Python のデモには、tenacity を使用しました。
クエリ出力は、検索インデックスで見つかった一致するドキュメントです。 検索インデックスには、埋め込みを含む 1 つ以上のベクトル フィールドがあるドキュメントをあらかじめ読み込んでおく必要があります。 インデックス作成に使用した埋め込みモデルと同じモデルをクエリに使用します。
すべてのリソースを同じリージョンに作成します。
同じリージョンにリソースが必要な場合は、次から始めます。
セマンティック ランク付けを含むハイブリッド クエリをサポートする場合、または AI エンリッチメント パイプラインでカスタム スキルを使用して機械学習モデルの統合を試す場合は、それらの機能を提供する Azure AI 検索リージョンに注意してください。
即興クエリの埋め込みを生成する
次の Python コードは、ベクトル クエリの "values" プロパティに貼り付けることができる埋め込みを生成します。
!pip install openai
import openai
openai.api_type = "azure"
openai.api_key = "YOUR-API-KEY"
openai.api_base = "https://YOUR-OPENAI-RESOURCE.openai.azure.com"
openai.api_version = "2024-02-01"
response = openai.Embedding.create(
input="How do I use Python in VSCode?",
engine="text-embedding-ada-002"
)
embeddings = response['data'][0]['embedding']
print(embeddings)
出力は、1,536 次元のベクトル配列です。
モデル統合を埋め込むためのヒントと推奨事項
- ユース ケースを特定する: ベクトル検索機能の埋め込みモデル統合によって検索ソリューションに価値を付加できる特定のユース ケースを評価します。 これには、テキスト コンテンツと一致するイメージ コンテンツ、多言語検索、類似のドキュメントの検索が含まれます。
- チャンク分割戦略を設計する: 埋め込みモデルでは受け入れ可能なトークンの数に制限があるため、大きなファイルに対してはデータのチャンク分割が必要になります。 詳細については、「ベクトル検索ソリューション用に大きなドキュメントをチャンクに分割する」を参照してください。
- コストとパフォーマンスを最適化する: ベクトル検索はリソースを集中的に使用する可能性があり、上限で制限されるので、セマンティック意味を含むフィールドのみをベクター化することを検討してください。 同じ価格でより多くのベクトルを保存できるように、ベクトル サイズを小さくします。
- 適切な埋め込みモデルを選択する: テキストベースの検索用の単語埋め込みや視覚的な検索用のイメージ埋め込みなど、特定のユース ケースに適したモデルを選択します。 OpenAI の text-embedding-ada-002 や Azure AI Computer Vision のイメージ取得 REST API などの事前トレーニング済みモデル使用することを検討してください。
- ベクトルの長さを正規化する: ベクトルの長さが正規化されていることを確認してから、検索インデックスに格納すると、類似性検索の精度とパフォーマンスが向上します。 ほとんどの事前トレーニング済みモデルは既に正規化されていますが、すべてではありません。
- モデルのを微調整する: 必要に応じて、ドメイン固有のデータで選択したモデルを微調整すると、検索アプリケーションのパフォーマンスと関連性が向上します。
- テストと反復: 期待する検索パフォーマンスとユーザーの満足度が実現されるように、埋め込みモデルの統合を継続的にテストして調整します。