🚀 基于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}
}