Sentence Transformers を用いたスパース埋め込みモデルのトレーニングとファインチューニング
Hugging Face は、Sentence Transformers ライブラリを使用してスパース埋め込みモデルのトレーニングとファインチューニングを行う詳細な技術ガイドをリリースしました。これらのモデルは、BM25 などの従来のレキシカル手法と密な埋め込みモデルの間の中間地点を提供し、解釈可能な高次元スパース表現を提供することで、ハイブリッド検索シナリオにおいて不可欠です。
スパース埋め込みモデルの理解
スパース埋め込みモデルは、テキストを高次元ベクトル(例えば 30,000+ 次元)に変換し、その中でほとんどの値がゼロになります。一方、密なモデルはほとんどの値が非ゼロである低次元ベクトルを使用しますが、スパースモデルはアクティブな次元をモデルの語彙内の特定のトークンにマッピングします。
主要な機能
- クエリとドキュメントの拡張: ニューラル スパース モデルは、意味的に関連する用語(例えば "weather" を "sunny" または "beautiful" に拡張するなど)でテキストを自動的に拡張し、語彙の不一致問題を克服できるようにします。
- 解釈可能性: 各次元がトークンに対応しているため、ユーザーは埋め込みをデコードして、類似度スコアに寄与する正確な単語を確認できます。
- ハイブリッド検索の可能性: スパース モデルは、密なモデルと組み合わせることで、正確なレキシカル マッチと意味的意味の両方を捉えることが非常に効果的です。
スパース エンコーダーのアーキテクチャ オプション
具体的なユースケースに応じて、開発者は Sentence Transformers フレームワーク内のいくつかの異なるアーキテクチャから選択できます:
SPLADE
SPLADE モデルは、Masked Language Modeling (MLM) トランスフォーマーに続いて SpladePooling モジュールを使用します。このアーキテクチャは、SparseEncoder クラスに fill-mask モデルを提供する際のデフォルトです。
推論不要の SPLADE
このアーキテクチャは、Router モジュールを使用してクエリとドキュメントを異なる方法で処理します。クエリには軽量な SparseStaticEmbedding を使用してほぼ瞬時の推論を確保し、ドキュメントはフル MLM トランスフォーマーと SpladePooling を使用して処理されます。これは、クエリのレイテンシーが重要なアプリケーションに適しています。
対比的スパース表現 (CSR)
CSR モデルは、密な Sentence Transformer モデルの上に SparseAutoEncoder モジュールを適用します。SPLADE と異なり、CSR 埋め込みはベースモデルの語彙と同じサイズではないため、トークンをデコードして直接解釈することはできませんが、高次元の密なエンコーダーに対して非常に効果的です。
ファインチューニング ワークフロー
ファインチューニングにより、スパース モデルはドメイン固有の用語(例えば、「cephalalgia」が「headache」の同義語であることを認識するなど)を学ぶことができます。トレーニング プロセスはいくつかのコア コンポーネントを含みます:
トレーニング コンポーネント
- モデル: 事前にトレーニングされた Sparse Encoder またはベースモデル(BERT や RoBERTa など)。
- データセット: Hugging Face Hub またはローカルファイル(CSV、JSON、Parquet など)から
datasetsライブラリを介してロードされるデータ。 - 損失関数:
SpladeLossまたはCSRLossなどの、メインの損失関数にスパース性の正則化を加える関数。 - 評価器: NDCG、MRR、MAP などのメトリクスを使用してパフォーマンスを評価するツール。利用可能な評価器には
SparseNanoBEIREvaluatorとSparseTripletEvaluatorが含まれます。 - トレーナー: すべてのコンポーネントを統合してトレーニング ループを実行する
SparseEncoderTrainerクラス。
トレーニングのヒントとベスト プラクティス
- 蒸留: より強力なスパース モデルは、テキスト ペアから直接トレーニングするのではなく、より強力な教師モデル(例えば Cross-Encoder)からの蒸留を使用してトレーニングされることがよくあります。
- スパース性の監視: モデルは、検索精度だけでなく、埋め込みのスパース性も評価する必要があります。スパース性が低いと、ストレージ コストと検索レイテンシーが増加します。
- マルチデータセット トレーニング:
SparseEncoderTrainerは、MultiDatasetBatchSamplers(例えばROUND_ROBINまたはPROPORTIONAL)を使用して、複数のデータセット上で同時にトレーニングをサポートします。
評価とデプロイ
ハイブリッド パイプラインでのパフォーマンス
実証結果によると、Reciprocal Rank Fusion などの方法を使用してスパースと密のランキングを組み合わせると、いずれか一方の方法だけを使用する場合よりも大幅にパフォーマンスが向上します。例えば、NanoMSMARCO データセットでは、ハイブリッド アプローチにより、密のみのベースラインと比較して NDCG@10 が大幅に向上することがあります。
ベクトル データベースの統合
本番環境でのデプロイにおいて、スパース埋め込みは Qdrant、OpenSearch、Elasticsearch、Seismic などのベクトル データベースにインデックスを付けることができます。たとえば、Qdrant はスパース ベクトルのネイティブ サポートを提供し、スケールでの効率的な意味検索を可能にします。