StructBERT零样本分类模型介绍
Yin等人[1]提出了一种使用预训练的自然语言推理模型来实现零样本分类的方式。 工作原理:将要分类的文本设置为自然语言推理的前提,然后使用每个标签构建一个假设,接着对每个假设进行推理得到文本所属的标签。 该模型可以在不使用下游数据进行训练的情况下,按照指定的标签对文本进行分类。
模型描述
该模型使用StructBERT-base在xnli数据集(将英文数据集重新翻译得到中文数据集)上面进行了自然语言推理任务训练。
如何使用
在ModelScope框架上,通过调用pipeline,提供待分类的文本以及所有可能的标签即可实现文本分类。
代码范例
from modelscope.pipelines import pipeline
classifier = pipeline('zero-shot-classification', 'damo/nlp_structbert_zero-shot-classification_chinese-base')
labels = ['家居', '旅游', '科技', '军事', '游戏', '故事']
sentence = '世界那么大,我想去看看'
# sentence = '全新突破 解放军运20版空中加油机曝光'
# labels = ['家居', '汽车', '科技', '军事']
classifier(sentence, candidate_labels=labels)
# {'labels': ['旅游', '故事', '游戏', '家居', '科技', '军事'],
# 'scores': [0.5115893483161926,
# 0.16600871086120605,
# 0.11971449106931686,
# 0.08431519567966461,
# 0.06298767030239105,
# 0.05538451299071312]}
# 预测结果为 "旅游"
classifier(sentence, candidate_labels=labels, multi_label=True)
# {'labels': ['旅游', '故事', '游戏', '军事', '科技', '家居'],
# 'scores': [0.8916056156158447,
# 0.4281940162181854,
# 0.16754530370235443,
# 0.09658896923065186,
# 0.08678494393825531,
# 0.07153557986021042]}
# 如阈值设为0.4,则预测出的标签为 "旅游" 及 "故事"
模型局限性以及可能的偏差
受训练数据的影响,在不同任务上的性能表现可能会有所差异。
训练数据介绍
XNLI是来自MNLI的一个子集,已被翻译成14种不同的语言。
模型训练流程
预处理
XNLI提供的中文数据集的翻译质量不佳,因此对英文数据集进行了重新翻译。
训练
使用经过翻译得到的392462条训练数据对StructBERT-base模型进行了自然语言推理任务的训练。
//: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # () //: # ()
数据评估及结果
在经过翻译得到的5000条测试数据上的f1为82.04。
相关论文以及引用信息
@article{yin2019benchmarking,
title={Benchmarking zero-shot text classification: Datasets, evaluation and entailment approach},
author={Yin, Wenpeng and Hay, Jamaal and Roth, Dan},
journal={arXiv preprint arXiv:1909.00161},
year={2019}
}
评论