模型详细介绍及实现原理可参考评测文章:世界那么大,我想去看看——探索ModelScope之零样本分类
Yin等人[1]提出了一种使用预训练的自然语言推理模型来实现零样本分类的方式。
工作原理:将要分类的文本设置为自然语言推理的前提,然后使用每个标签构建一个假设,接着对每个假设进行推理得到文本所属的标签。
该模型可以在不使用下游数据进行训练的情况下,按照指定的标签对文本进行分类。
在文本标注平台上,可使用该零样本分类模型对待标注数据进行预标注,对候选标签进行动态排序,从而提升标注效率。
候选标签越多,可以提升的标注效率越明显。
该模型使用StructBERT-base在xnli数据集(将英文数据集重新翻译得到中文数据集)上面进行了自然语言推理任务训练。
base版本模型[推荐]:StructBERT零样本分类-中文-base
large版本模型:StructBERT零样本分类-中文-large
在ModelScope框架上,通过调用pipeline,提供待分类的文本以及所有可能的标签即可实现文本分类。
from modelscope.pipelines import pipeline
classifier = pipeline('zero-shot-classification', 'damo/nlp_structbert_zero-shot-classification_chinese-tiny')
labels = ['家居', '旅游', '科技', '军事', '游戏', '故事']
sentence = '世界那么大,我想去看看'
classifier(sentence, candidate_labels=labels)
# {'labels': ['故事', '游戏', '旅游', '军事', '家居', '科技'],
# 'scores': [0.265742689371109,
# 0.18283072113990784,
# 0.18110956251621246,
# 0.14434847235679626,
# 0.11351832002401352,
# 0.11245030909776688]}
# 预测结果为 "旅游"
classifier(sentence, candidate_labels=labels, multi_label=True)
# {'labels': ['故事', '旅游', '游戏', '军事', '科技', '家居'],
# 'scores': [0.6273153424263,
# 0.5304903984069824,
# 0.40794724225997925,
# 0.3827379643917084,
# 0.31886956095695496,
# 0.2539421319961548]}
# 如阈值设为0.5,则预测出的标签为 "旅游" 及 "故事"
受训练数据的影响,在不同任务上的性能表现可能会有所差异。
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}
}