pipeline_tag: 句子相似度
tags:
- sentence-transformers
- 特征提取
- 句子相似度
- transformers
- 语义搜索
- 中文
DMetaSoul/sbert-chinese-general-v2-distill
此模型是之前开源通用语义匹配模型的蒸馏版本(仅4层BERT),适用于通用语义匹配场景。从效果来看,该模型在各种任务上泛化能力更强且编码速度更快。
离线训练好的大模型如果直接用于线上推理,对计算资源要求苛刻,且难以满足业务环境对延迟、吞吐量等性能指标的需求。这里我们通过蒸馏技术将大模型轻量化。从12层BERT蒸馏至4层后,模型参数量缩减至44%,延迟降低约一半、吞吐量翻倍、精度下降约6%(具体结果详见下文评估部分)。
使用方法
1. Sentence-Transformers
通过sentence-transformers框架使用该模型,首先安装:
pip install -U sentence-transformers
然后使用以下代码加载模型并提取文本表征向量:
from sentence_transformers import SentenceTransformer
sentences = ["我的儿子!他猛然间喊道,我的儿子在哪儿?", "我的儿子呢!他突然喊道,我的儿子在哪里?"]
model = SentenceTransformer('DMetaSoul/sbert-chinese-general-v2-distill')
embeddings = model.encode(sentences)
print(embeddings)
2. HuggingFace Transformers
如果不使用sentence-transformers,也可以通过HuggingFace Transformers加载模型并提取文本向量:
from transformers import AutoTokenizer, AutoModel
import torch
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
sentences = ["我的儿子!他猛然间喊道,我的儿子在哪儿?", "我的儿子呢!他突然喊道,我的儿子在哪里?"]
tokenizer = AutoTokenizer.from_pretrained('DMetaSoul/sbert-chinese-general-v2-distill')
model = AutoModel.from_pretrained('DMetaSoul/sbert-chinese-general-v2-distill')
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print("句子嵌入:")
print(sentence_embeddings)
评估
主要与蒸馏前的教师模型进行对比:
性能:
|
教师模型 |
学生模型 |
差距 |
模型结构 |
BERT-12层 (102M参数) |
BERT-4层 (45M参数) |
0.44倍 |
计算耗时 |
23秒 |
12秒 |
-47% |
延迟时间 |
38毫秒 |
20毫秒 |
-47% |
吞吐量 |
418句/秒 |
791句/秒 |
1.9倍 |
精度:
|
csts_dev |
csts_test |
afqmc |
lcqmc |
bqcorpus |
pawsx |
xiaobu |
平均 |
教师模型 |
77.19% |
72.59% |
36.79% |
76.91% |
49.62% |
16.24% |
63.15% |
56.07% |
学生模型 |
76.49% |
73.33% |
26.46% |
64.26% |
46.02% |
11.83% |
52.45% |
50.12% |
差距 (绝对值) |
- |
- |
- |
- |
- |
- |
- |
-5.95% |
测试基于1万条数据,GPU设备为V100,batch_size=16,max_seq_len=256
引用与作者
邮箱:xiaowenbin@dmetasoul.com