同じドキュメントライブラリを再インデックスした後に埋め込みのドリフトが発生する原因は何ですか?

エヴァ・ウォンテクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

埋め込みドリフトは、再インデックス時に、ライブラリを表現するために使用するモデル、テキスト、エンコーダー設定、数値処理経路、または比較ルールが変わると発生します。

家庭用ナレッジベースには、再構築の前後で同じPDF、メモ、マニュアル、家族の記録が含まれていても、異なる最近傍や類似度スコアが返されることがあります。変化の中には、同一の入力から生成されたベクトル自体が移動する真の埋め込みドリフトもあります。一方で、エンコーダーに送られたテキストが変わる取り込みドリフトや、同一のベクトルを異なるメトリクスやインデックス設定で検索する検索ドリフトもあります。したがって、最初の診断では、元データのバイト列、抽出テキスト、チャンクの同一性、未加工ベクトル、ランキング結果を、それぞれ別のアーティファクトとして比較する必要があります。

実際のベクトルドリフトと見かけ上の検索ドリフトは異なる

実際のドリフトとは、同じ正規化済みテキストから異なるベクトルが生成されることです。見かけ上のドリフトとは、ベクトルは安定しているものの、チャンクの構成、類似度メトリクス、フィルタリング、量子化、または近似最近傍検索が変わることで、ランキング結果が変化することです。

Qdrantのコレクションでは、ベクトルサイズと距離メトリクスがコレクションレベルのパラメータとして定義されます。別のメトリクスを使用するコレクションに再構築すると、埋め込み値そのものを変えずにスコアや順序が変わる可能性があります。

検索結果の上位項目だけを比較すると、これらの原因が混同されます。固定したテスト文字列から得た未加工ベクトルのチェックサムを比較すれば、エンコーダーのドリフトとインデックスまたはランキングのドリフトを切り分けられます。

固定されていないモデルのリビジョンによってエンコーダーが置き換わる可能性がある

モデル名が、重みと設定ファイルの恒久的なセットを常に指すとは限りません。リポジトリの所有者が、公開リポジトリ名を維持したまま、重み、トークナイザーファイル、プーリング設定、またはモデルコードを更新することがあります。

Hugging Faceのリポジトリはバージョン管理されており、最新のブランチ状態ではなく、特定のリビジョンを指定してダウンロードできます。

この原因では、固定したプローブセット全体にわたって広範な変化が生じ、モデルのコミット、キャッシュパス、設定ハッシュ、またはトークナイザーアセットが変わっていることがよくあります。これは、抽出またはチャンク分割が変わったファイルだけに影響する、文書固有のドリフトとは異なります。

エンコーダーのオプションによってベクトルの長さ、スケール、幾何学的構造が変わる

同じ重みでも、プーリング、正規化、精度、プロンプトの接頭辞、最大シーケンス長、出力次元数が変わると、異なる表現が出力されることがあります。

Sentence Transformersでは、精度、正規化、プロンプト、切り詰める次元数などのエンコーダー制御を利用できます。

正規化を変更すると、方向を維持したままベクトルの大きさだけが変わることがあります。プロンプトの接頭辞によって、すべての文書が別のタスク条件付き空間へ移動することもあります。切り詰めを行うと、次元が失われます。これらは設定の変更であり、ランダムな不安定性ではありません。

エンコーダーに届くテキストが同じとは限らない

元のファイルがバイト単位で完全に同一でも、再インデックス時に別のパーサーバージョン、OCR経路、空白正規化、ページ順ルール、またはチャンク分割方式が呼び出されることがあります。

Unstructuredはパーティショニング後にチャンク分割を行い、チャンクサイズ、重複、セクション境界によって各チャンクに入るテキストがどのように決まるかを説明しています。

見出しが新たに検出されたり、1ページ分のOCR結果が変わったりすると、その後のすべてのチャンク境界がずれる可能性があります。この場合、同一入力の表現がドリフトしたのではなく、異なるテキスト範囲を表すベクトルが生成されています。

非決定的な実行によって小さな数値差が生じることがある

並列カーネル、ハードウェアライブラリ、演算順序、ランダム要素により、同じモデルと入力でも、推論結果にわずかな差が生じることがあります。

PyTorchは、リリース、プラットフォーム、デバイスをまたいだ完全な再現性は保証されないと説明しており、対応する演算向けに決定論的アルゴリズムの制御機能を提供しています。

この原因では通常、意味空間全体が完全に再編成されるのではなく、座標に小さな差が生じます。古いプローブベクトルと新しいプローブベクトルのコサイン類似度が極めて高いままなら、その変化は、ランキングが同率に近い場合にのみ表面化する数値ノイズである可能性があります。

精度と量子化によって境界上の最近傍が変わることがある

再構築時に、メモリ使用量を削減しスループットを向上させるため、float32からfloat16、int8、または別の最適化ランタイムプロファイルへ切り替わることがあります。

ONNX Runtimeは、float16変換によって許容差テストが必要な精度差が生じる可能性を説明しています。

意味的な影響は小さいことが多いものの、ローカルライブラリには非常によく似たチャンクが多数含まれている場合があります。座標のわずかな変化によって、元のスコアがほぼ同じ最近傍同士の順序が入れ替わることがあります。

再インデックスによって古い世代と新しい世代のベクトルが混在することがある

部分的に再構築されたコレクションには、異なるモデルコミット、チャンク設定、次元数、または正規化ルールで生成されたベクトルが混在する可能性があります。

世代が混在すると不規則な挙動が生じます。変更されていない文書は安定したまま、再処理されたファイルだけが移動することがあり、クエリベクトルが保存済みコレクションの一部と互換性を持たなくなる可能性もあります。

ZimaSpaceのNASセマンティックインデックス作成ガイドは、関連する境界を示しています。元のライブラリ、抽出されたレコード、埋め込み、検索インデックスは別々の層であり、1つの不変オブジェクトとして扱ってはなりません。

よくある質問

同一のテキストからは、常にビット単位で完全に同一の埋め込みが生成されますか?

固定したモデル、同一の設定、決定論的な実行経路、そして一致するハードウェアおよびソフトウェア環境がそろっている場合に限られます。それ以外では、小さな浮動小数点差が生じることがあります。

検索結果が変わらなければ、埋め込みがドリフトしていない証拠になりますか?

いいえ。ランキングの境界を越えない範囲でベクトルが移動することがあります。固定したプローブセットで、未加工ベクトルまたはそのハッシュと類似度を比較してください。

最近傍が変わった場合、必ずモデルドリフトを示しますか?

いいえ。チャンク分割、フィルター、距離メトリクス、量子化、近似インデックスの構築によって、エンコーダーの出力が安定していても検索結果が変わることがあります。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.