模型测试
实验环境准备
依据ModelScope的介绍,实验环境可分为两种情况。笔者在此推荐使用第2种方式,点开就能用,省去本地安装环境的麻烦,直接体验ModelScope。
1 本地环境安装
可参考ModelScope环境安装。
2 Notebook
ModelScope直接集成了线上开发环境,用户可以直接在线训练、调用模型。
打开零样本分类模型,点击右上角“在Notebook中打开”,选择机器型号后,即可进入线上开发环境。
实验测试
(注:下面使用的样本及其获选标签,模型在训练过程中从未学习过。)
加载模型
使用以下两行命令即可进行零样本分类的模型加载。
from modelscope.pipelines import pipeline classifier = pipeline('zero-shot-classification', 'damo/nlp_structbert_zero-shot-classification_chinese-base')
运行后,ModelScope自动将指定的模型下载至缓存目录中。
设置标签
与一般的文本分类模型不同,零样本分类模型可以自己设定对应的标签,模型将根据给定的标签进行分类。此处我们先将文本标签设置如下。
labels = ['家居', '旅游', '科技', '军事', '游戏', '故事']
进行分类
接着输入文本,并使用pipeline进行分类。
sentence = '世界那么大,我想去看看' classifier(sentence, candidate_labels=labels)
最后,我们得到了以下结果:
从返回的结果中,可以发现样本属于旅游的概率远大于其他类别。即模型认为输入'世界那么大,我想去看看',在标签体系 ['家居', '旅游', '科技', '军事', '游戏', '故事'] 中应当属于旅游类别。
多标签分类
零样本分类模型除了能解决多分类问题之外,还能解决多标签分类问题。
在上述分类中,我们还有一个参数没有用到,即multi_label。从零样本分类模型的介绍中可以发现,这个参数是用于设置分类任务是否为多标签分类的。接着,我们也来尝试一下多标签分类任务。首先,设置标签如下:
labels = ["不开心", "不高心", "高兴", "开心"]
接着输入文本,并使用pipeline进行分类,并设置multi_label=True。
sentence = '世界那么大,我想去看看' result = classifier(sentence, candidate_labels=labels, multi_label=True)
最后我们得到了以下结果。
其中scores代表的是每个标签的概率,预测结果可以认为是开心和高兴,因他们的概率大于0.5。
模型原理
基于NLI的零样本分类模型主要是应用了NLI模型的推理能力,它将获选标签逐一与待分类文本结合,构建成句子对的样本形式后,再对每个样本进行推理判断两者之间的关系,最后再将每个样本的预测结果进行结合根据其相关性的概率进行分类。
自然语言推理
该零样本分类模型在训练时只使用了自然语言推理相关的数据集,并未使用任何文本分类数据集进行训练。
自然语言推理主要是判断两个句子(前提和假设,Premise and Hypothesis)之间的语义关系,一般定义有(Entailment, Contradiction, Neutral)三个类别,可以当成是一个三分类任务。下面举了3个例子让大家切实感受一下自然语言推理任务。
自然语言推理举例 前提:中间坐着的修鞋匠,就是张永红的父亲 假设:修鞋匠是女的 语义关系:Contradiction(矛盾) 解释:张永红的父亲,当然是男的! 前提:中间坐着的修鞋匠,就是张永红的父亲 假设:修鞋匠是男的 语义关系:Entailment(蕴含) 解释:张永红的父亲是男的,所以前提句子中已经包含了假设句的语义。 前提:中间坐着的修鞋匠,就是张永红的父亲 假设:张永红是男的 语义关系:Neutral(中立) 解释:前提和假设并没有关系。
零样本分类
那么如何基于自然语言推理进行零样本分类任务呢?
通过研读模型零样本分类模型中给出的论文,再结合对ModelScope源码的调试,我们可以发现,答案其实很简单。只要依次将每个的标签当成假设,输入的文本当成前提,进行自然语言推理任务之后,再对所有标签的预测结果进行处理,即可实现零样本分类。
设置三个标签:家居,旅游,科技 输入文本:世界那么大,我想去看看 对以上输入进行零样本分类的时候,将生成以下三个自然语言推理任务的样本: 1. 前提:世界那么大,我想去看看,假设:家居 2. 前提:世界那么大,我想去看看,假设:旅游 3. 前提:世界那么大,我想去看看,假设:科技
对三个样本进行自然语言推理的预测之后,最后将预测结果进行整合,即可实现零样本分类任务。例如多分类任务中,可以将“前提句”蕴含“假设句”概率最大的那个假设作为最后的标签。
本章小结
从模型原理的解析中可以发现基于自然语言推理的零样本文本分类模型在进行分类时,需要将候选标签逐一与文本进行结合生成对应的NLI的样本,这意味着有N个候选标签,就需要生成N个待推理样本。因此,该模型的推理效率可能较低,是一种用时间成本来获取更高准确率的方案。但该方案在抹零战役工单分类任务的低资源场景下,表现出了优异的性能。因此,在推理时间不敏感的低资源场景下的文本分类任务,该模型非常适用。
基于文本生成的零样本分类模型
该模型在mT5模型的基础上,使用3000万数据进行全中文任务的训练,支持各类任务的零样本/少样本学习,并引入了零样本分类增强的技术,使模型输出稳定性大幅提升。 模型特点:
- 零样本分类增强:该针对零样本分类输出不稳定的情况(即生成的内容不在所给的标签之中),进行了数据增强,在零样本分类稳定性评测中,该模型输出稳定性可达98.51%。
- 任务统一框架:把所有任务,如文本分类、相似度计算、文本生成等,都使用一个text-to-text的框架进行解决。
该模型除了支持零样本分类外,还可以支持其他任务的零样本学习。支持任务包含:
- 文本分类:给定一段文本和候选标签,模型可输出文本所属的标签。
- 自然语言推理:给定两段文本,判断两者关系。
- 阅读理解:给定问题和参考文本,输出问题的答案。
- 问题生成:给定答案和参考文本,生成该答案对应的问题。
- 摘要生成:给定一段文本,生成该文本的摘要。
- 标题生成:给定一段文本,为其生成标题。
- 评价对象抽取:给定一段文本,抽取该段文本的评价对象。
- 翻译:给定一段文本,将其翻译成另一种语言。
T5全称是Text-to-Text Transfer Transformer,是一种模型架构或者说是一种解决NLP任务的一种范式。它的主要目标就是使用文本生成的方式来解决各种自然语言处理任务,例如机器翻译、摘要、问答等。T5通过使用一种统一的编码和解码方法来解决不同的任务,从而避免了为每个任务单独设计模型的问题,在训练过程中使用了大量的数据和计算资源,以便在比较小的数据集上训练任务特定的模型。并且在大型的数据集上进行了广泛的评估,在许多自然语言处理任务中表现出优越的性能。
零样本文本分类
使用生成模型进行零样本分类的主要思路是将候选标签与待分类文本按照一定格式进行拼接后作为模型输入,期望模型可以输入文本所属的标签。图4展示了在ModelScope上进行测试的结果(该用例并未在训练过程中学习过)。
零样本分类增强
由于文本生成模型的输出具有一定的随机性,在使用基于文本生成的零样本学习模型进行零样本分类时,模型输出的结果可能并不在所给的候选标签之中,从而导致模型不可用。因此,我们使用了一种数据增强的方式来提升模型在零样本分类中的稳定性,并设计了零样本分类稳定性评测对模型分类的稳定性进行指标的量化。
零样本分类稳定性评测
评测方式
从40万条文本中随机挑选了1万条文本作为待分类文本,再为每条文本从130个标签库中随机挑选随机数量的标签作为候选标签,最后结合文本和候选标签得到评测数据集。
对于每个模型均使用其在训练时使用的prompt构建模型输入。如果模型最终的输出存在于候选标签中,则认为该模型在该样本上的预测稳定,否则认为模型不稳定。
评测结果
模型名字 |
零样本分类稳定率(%) |
PromptCLUE [3] |
48.65 |
PromptCLUE-base-v1-5 [4] |
76.32 |
未进行分类增强 |
64.32 |
全任务零样本学习-mT5分类增强版-中文-base |
98.51 |
从评测结果中可以发现,经过零样本分类增强之后,该模型零样本分类稳定率从64.32提升到了98.51。
样例测试
测试流程
- 使用模型指定的prompt构建输入,进行第一次分类。
- 如果分类结果稳定,即输出的内容属于候选标签,那么将输出的标签从候选标签中剔除。
- 再次根据指定的prompt构建输入,进行分类。
- 重复步骤b和步骤c,直到分类结果不稳定或候选标签已清空。
测试用例
测试用例使用PromptCLUE中所给的demo用例。
待分类文本:如果日本沉没,中国会接收日本难民吗? 候选标签:故事,文化,娱乐,体育,财经,房产,汽车,教育,科技,军事,旅游,国际,股票,农业,游戏
测试结果
PromptCLUE
PromptCLUE测试结果
从测试结果中可以发现,Prompt CLUE在第3次分类时,已经出现了模型不稳定的情况。
全任务零样本学习-mT5分类增强版-中文-base
全任务零样本学习-mT5分类增强版-中文-base测试结果
在测试过程中,该模型可以一直保持输出稳定直到候选标签被完全清空。
零样本学习评测
基于文本生成的零样本学习模型不仅支持零样本分类,同时还可以支持其他任务,如阅读理解、摘要生成、翻译等。因此,该模型选用了pCLUE[5]进行评测,同时与PromptCLUE进行了对比。整体评测结果如下:
模型名字 |
Score |
阅读理解(F1) |
阅读理解(EM) |
分类(acc) |
推理(acc) |
生成(rouge-l) |
PromptCLUE |
0.495 |
0.650 |
0.518 |
0.539 |
0.515 |
0.342 |
nlp_mt5_zero-shot-augment_chinese-base |
0.528 |
0.685 |
0.560 |
0.582 |
0.550 |
0.357 |
本章小结
使用文本生成的方式实现零样本分类时,可以将所有候选标签进行结合,只需要生成一个样本进行分类。相比基于NLI的零样本分类模型,在推理效率上优势比较大。但该模型会带来了分类结果不稳定的问题,即输出的文本不存在于候选标签中。而全任务零样本学习-mT5分类增强版-中文-base通过一种数据增强的方式大幅提升了在文本分类场景下的稳定性,在零样本分类稳定性评测中表现出的准确率可达98.51%,远大于其他模型,但在稳定性方面依然不如基于nli的模型。因此,该模型适用于对推理时间较为敏感的低资源文本分类场景。
总结
本文主要介绍了两类可以用于零样本文本分类的模型。
- 基于自然语言推理的零样本分类模型:适用于对模型推理时间不敏感的低资源文本分类场景,在抹零战役工单分类任务中,表现出了优异的性能。
- 基于文本生成的零样本学习模型:适用于对模型推理时间要求较高的低资源本文分类场景,同时还能进行其他任务的零样本学习。而本文介绍的模型在分类场景下进行了特定的数据增强,大幅提高了分类的稳定性,相比于其他模型更加适合应用于零样本文本分类场景。
参考文献
[1] Wang W, Bi B, Yan M, et al. Structbert: Incorporating language structures into pre-training for deep language understanding[J]. arXiv preprint arXiv:1908.04577, 2019.
[2] Raffel C, Shazeer N, Roberts A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. The Journal of Machine Learning Research, 2020, 21(1): 5485-5551.
[3] https://www.modelscope.cn/models/ClueAI/PromptCLUE/summary
[4] https://www.modelscope.cn/models/ClueAI/PromptCLUE-base-v1-5/summary