次の方法で共有


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

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

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

この記事では、ベクターベースの検索拡張生成 (RAG) ソリューションのみに焦点を当てています。 グラフベース、エージェント型、タグ拡張生成 (TAG)、およびその他の RAG ソリューションに関連する戦略は、スコープ内にありません。

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

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

JSON レコードを示す図。

データをクリーンアップする

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

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

次の一般的なクリーニング手順を検討してください。

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

  • 迅速なインジェクション攻撃から保護します。 コンテンツ リポジトリがインデックス作成のために処理されていることを攻撃者が認識している場合、攻撃者は、言語モデルとエージェントが評価する手順を含むコンテンツをリポジトリに追加しようとする可能性があります。 処理タスク中に、コンテンツのデータを命令のソースとして使用しないでください。

    埋め込み命令を含むメディアのフラグ設定や除外などの手法を使用して、セキュリティを強化します。 入力を分類してサニタイズするには、制約付きデコードで言語モデルを使用することを検討してください。

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

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

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

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

  • ローカライズを正規化します。 ドキュメント レベルでローカライズし、各言語を個別に再処理することをお勧めします。 未検証の翻訳は保存しないでください。 埋め込みモデルで多言語入力がサポートされていることを確認します。

チャンクを増強してください

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

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

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

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

次の一覧では、一般的なメタデータ フィールド、元のチャンク テキスト、潜在的な用途、およびメタデータ コンテンツを生成するツールまたは手法について説明します。

  • ID。 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。

  • タグ。 タグには、多目的インターネット メール拡張機能 (MIME) の種類などのキーワードまたは分類子を指定できます。 タグの使用は、ハイブリッド検索 (ベクター + テキスト) と高度なフィルター処理に役立ちます。 ツール: 言語モデル。

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

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

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

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

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

マルチモーダル エンリッチメントの推奨事項を検討する

ビデオ、画像、またはオーディオ メディアを使用する場合は、次の推奨事項を検討してください。

  • 成果物ごとに説明テキストを生成し、ローカライズされた翻訳を含めます。
  • 各成果物に対して複数の表現を生成します。

拡張のコストを計算する

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

次のステップ

埋め込み を生成する