ホームへ戻る

GitHub Repo

LangChainコミュニティがチャンク位置の不具合を報告、重複する短文でRAGの引用位置がずれる可能性

10月10日のLangChainコミュニティの報告によると、ソース位置メタデータを有効にすると、重複する短文の位置が直前の箇所として記録される場合があり、例外は発生しません。正式リリースのパッケージと開発ブランチで再現していますが、修正はまだ議論段階です。

Dirck van Baburen · Public domain · Image source
zh-Hant

LangChainコミュニティは10月10日、ドキュメントのチャンク位置に関する不具合を報告しました。RecursiveCharacterTextSplitterでadd_start_index=Trueを有効にし、原文に同じ短文が繰り返し含まれていると、後のチャンクに前の出現箇所の文字位置が付与されることがあります。報告者によると、この問題はlangchain-text-splitters 1.1.3と当時のmasterで再現しました。確認時点でissueは未解決のままで、修正ブランチやPRへのリンクはありません。コミュニティの報告

公式APIでは、add_start_indexはチャンクの開始位置をメタデータに追加するオプションとして定義されており、デフォルトでは無効です。chunk_overlapは隣接するチャンク間で重複させる文字数を制御します。こうした位置情報により、アプリケーションは検索された断片を原文に対応付けられます。そのため、ドキュメント処理パイプラインでは断片の内容だけでなく、位置も検証対象となります。公式APIドキュメント

最小再現例では、チャンク上限を30、オーバーラップを20に設定し、同じ短文を原文中に連続して2回含めます。想定される3つの開始位置は0、22、44ですが、実際には0、0、44となり、処理中に例外は発生しません。報告では、原因はチャンク作成後の文字列検索にあるとしています。プログラムは「直前のチャンクの開始位置+直前のチャンクの長さ-オーバーラップ量」で検索開始位置を推定し、その後str.findで位置を探します。短い断片では検索範囲が前の内容まで戻り、以前の出現箇所が再び見つかることがあります。再現例と原因分析

RAGエンジニアリングでは、引用箇所のハイライト、原文へのジャンプ、近接する段落の取得が誤った領域を指す可能性があります。これは位置フィールドの用途から推測されるリスクであり、報告ではモデルの回答品質への影響は測定されていません。断片のテキスト自体が同一であるため、内容だけを照合しても位置のずれを検出できない場合があります。

報告者は、後から位置を検索するのではなく、分割と結合の過程でオフセットを保持する方法を提案しました。また、開始位置を必ず単調増加させる方法は安全ではないとも指摘しています。異なるチャンクが同じ位置から始まることは正当なケースでも起こり得るためです。チームではまず、短文の重複、空白の正規化、オーバーラップ境界を含むケースを追加し、各チャンクの原文中の実際の位置を照合できます。今後は上流の回帰テストとリリース版を追跡したうえで、既存インデックスの再構築が必要か評価してください。現時点では、メンテナーによる確認と影響範囲の全容把握が残っています。修正に関する議論

出典

  1. LangChain issue #41190:重複短切塊的 start_index 定位錯誤
  2. TextSplitter 官方 API 參考文件