編集

次の方法で共有


RAG チャンク エンリッチメント フェーズ

Azure AI サービス
Azure AI Search
Azure OpenAI Service
Azure Machine Learning

ドキュメントをチャンクのコレクションに分割した後、次の手順では、各チャンクをクリーンアップしてメタデータで拡張することで、各チャンクを強化します。 チャンクをクリーニングすると、ベクター検索のセマンティック クエリに対してより適切な一致を実現できます。 メタデータを追加すると、セマンティック検索以外のチャンクの検索をサポートできます。 クリーニングと拡張の両方に、チャンクのスキーマを拡張する必要があります。

この記事では、チャンクに対して実行してベクター比較を改善できる一般的なクリーニング操作など、チャンクを拡張するさまざまな方法について説明します。 また、チャンクに追加して検索インデックスを拡張できる一般的なメタデータ フィールドについても説明します。

この記事はシリーズの一部です。 の概要を次に示します。

次のコード サンプルは、データでエンリッチされたチャンクを示しています。

JSON レコードを示す図。1 つのフィールドがエンリッチされています。

データのクリーニング

データをチャンクすると、ワークロードは最も関連性の高いチャンクを見つけることができます。通常は、それらのチャンクをベクター化してベクター データベースに格納します。 最適化されたベクター検索では、クエリに最も近いセマンティック一致を持つデータベース内の行のみが返されます。 データをクリーニングする目的は、テキストのセマンティクスに重要ではない潜在的な違いを排除することで、近接一致をサポートすることです。 一般的なクリーニング手順を次に示します。

手記

元のクリーンアップされていないチャンクをクエリ結果として返す必要があるため、クリーンアップされたベクター化されたデータを格納するフィールドを追加する必要があります。

  • 下位戦略を実装する。 小文字を使用すると、文の先頭にある単語など、大文字の単語を文内の対応する単語と一致させることができます。 埋め込みでは通常、大文字と小文字が区別されるため、"Cheetah" と "cheetah" は同じ論理単語に対して異なるベクトルになります。 たとえば、埋め込みクエリの "何が高速か、チーターかプーマか" の埋め込み "cheetahs are faster than pumas" は "Cheetahs are faster than pumas" よりも近い一致です。一部の小文字戦略では、固有名詞を含むすべての単語を小文字にし、他の戦略では文の最初の単語のみを小文字にします。

  • ストップ ワードを削除します。 ストップ ワードは、"a"、"an"、"the" などの単語です。ストップ ワードを削除して、結果のベクターの次元を減らすことができます。 前の例で停止語を削除した場合、"チーターはプーマよりも高速です" と "チーターはプーマよりも高速です" は"チーターの方がプーマが速い" とベクトル的に等しくなります。ただし、一部のストップ ワードにはセマンティックな意味があることを理解することが重要です。 たとえば、"not" はストップ ワードと見なされる可能性がありますが、意味的意味は重要です。 ストップ ワードを削除した場合の影響を判断するには、テストする必要があります。

  • スペル ミスを修正します。 スペルミスの単語が埋め込みモデルの正しいスペルの単語と一致しません。 たとえば、"cheatah" は埋め込みの "チーター" と同じではありません。 この問題に対処するには、スペル ミスを修正する必要があります。

  • Unicode 文字を削除します。 Unicode 文字を削除すると、チャンク内のノイズを減らし、次元を減らすことができます。 ストップ ワードと同様に、一部の Unicode 文字には関連情報が含まれている場合があります。 Unicode 文字を削除した場合の影響を理解するために、テストを実施することが重要です。

  • テキストを正規化します。 省略形の展開、数値から単語への変換、縮小の展開などの標準に従ってテキストを正規化すると、"I'm" を "I am" に展開すると、ベクター検索のパフォーマンスが向上します。

チャンクの拡張

ベクター化されたチャンクに対するセマンティック検索は、一部の種類のクエリでは適切に機能しますが、他の種類のクエリには適していません。 サポートする必要があるクエリの種類によっては、追加情報を使用してチャンクを拡張することが必要になる場合があります。 追加のメタデータ フィールドはすべて埋め込みと同じ行に格納され、フィルターまたは検索の一部として検索ソリューションで使用できます。

次の図は、完全にエンリッチされたコンテンツの JSON と、検索プラットフォームでメタデータがどのように使用されるかを示しています。

完全に強化されたコンテンツの JSON と、検索プラットフォームでメタデータがどのように使用されるかを示す図。

追加する必要があるメタデータ列は、使用しているデータの種類やサポートするクエリの種類など、問題のドメインによって異なります。 達成しようとしているユーザー エクスペリエンス、使用可能なデータ、結果の品質を分析する必要があります。 そこから、ワークロードの要件に対処するのに役立つ可能性のあるメタデータを決定できます。

次に、一般的なメタデータ フィールドと、元のチャンク テキスト、潜在的な用途に関するいくつかのガイダンス、メタデータ コンテンツの生成に一般的に使用されるツールまたは手法を示します。

  • 身分証明書。 ID はチャンクを一意に識別します。 一意の ID は、チャンクがストアに既に存在するかどうかを判断するために、処理中に役立ちます。 ID には、キー フィールドのハッシュを指定できます。 ツール: ハッシュ ライブラリ。

  • タイトル。 タイトルは、チャンクの便利な戻り値です。 チャンク内のコンテンツの概要を簡単に示します。 また、一致するキーワードを含めることができるため、インデックス付き検索でクエリを実行する場合にも役立ちます。 ツール: 言語モデル。

  • 概要。 概要は、共通の戻り値であり、インデックス付き検索で使用できるという点で、タイトルに似ています。 概要は通常、タイトルよりも長くなります。 ツール: 言語モデル。

  • チャンクの言い換え。 チャンクの言い換えは、シノニムや言い換えなどの言語のバリエーションをキャプチャするため、ベクター検索フィールドとして役立ちます。 ツール: 言語モデル。

  • キーワード。 キーワード検索は、非コンテキストのデータ、完全一致の検索、および特定の用語または値が重要な場合に役立ちます。 たとえば、自動車メーカーは、モデルごとに複数の年のレビューまたはパフォーマンス データを持っている可能性があります。 "Review for product X for year 2009" は、意味的には"Review for product X for 2010"、"Review for product Y for 2009" (2010 年の製品 X のレビュー) や "Review for product Y for 2009" のような意味です。この場合、製品と年のキーワードに一致する方が効果的です。 ツール: 言語モデル、RAKE、KeyBERT、multi-rake。

  • エンティティ。 エンティティは、人、組織、場所などの特定の情報です。 キーワードと同様に、エンティティは完全一致検索や特定のエンティティが重要な場合に適しています。 Tools: spaCy、Ford Named Entity Recognizer (Stanford NER)、scikit-learn、Natural Language Toolkit (NLTK)。

  • クリーンアップされたチャンク テキスト。 クリーンアップされたチャンクのテキスト。 ツール: 言語モデル。

  • チャンクが回答できる質問。 埋め込まれたクエリが、埋め込まれたチャンクと密接に一致しない場合があります。 たとえば、クエリはチャンク サイズに対して小さい場合があります。 チャンクが応答できるクエリを作成し、ユーザーの実際のクエリと事前に作成されたクエリの間でベクター検索を実行することをお勧めします。 ツール: 言語モデル。

  • 源。 チャンクのソースは、クエリのリターンとして価値があります。 ソースを返す場合、クエリアは元のソースを引用できます。

  • 言語。 チャンクの言語は、クエリのフィルターとして役立ちます。

拡張のコスト

チャンクを拡張するために一部の言語モデルを使用すると、コストがかかる場合があります。 検討している各エンリッチメントのコストを計算し、時間の経過に伴うチャンクの推定数を乗算する必要があります。 この情報は、エンリッチされたフィールドのテストと共に使用して、最適なビジネス上の決定を決定する必要があります。

次の手順

埋め込み を生成する

  • Azure AI Search での AI エンリッチメントの
  • Azure AI Search でのスキルセットの概念の