使用 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」的同義詞)。訓練過程涉及幾個核心組件:
訓練組件
- 模型: 一個預訓練的稀疏編碼器或基礎模型(如 BERT 或 RoBERTa)。
- 資料集: 透過
datasets程式庫從 Hugging Face Hub 或本地檔案(CSV、JSON、Parquet 等)載入的資料。 - 損失函數: 類似
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 提供對稀疏向量的原生支援,使得大規模的高效語意搜尋成為可能。