🚀 基於BAAI/bge-m3的8層蒸餾句向量模型,推理速度提升2.5倍
本項目是一個基於句子嵌入的模型,它從 BAAI/bge-m3 模型蒸餾而來,在公共和專有數據集的組合上進行訓練。這是一個8層的模型(原模型為24層),參數量為3.66億,在檢索性能幾乎無損的情況下,推理速度提升了2.5倍。
🚀 快速開始
安裝Sentence Transformers庫
pip install -U sentence-transformers
加載模型並進行推理
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("altaidevorg/bge-m3-distill-8l")
sentences = [
'That is a happy person',
'That is a happy dog',
'That is a very happy person',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
✨ 主要特性
- 高效蒸餾:通過知識蒸餾技術,將原24層的 BAAI/bge-m3 模型壓縮至8層,參數量大幅減少。
- 速度提升:在推理速度上實現了2.5倍的提升,從原來的每秒處理175個文本提升至每秒處理454個文本(在T4 Colab GPU上測試)。
- 性能無損:在檢索性能上幾乎沒有損失,在語義相似度和知識蒸餾任務上都取得了優異的成績。
- 多語言支持:儘管訓練數據集主要由土耳其語的多樣化文本組成,但模型在其他語言上也保留了相當的性能,例如在10k英文文本集合上的Spearman Cosine分數達到了0.938。
📚 詳細文檔
模型詳情
模型描述
屬性 |
詳情 |
模型類型 |
Sentence Transformer |
基礎模型 |
BAAI/bge-m3 |
最大序列長度 |
8192 tokens |
輸出維度 |
1024 dimensions |
相似度函數 |
Cosine Similarity |
訓練數據集 |
來自不同領域的1000萬條文本 |
模型來源
完整模型架構
SentenceTransformer(
(0): Transformer({'max_seq_length': 8192, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2): Normalize()
)
評估指標
語義相似度
指標 |
sts-dev |
sts-test |
pearson_cosine |
0.9691 |
0.9691 |
spearman_cosine |
0.965 |
0.9651 |
知識蒸餾
指標 |
值 |
negative_mse |
-0.0064 |
訓練詳情
訓練數據集
- 大小:9,623,924個訓練樣本
- 列:
sentence
和 label
- 基於前1000個樣本的近似統計信息:
|
句子 |
標籤 |
類型 |
字符串 |
列表 |
詳情 |
- 最小:5個token
- 平均:55.78個token
- 最大:468個token
|
|
🔧 技術細節
動機
我們團隊開發了一些語義搜索和RAG的實際應用案例,發現除了 BAAI/bge-m3
模型外,沒有其他模型能在各種領域和用例中都表現出色,尤其是在多模態場景下。然而,該模型規模過大,對於大規模用戶群體的低延遲服務和大規模數據索引來說成本過高。因此,我們希望在更小的模型規模和更高的速度下實現相同的檢索性能。
我們構建了一個包含1000萬條文本的大型多樣化數據集,並應用了知識蒸餾技術,將模型層數從24層減少到8層。結果令人驚喜,在測試子集上,我們實現了0.965的Spearman Cosine分數和0.006的均方誤差(MSE),這些結果甚至可以認為在數值誤差範圍內。在定性測試中,我們也沒有觀察到明顯的性能下降。最後,我們測量到吞吐量提升了2.5倍(在T4 Colab GPU上,從每秒處理175個文本提升至每秒處理454個文本)。
未來工作
儘管我們的訓練數據集主要由土耳其語的多樣化文本組成,但模型在其他語言上也保留了相當的性能,例如在10k英文文本集合上的Spearman Cosine分數達到了0.938。這種性能保留促使我們致力於開發該蒸餾模型的第二個版本,該版本將在更大的多語言數據集上進行訓練,並進行更小程度的蒸餾。請關注我們的更新,歡迎與我們聯繫進行合作。
📄 許可證
BibTeX
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
MSELoss
@inproceedings{reimers-2020-multilingual-sentence-bert,
title = "Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2020",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/2004.09813",
}
bge-m3
@misc{bge-m3,
title={BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation},
author={Jianlv Chen and Shitao Xiao and Peitian Zhang and Kun Luo and Defu Lian and Zheng Liu},
year={2024},
eprint={2402.03216},
archivePrefix={arXiv},
primaryClass={cs.CL}
}