🚀 DMetaSoul/sbert-chinese-qmc-finance-v1-distill
此模型是一个蒸馏轻量化版本的模型,它基于之前开源金融问题匹配模型开发而来,仅采用了 4 层 BERT 架构。该模型特别适用于金融领域的问题匹配场景,能够高效地处理诸如以下示例中的问题匹配任务:
- 8 千日利息 400 元? VS 10000 元日利息多少钱
- 提前还款是按全额计息 VS 还款扣款不成功怎么还款?
- 为什么我借钱交易失败 VS 刚申请的借款为什么会失败
离线训练好的大模型若直接用于线上推理,会对计算资源提出苛刻要求,且难以满足业务环境对延迟、吞吐量等性能指标的需求。为解决这一问题,我们运用蒸馏手段对大模型进行轻量化处理。从 12 层 BERT 蒸馏为 4 层后,模型参数量缩小到 44%,大约能使 latency 减半、throughput 翻倍,不过精度会下降 5% 左右(具体结果详见下文评估小节)。
🚀 快速开始
✨ 主要特性
- 蒸馏轻量化:是原开源金融问题匹配模型的蒸馏版本,仅 4 层 BERT,参数量大幅缩小。
- 适用场景明确:专注于金融领域的问题匹配场景。
- 性能优化:在计算资源需求、延迟和吞吐量方面有显著改善。
📦 安装指南
首先进行安装:
pip install -U sentence-transformers
💻 使用示例
基础用法
通过 sentence-transformers 框架载入模型并进行文本表征向量的提取:
from sentence_transformers import SentenceTransformer
sentences = ["到期不能按时还款怎么办", "剩余欠款还有多少?"]
model = SentenceTransformer('DMetaSoul/sbert-chinese-qmc-finance-v1-distill')
embeddings = model.encode(sentences)
print(embeddings)
高级用法
如果不想使用 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-qmc-finance-v1-distill')
model = AutoModel.from_pretrained('DMetaSoul/sbert-chinese-qmc-finance-v1-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("Sentence embeddings:")
print(sentence_embeddings)
🔧 技术细节
模型蒸馏
离线训练好的大模型直接用于线上推理对计算资源要求高,难以满足业务性能指标。因此使用蒸馏手段将 12 层 BERT 蒸馏为 4 层 BERT,实现模型轻量化。
性能对比
属性 |
详情 |
模型类型 |
从 BERT - 12 - layers (102M) 蒸馏为 BERT - 4 - layers (45M) |
训练数据 |
未提及 |
性能对比 |
参数量缩小到 44%,Cost 从 23s 降至 12s(-47%),Latency 从 38ms 降至 20ms(-47%),Throughput 从 418 sentence/s 提升至 791 sentence/s(1.9x) |
精度对比 |
平均精度从 57.61% 降至 52.80%(-4.81%) |
评估
性能对比
|
Teacher |
Student |
Gap |
Model |
BERT - 12 - layers (102M) |
BERT - 4 - layers (45M) |
0.44x |
Cost |
23s |
12s |
-47% |
Latency |
38ms |
20ms |
-47% |
Throughput |
418 sentence/s |
791 sentence/s |
1.9x |
精度对比
|
csts_dev |
csts_test |
afqmc |
lcqmc |
bqcorpus |
pawsx |
xiaobu |
Avg |
Teacher |
77.40% |
74.55% |
36.00% |
75.75% |
73.24% |
11.58% |
54.75% |
57.61% |
Student |
75.02% |
71.99% |
32.40% |
67.06% |
66.35% |
7.57% |
49.26% |
52.80% |
Gap (abs.) |
- |
- |
- |
- |
- |
- |
- |
-4.81% |
⚠️ 重要提示
以上评估是基于 1 万条数据测试,GPU 设备是 V100,batch_size = 16,max_seq_len = 256。
📄 许可证
原文档未提及许可证信息,故跳过此章节。
Citing & Authors
E - mail: xiaowenbin@dmetasoul.com