チャンク エンリッチメント

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

ドキュメントをチャンクのコレクションに分割したら、次の手順では、メタデータを使用してチャンクのクリーニングと拡張の両方を行い、各チャンクをエンリッチします。 チャンクをクリーニングすると、ベクトル検索のセマンティック クエリの一致率が高まります。 情報を追加すると、チャンクのセマンティック検索以外の検索もサポートできます。 クリーニングと拡張の両方で、チャンクのスキーマを拡張する必要があります。

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

この記事はシリーズの一部です。 概要を参照してください。

1 つのフィールドがエンリッチされた json レコードを示す図。

図 1. メタデータを使用したチャンクのエンリッチメント

消去

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

Note

クリーニング前の元のチャンクをクエリ結果として返す必要があるため、クリーニング済みのベクトル化されたデータを格納するフィールドを追加します。

  • 小文字 - 小文字を使用すると、大文字の単語 (文の先頭にある単語など) を文中の同じ単語と一致させることができます。 埋め込みの場合、通常は大文字と小文字が区別されるため、"Cheetah" と "cheetah" は同じ論理単語に対して異なるベクトルが生じます。 "what is faster, a cheetah or a puma?" という埋め込みクエリを例に説明します。"cheetahs are faster than pumas" という埋め込みは、"Cheetahs are faster than pumas" という埋め込みよりも近似性の高い一致になります。小文字戦略には、固有名詞を含むすべての単語を小文字にするものもあれば、文の最初の単語だけを小文字にするものもあります。
  • ストップ ワードを削除する - ストップ ワードは、文の中で一般的に発生する "a"、"an"、"the" などの単語です。 ストップ ワードを削除すると、結果のベクトルの次元を減らすことができます。 ストップ ワードを削除すると、"a cheetah is faster than a puma" と "the cheetah is faster than the puma" の両方が "cheetah faster puma" とベクトル的に等しくなります。ただし、一部のストップ ワードにはセマンティックな意味があるということを理解することが重要です。 たとえば、"not" はストップ ワードと見なされる可能性がありますが、セマンティックな意味の点で重要性を保持しています。 テストを実施して、ストップ ワードを削除した場合の影響を確認することが重要です。
  • スペル ミスを修正する - 綴りが間違っている単語は、埋め込みモデルの正しい綴りの単語とは一致しません。 たとえば "cheatah" (sic) は、埋め込みでは "cheetah" と同じではありません。 この課題に対処するには、スペル ミスを修正する必要があります。
  • Unicode 文字を削除する - Unicode 文字を削除すると、チャンク内のノイズを減らし、次元を減らすことができます。 ストップ ワードと同様に、一部の Unicode 文字には関連情報が含まれている場合があります。 テストを実施して、Unicode 文字を削除した場合の影響を理解することが重要です。
  • 正規化 - 略語を展開したり、数値を単語に変換したり、"I'm" のような短縮形を "I am" に展開したりするなど、テキストを標準に正規化すると、ベクトル検索のパフォーマンスを向上させることができます。

チャンクの拡張

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

完全にエンリッチされたコンテンツの json と、検索プラットフォームでのその使用方法を示す図。

図 2. 検索ソリューションでの拡張メタデータの使用

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

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

  • ID - ID は、チャンクを一意に識別するために使用されるキー メタデータ フィールドです。 一意の ID は、チャンクがストアに既に存在しているかどうかを判断する処理で役立ちます。 ID には、キー フィールドのハッシュを指定できます。 ツール: ハッシュ ライブラリ
  • タイトル - タイトルはチャンクの有用な戻り値です。 チャンク内のコンテンツについての簡単な概要を確認できます。 一致を確認するためのキーワードを含めることができるため、インデックス付き検索を使用してクエリを実行する場合にも、この概要は役立ちます。 ツール: 大規模言語モデル
  • 概要 - 概要は、共通の戻り値であり、インデックス付き検索で使用できるという点でタイトルに似ています。 概要は通常、タイトルよりも長くなります。 ツール: 大規模言語モデル
  • チャンクの言い換え - チャンクの言い換えは、同意語や言い換えなどの言語のバリエーションをキャプチャするため、ベクトル検索フィールドとして役立ちます。 ツール: 大規模言語モデル
  • キーワード - キーワード検索は、非コンテキストのデータ、完全一致の検索、特定の用語または値が重要な場合に適しています。 たとえば、自動車メーカーは、各モデルのレビューまたはパフォーマンス データを複数年分、保持している可能性があります。 2009 年の製品 X のレビュー"は、セマンティック的には "2010 年の製品 X のレビュー"、"2009 年の製品 Y のレビュー" と似ています。この場合は、製品と年のキーワードの一致させたほうがよいでしょう。 ツール: 大規模言語モデル、RAKE、KeyBERT、MultiRake
  • エンティティ - エンティティは、人、組織、場所など特定の情報です。 キーワードと同様に、エンティティは完全一致検索や特定のエンティティが重要な場合に適しています。 ツール: SpaCy、標準固有表現認識エンジン (SNER、Scikit-learn、自然言語ツールキット (NLTK)。
  • クリーニング済みチャンク テキスト - クリーニング済みのチャンク テキスト。 ツール: 大規模言語モデル
  • チャンクが回答できる質問 - 埋め込まれているクエリと、埋め込まれたチャンクが一致しない場合もあります。 たとえば、チャンク サイズに関してクエリが小さい場合があります。 チャンクが回答できるクエリを作成し、ユーザーの実際のクエリと事前設定されたクエリの間でベクトル検索を実行するほうが適切な場合があります。 ツール: 大規模言語モデル
  • ソース - チャンクのソースは、クエリの戻り値として有益な場合があります。 クエリを実行する側が、元のソースを引用できるようになります。
  • 言語 - チャンクの言語は、クエリのフィルターに適している場合があります。

経済性の向上

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

次のステップ