本記事は5部構成シリーズの第2部であり、eコマース検索向けにスパース埋め込みを微調整する方法に焦点を当てています。前回の記事ではスパース埋め込みがBM25よりも優れている理由を説明しましたが、今回は実際のトレーニングパイプラインを構築します。すべてのソースコードはGitHubリポジトリで公開されており、微調整されたモデルはHuggingFaceで試すことができます。
データセット:Amazon ESCI
AmazonのESCIデータセット(ショッピングクエリデータセット)を使用します。これはKDD Cup 2022のためにリリースされたもので、eコマース検索の最も現実的なベンチマークの1つです。120万以上のクエリ-製品ペアに人間が注釈を付けた関連性ラベルが含まれ、Exact(完全一致)、Substitute(代替品)、Complement(補完品)、Irrelevant(無関係)の4段階があります。トレーニングでは、ExactとSubstituteのペアをポジティブサンプルとして使用し、モデルに正確な製品と妥当な代替品の両方を関連性があると学習させます。
製品テキストのフォーマット
製品テキストのフォーマット方法はスパース埋め込みにとって重要です。高密度モデルが広範な意味を捉えるのに対し、SPLADEは語彙に基づいており、テキスト内の特定のトークンがどの語彙次元を活性化するかを決定します。ブランドは角括弧で囲み、セクションはパイプ記号で区切り、文字数制限を設けることで、ブランド名、製品属性、主要機能などの語彙信号を明確に維持します。
Modalアプリの設定
ModalはサーバーレスGPUを提供し、事前のプロビジョニングやアイドルハードウェアが不要で、秒単位の課金が可能です。重要な点は永続ボリュームと分離実行です。永続ボリュームにより、SSH接続が切れたりコンテナが再起動してもチェックポイントが失われません。分離実行を使用すると、長時間のトレーニングジョブをバックグラウンドで実行できます。
SPLADEモデルの作成
Sentence Transformers v5で導入されたSparseEncoderを使用すると、SPLADEのトレーニングが簡単になります。モデルは2つのコンポーネントで構成されます:MLMTransformer(語彙全体のlogitsを出力)とSpladePooling(トークンレベルのlogitsを最大プーリングし、ReLUと対数飽和を適用)。DistilBERTから開始し、事前トレーニング済みのSPLADEチェックポイントからは開始しないことで、ドメイン固有の微調整がどれだけ効果的かを測定します。
トレーニング関数とSpladeLoss
コアのトレーニングロジックはSpladeLossを使用します。これは2つの目的をラップします:対照損失(SparseMultipleNegativesRankingLoss)とスパース正則化です。対照損失はバッチ内の他の製品をネガティブサンプルとして扱い、関連するクエリ-製品ペアを引き寄せ、無関係なものを引き離します。正則化は高密度な出力を罰し、効率性を維持します。正則化の重みはトレードオフを制御します:クエリ正則化重み5e-5、ドキュメント正則化重み3e-5。ドキュメントの正則化を低くするのは、製品説明により多くの属性を捉える必要があるためです。
YAMLによる設定と並列ハイパーパラメータ探索
ハイパーパラメータはYAMLファイルで管理し、実験を容易にします。Modalのspawn()を使用すると、複数の設定を並列に実行できます。例えば、24の実験を同時に起動し、各実験に専用のA100 GPUを割り当てることができ、全実験が1回のトレーニング時間内に完了します。
避けるべき落とし穴:推論なしSPLADE
クエリ側のTransformerを静的な埋め込みルックアップに置き換えてレイテンシを節約する試みは、eコマースでは悲惨な結果をもたらします(nDCG@10が0.065と、標準SPLADEの0.389の6分の1)。eコマースのクエリは文脈に大きく依存するため、静的な埋め込みでは「apple」が「apple iphone」と「apple fruit」の違いを区別できません。Transformerはクエリあたり約15ミリ秒かかりますが、検索には十分許容範囲です。
トレーニングの実行
Modalコマンドでトレーニングを開始できます。クイックテスト(10万サンプル)やフルデータセットの分離実行が可能です。チェックポイントは永続ボリュームに保存され、モデルはHuggingFaceに公開されています。次回の記事では、このモデルをロードし、製品をQdrantにインデックスして、BM25と比較した改善度を評価します。
主要なポイント
- ESCIの段階的関連性により、モデルは二値ではなく微妙なマッチングを学習する。
- 製品テキストのフォーマットはスパースモデルにとって重要であり、構造化フォーマットで語彙信号を維持する。
- SpladeLossは対照学習とスパース正則化のバランスを取る。正則化の重みが主な調整ノブである。
- Modalの永続ボリュームと分離実行はチェックポイント管理の問題を解決する。
- クエリTransformerをスキップしてはならない。15ミリ秒のレイテンシで6倍の品質向上が得られる。