文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。近几年, 随着深度学习的发展,尤其是预训练语言模型的出现极大的推动了文本表示技术的效果, 基于预训练语言模型的文本表示模型在学术研究数据、工业实际应用中都明显优于传统的基于统计模型或者浅层神经网络的文本表示模型。这里, 我们主要关注基于预训练语言模型的文本表示。 文本表示示例, 输入一个句子, 输入一个固定维度的连续向量: 文本的向量表示通常可以用于文本聚类、文本相似度计算、文本向量召回等下游任务中。 本模型为将MiiLM模型利用IBKD方法蒸馏得到的文本表示模型,其教师模型为SimCSE-SUP-Roberta-large。适用于STS(Sematic Textual Similarity)任务。具体训练细节请参考论文。 使用方式: 使用范围: 在ModelScope框架上,提供输入文本(默认最长文本长度为128),即可以通过简单的Pipelie调用来使用coROM文本向量表示模型。ModelScope封装了统一的接口对外提供单句向量表示、双句文本相似度、多候选相似度计算功能 本模型基于英文领域通用数据集训练,在垂类领域英文文本上的文本效果会有降低,请用户自行评测后决定如何使用 STS任务评估结果如下:英文文本向量表示模型MiiLM-IBKD-STS
模型介绍
使用方式和范围
如何使用
代码示例
from modelscope.models import Model
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks
model_id = "damo/lp_miilm_ibkd_setece-embeddig_eglish-sts"
pipelie_se = pipelie(Tasks.setece_embeddig,
model=model_id)
# 当输入包含“soure_setece”与“seteces_to_compare”时,会输出source_setece中首个句子与seteces_to_compare中每个句子的向量表示,以及source_setece中首个句子与seteces_to_compare中每个句子的相似度。
from modelscope.models import Model
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks
model_id = "damo/lp_miilm_ibkd_setece-embeddig_eglish-sts"
pipelie_se = pipelie(Tasks.setece_embeddig,
model=model_id)
iputs = {
"source_setece": ["how log it take to get a master degree"],
"seteces_to_compare": [
"O average, studets take about 18 to 24 moths to complete a master degree.",
"O the other had, some studets prefer to go at a slower pace ad choose to take",
"several years to complete their studies.",
"It ca take aywhere from two semesters"
]
}
result = pipelie_se(iput=iputs)
prit (result)
模型局限性以及可能的偏差
训练示例代码
# 需在GPU环境运行
# 加载数据集过程可能由于网络原因失败,请尝试重新运行代码
from modelscope.metaifo import Traiers
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
import tempfile
import os
tmp_dir = tempfile.TemporaryDirectory().ame
if ot os.path.exists(tmp_dir):
os.makedirs(tmp_dir)
# load dataset
ds = MsDataset.load('msmarco-passage-rakig', 'zyzull')
trai_ds = ds['trai'].to_hf_dataset()
dev_ds = ds['dev'].to_hf_dataset()
model_id = 'damo/lp_miilm_ibkd_setece-embeddig_eglish-sts'
def cfg_modify_f(cfg):
cfg.task = 'setece-embeddig'
cfg['preprocessor'] = {'type': 'setece-embeddig','max_legth': 256}
cfg['dataset'] = {
'trai': {
'type': 'bert',
'query_sequece': 'query',
'pos_sequece': 'positive_passages',
'eg_sequece': 'egative_passages',
'text_fileds': ['text'],
'qid_field': 'query_id'
},
'val': {
'type': 'bert',
'query_sequece': 'query',
'pos_sequece': 'positive_passages',
'eg_sequece': 'egative_passages',
'text_fileds': ['text'],
'qid_field': 'query_id'
},
}
cfg['trai']['eg_samples'] = 4
cfg['evaluatio']['dataloader']['batch_size_per_gpu'] = 30
cfg.trai.max_epochs = 1
cfg.trai.trai_batch_size = 4
retur cfg
kwargs = dict(
model=model_id,
trai_dataset=trai_ds,
work_dir=tmp_dir,
eval_dataset=dev_ds,
cfg_modify_f=cfg_modify_f)
traier = build_traier(ame=Traiers.lp_setece_embeddig_traier, default_args=kwargs)
traier.trai()
模型效果评估
Model
STS12
STS13
STS14
STS15
STS16
STS-B
SICK-R
Avg
Params
Dimesio
SimCSE-RoBERTa-base
76.53
85.21
80.95
86.03
82.57
85.83
80.50
82.52
110M
768
SimCSE-RoBERTalarge
77.46
87.27
82.36
86.66
83.93
86.70
81.95
83.76
330M
1024
SimCSE-MiiLM
70.34
78.59
75.08
81.10
77.74
79.39
77.85
77.16
23M
384
MiiLM-MSE
73.75
81.42
77.72
83.58
78.99
81.19
78.48
79.30
23M
384
MiiLM-HPD
76.03
84.71
80.45
85.53
82.07
85.33
80.01
82.05
23M
128
MiiLM-CRD
74.79
84.19
78.98
84.70
80.65
82.71
79.91
81.30
23M
384
MiiLM-IBKD
23M
384
引用
@misc{zhag2023text,
title={Text Represetatio Distillatio via Iformatio Bottleeck Priciple},
author={Yazhao Zhag ad Digku Log ad Zeha Li ad Pegju Xie},
year={2023},
eprit={2311.05472},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
点击空白处退出提示
评论