标签:
- 句子转换器
- 句子相似度
- 特征提取
- 训练生成
- 数据集大小:9623924
- 损失函数:均方误差损失
基础模型: BAAI/bge-m3
微件示例:
- 源句: 那是个快乐的人
对比句:
- 那是只快乐的狗
- 那是个非常快乐的人
- 今天阳光明媚
任务标签: 句子相似度
库名称: 句子转换器
评估指标:
- 皮尔逊余弦相似度
- 斯皮尔曼余弦相似度
- 负均方误差
模型索引:
- 名称: 基于BAAI/bge-m3的SentenceTransformer
结果:
- 任务:
类型: 语义相似度
名称: 语义相似性
数据集:
名称: sts开发集
类型: sts-dev
指标:
- 类型: 皮尔逊余弦
值: 0.9691269661048901
名称: 皮尔逊余弦
- 类型: 斯皮尔曼余弦
值: 0.9650087926361528
名称: 斯皮尔曼余弦
- 任务:
类型: 知识蒸馏
名称: 知识蒸馏
数据集:
名称: 未知
类型: unknown
指标:
- 类型: 负均方误差
值: -0.006388394831446931
名称: 负均方误差
- 任务:
类型: 语义相似度
名称: 语义相似性
数据集:
名称: sts测试集
类型: sts-test
指标:
- 类型: 皮尔逊余弦
值: 0.9691398285942048
名称: 皮尔逊余弦
- 类型: 斯皮尔曼余弦
值: 0.9650683134098942
名称: 斯皮尔曼余弦
基于BAAI/bge-m3的8层蒸馏模型,速度提升2.5倍
这是从BAAI/bge-m3通过公开和专有数据集组合蒸馏得到的嵌入模型。该模型为8层架构(原模型24层),参数量3.66亿,在检索性能几乎无损的情况下实现了2.5倍的速度提升。
研发动机
作为开发过多个语义搜索和RAG实际应用场景的团队,我们发现除BAAI/bge-m3
外,鲜有模型能在多领域场景(尤其是多模态环境)中表现优异。但其庞大体积导致服务高并发用户或处理海量数据时成本过高。为此我们致力于在保持检索性能的同时缩小模型体积并提升速度。通过构建包含1000万文本的多样化数据集,并应用知识蒸馏技术将层数从24减至8,结果令人惊喜——测试集斯皮尔曼余弦得分达0.965,均方误差仅0.006,差异可忽略不计。定性测试也未观察到明显性能下降,最终在T4 Colab GPU上测得吞吐量提升2.5倍(从175文本/秒增至454文本/秒)。
未来计划
尽管训练数据以土耳其语为主,但模型在英语等语言中仍保持优异表现(如在1万英文文本上测得斯皮尔曼余弦0.938)。这一跨语言性能促使我们计划开发第二代蒸馏模型:采用更大规模多语言数据集训练,并进一步压缩模型规模。敬请期待更新,欢迎合作洽谈。
模型详情
模型描述
- 模型类型: 句子转换器
- 基础模型: BAAI/bge-m3
- 最大序列长度: 8192个token
- 输出维度: 1024维
- 相似度计算: 余弦相似度
- 训练数据集: 来自多领域的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()
)
使用指南
直接使用(需安装Sentence Transformers库):
pip install -U sentence-transformers
加载模型示例:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("altaidevorg/bge-m3-distill-8l")
sentences = [
'那是个快乐的人',
'那是只快乐的狗',
'那是个非常快乐的人',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
评估结果
语义相似度
指标 |
sts开发集 |
sts测试集 |
皮尔逊余弦 |
0.9691 |
0.9691 |
斯皮尔曼余弦 |
0.965 |
0.9651 |
知识蒸馏
训练数据
- 样本量: 9,623,924条
- 数据结构:
句子
和标签
- 千样本统计:
引用文献
Sentence Transformers
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: 基于孪生BERT网络的句子嵌入",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "2019年自然语言处理实证方法会议论文集",
month = "11",
year = "2019",
publisher = "计算语言学协会",
url = "https://arxiv.org/abs/1908.10084",
}
MSELoss
@inproceedings{reimers-2020-multilingual-sentence-bert,
title = "通过知识蒸馏实现单语句子嵌入的多语言化",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "2020年自然语言处理实证方法会议论文集",
month = "11",
year = "2020",
publisher = "计算语言学协会",
url = "https://arxiv.org/abs/2004.09813",
}
bge-m3
@misc{bge-m3,
title={BGE M3-嵌入: 通过自知识蒸馏实现多语言、多功能、多粒度文本嵌入},
author={陈建lv and 肖世涛 and 张培天 and 罗坤 and 连德福 and 刘政},
year={2024},
eprint={2402.03216},
archivePrefix={arXiv},
primaryClass={cs.CL}
}