ホームページ  >  記事  >  テクノロジー周辺機器  >  LLM アプリケーションを構築する: Azure Cognitive Services のベクトル検索機能を活用する

LLM アプリケーションを構築する: Azure Cognitive Services のベクトル検索機能を活用する

王林
王林転載
2023-08-23 22:49:06761ブラウズ

著者 | Simon Bisson

キュレーター | Ethan

Microsoft のコグニティブ検索 API は、Azure OpenAI などの大規模な言語モデルで使用するサービスとしてベクトル検索を提供するようになりました。

Semantic Core、TypeChat、LangChain などのツールを使用すると、Azure OpenAI などの生成 AI テクノロジを中心にアプリケーションを構築できます。これは、基礎となる大規模言語モデル (LLM) に制約を課すことができ、自然言語インターフェイスを構築および実行するためのツールとして使用できるためです。

本質的に、LLM はセマンティクスをナビゲートするためのツールです。 space では、ディープ ニューラル ネットワークが最初のキューから始まるトークンのチェーン内の次の音節を予測できます。プロンプトが無制限の場合、LLM は入力範囲を超えて、合理的であるように見えても実際には完全にナンセンスなものを生成する可能性があります。

私たちは検索エンジンの出力を信頼する傾向があるのと同じように、LLM の出力も馴染みのあるテクノロジーの別の側面と見なしているため、LLM の出力も信頼する傾向があります。しかし、Wikipedia、Stack Overflow、Reddit などのサイトからの信頼できるデータを使用して大規模な言語モデルをトレーニングしても、コンテンツの理解を伝えることはできません。単に、それらのソース内のテキストと同じパターンに従うテキストを生成する機能を提供するだけです。出力が正しい場合もあれば、間違っている場合もあります。

大規模な言語モデルからのエラーや無意味な出力を回避し、ユーザーがクエリに対して正確かつ合理的な回答を確実に得るにはどうすればよいでしょうか?

1. セマンティック メモリ制約を使用して大規模なモデルを制限する

私たちが行う必要があるのは、LLM が小規模なデータ セットからのみテキストを生成するように制限することです。ここで、Microsoft の新しい LLM ベースの開発スタックが登場します。モデルを制御し、エラーの生成を防ぐために必要なツールを提供します。

TypeChat などのツールを使用して特定の出力形式を強制したり、セマンティック カーネルなどのオーケストレーション パイプラインを使用して他の考えられる情報ソースを処理したりできます。これにより、モデルを既知の意味空間に効果的に「ルート化」し、LLM を制約します。ここで、LLM は、構築されたプロンプトを要約し、そのプロンプトに基づいてオーバーシュートすることなく (または少なくともオーバーシュートの可能性を大幅に低減して) テキストを生成するという、得意なことを実行できます。

Microsoft が「セマンティック メモリ」と呼ぶものは、最後の方法の基礎です。セマンティック メモリはベクトル検索を使用して、LLM の事実の出力を提供するために使用できるヒントを提供します。ベクトル データベースは最初のプロンプトのコンテキストを管理し、ベクトル検索は最初のユーザー クエリに一致する格納データを検索し、LLM はそのデータに基づいてテキストを生成します。このアプローチの実際の動作を Bing Chat でご覧ください。Bing チャットでは、Bing のネイティブ ベクトル検索ツールを使用して、検索データベースから得られる回答を構築します。

セマンティック メモリにより、LLM アプリケーション手段に基づいてベクトル データベースとベクトル検索を提供できるようになります。増え続けるオープン ソース ベクトル データベースの 1 つを使用することも、使い慣れた SQL データベースや NoSQL データベースにベクトル インデックスを追加することもできます。特に便利そうな 1 つの新製品は、Azure Cognitive Search を拡張し、データにベクトル インデックスを追加し、そのインデックスをクエリするための新しい API を提供します

2. Azure Cognitive Search へのベクトル インデックスの追加

Azure Cognitive Search は、Microsoft 独自の検索ツールに基づいて構築されています。これは、使い慣れた Lucene クエリと独自の自然言語クエリ ツールの組み合わせを提供します。 Azure Cognitive Search は、Cognitive Services API を使用してプライベート データをホストし、コンテンツにアクセスできるサービスとしてのソフトウェア プラットフォームです。最近、Microsoft はベクトル インデックスの構築と使用のサポートも追加しました。これにより、類似性検索を使用してデータ内の関連する結果をランク付けし、AI ベースのアプリケーションで使用できるようになります。これにより、Azure Cognitive Search は、セマンティック カーネルと Azure OpenAI で構築された Azure でホストされる LLM アプリケーションに最適となり、C# および Python 用の Cognitive Search 用のセマンティック カーネル プラグインも、他の Azure Like サービスで利用できます。他の Azure サービスと連携して動作するマネージド サービス。これにより、テキスト、画像、オーディオ、ビデオをホストするさまざまな Azure ストレージ サービスのインデックス作成と検索が可能になります。データは複数のリージョンに保存されるため、高可用性が実現し、待ち時間と応答時間が短縮されます。さらに、エンタープライズ アプリケーションの場合、Microsoft Entra ID (Azure Active Directory の新しい名前) を使用してプライベート データへのアクセスを制御できます

3. コンテンツの埋め込みベクトルを生成して保存します

必須メモAzure Cognitive Search は「独自の埋め込みベクトルを使用する」サービスであるということです。 Cognitive Search では必要なベクトル埋め込みが生成されないため、Azure OpenAI または OpenAI 埋め込み API を使用してコンテンツの埋め込みを作成する必要があります。サービスのトークン制限内に確実に収まるように、大きなファイルをチャンク化する必要がある場合があります。必要に応じて、ベクトル データにインデックスを付けるための新しいテーブルを作成する準備をしてください。

Azure Cognitive Search では、ベクトル検索は最近傍モデルを使用して、元のクエリに類似するユーザーが選択した数のドキュメントを返します。このプロセスでは、元のクエリのベクトル埋め込みを使用してベクトル インデックス作成を呼び出し、LLM プロンプトで使用できるようにデータベースから同様のベクトルとインデックスのコンテンツを返します。

Microsoft は、このベクター ストアを Azure Machine Learning の取得拡張生成 (RAG) 設計パターンの一部として、またそのプロンプト フロー ツールと組み合わせて使用​​しています。 RAG はコグニティブ検索でベクトル インデックスを利用して、LLM プロンプトの基礎を形成するコンテキストを構築します。これにより、クエリによって返される類似ドキュメントの数を設定するなど、ベクトル インデックスをローコードで構築および使用する方法が提供されます

4、Azure Cognitive Search でのベクトル検索の開始

使用法 Azure Cognitive Search を使用すると、ベクトル クエリが非常に簡単になります。まず、同じリージョンに Azure OpenAI と Cognitive Search のリソースを作成します。これにより、最小限の遅延で埋め込みを含む検索インデックスをロードできるようになります。インデックスを読み込むには、Azure OpenAI API と Cognitive Search API を呼び出す必要があるため、再試行を管理するコードを追加して、サービス内で考えられるレート制限にコードが応答できることを確認することをお勧めします。サービス API を使用する場合は、非同期呼び出しを使用して埋め込みを生成し、インデックスをロードする必要があります。

ベクトルはベクトル フィールドとして検索インデックスに格納されます。ベクトルは次元を持つ浮動小数点数です。これらのベクトルは、ベクトルを類似ベクトルの近傍に分類する階層型のナビゲーション可能なスモールワールド近傍グラフを通じてマッピングされ、ベクトル インデックスを検索する実際のプロセスを高速化します。

ベクトル検索のインデックス スキーマを定義した後、コグニティブ検索のためにデータをインデックスにロードできます。データは複数のベクトルに関連付けられる場合があることに注意してください。たとえば、コグニティブ検索を使用して会社のドキュメントをホストする場合、主要なドキュメントのメタデータ用語とドキュメントのコンテンツに対して別のベクトルが必要になる可能性があります。データセットは JSON ドキュメントとして保存する必要があるため、結果を使用してプロンプト コンテキストを組み立てるプロセスが簡素化されます。最も一般的な Azure ストレージ オプションの使用をサポートしているため、インデックスにソース ドキュメントを含める必要はありません。

クエリを実行する前に、まずクエリ本文を使用して選択した埋め込みモデルを呼び出す必要があります。これにより、選択したインデックスの検索に使用できる多次元ベクトルが返されます。ベクトル検索 API を呼び出すときは、ターゲット ベクトル インデックス、必要な一致数、およびインデックス内の関連するテキスト フィールドを指定します。適切な類似性尺度を選択すると、クエリに非常に役立ちますが、その中で最も一般的に使用されるのはコサイン メトリクスです

5.単純なテキスト ベクトルを超えて

Azure Cognitive Search のベクトル機能は、テキストの一致だけを超えています。 。 Cognitive Search を多言語埋め込みとともに使用すると、複数言語にわたるドキュメント検索をサポートできます。より複雑な API を使用することもできます。たとえば、ハイブリッド検索で Bing セマンティック検索ツールを組み合わせてより正確な結果を提供できるため、LLM を利用したアプリケーションからの出力の品質が向上します。

Microsoft は、独自の GPT-4 ベースの Bing 検索エンジンとさまざまなコパイロットの構築に使用したツールとテクノロジを急速に製品化しています。セマンティック カーネルや Azure AI Studio のプロンプト フローなどのオーケストレーション エンジンは、大規模な言語モデルを扱う Microsoft のアプローチの中核です。これらの基盤が築かれた今、同社は必要な実現テクノロジーをさらに展開しているのがわかります。ベクトル検索とベクトルインデックス作成は、正確な応答を提供するための鍵となります。 Microsoft は、これらのサービスを提供するための使い慣れたツールを構築することで、コストと学習曲線を最小限に抑えることができます

以上がLLM アプリケーションを構築する: Azure Cognitive Services のベクトル検索機能を活用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。