如何为NLP模型出一份合格的“考卷”?
作者:互联网
一、背景
如果一项 NLP 任务是考试,NLP 模型是考生,我们关心的不应该仅仅是最终的考试成绩,我们同样需要关心考生的哪些知识点掌握的不足,只有这样才能够有针对性地强化不足的知识点,提高考试成绩。
在这场考试中,测试数据集相当于一份考卷考卷。那么,这份考卷应该怎么出呢?
常用的方法是将数据集进行 train, validate, test 划分。也即是将一个题库里的题一部分用来学习,一部分用来小测验,另一部分用作考试。
但是这样会出现一些问题。例如,Bert 曾在一项推理任务 (ARCT) 当中取得了非常好的成绩,和人类差别很小[1]。然而,后来研究人员发现,Bert 之所以能取得好成绩,并不是因为其具备了推理能力,而是它发现了一些“考试技巧”。
例如, 它发现大多数的正确选项都包含 “not”,因此只需要“蒙”具有 “not” 的选项就可以了。如果将这个“线索”去掉,Bert 的成绩就下降成了盲猜的水平。
其实每一套数据集都是有偏的,都有可能包含很多的“线索”。当测试集和训练集出自同一份数据集,模型很可能可以通过很多“考试技巧”取得好成绩。并且当仅仅用一个准确性指标评测时,就无法评估模型掌握的究竟是“知识”还是“考试技巧”。
那么有人会问,模型最终的目的就是上线工作,线上数据就像是“高考真题”。如果高考能够取得好成绩,为什么还要关心是掌握了“知识”还是“考试技巧”呢?只用线上数据进行测试不行吗?
的确,在线上数据集上取得高分才是硬道理。然而,线上数据并不是一成不变的,用户的使用习惯随时有可能发生变化。如果模型只是通过“考试技巧”取得的高分,那么将无法适应这种变化,成绩就会不稳定。
因此,一个合格的考生,应该是通过“知识”做题,而非“考试技巧”。一份合格的考卷,也需要能够拨开“考试技巧”,考察出模型真正的能力。
我们需要回归本质,探讨当模型去完成一项任务时,影响判断的因素究竟有哪些。即模型需要具备哪些细分的能力才能够很好的完成这项任务。每一项细分能力就相当于一个“知识点”。我们需要知道模型对于每一个“知识点”掌握的情况究竟如何,这样才可以解释最终的成绩为什么好、为什么不好,并且才能够知道在哪些“知识点”上有待加强。
一个能够考察出模型真正能力的评测数据集,应该具备以下三个要素:
与训练集没有任何关系,是一套崭新的数据集。
对于完成任务需要的细分能力有较为完备的覆盖。
尽量避免出现“线索”。
下文将以语义相似度模型为例,介绍一种具备可解释性的评测数据集的构建方法。
二、模型与训练
首先,我们训练几个模型以待评测。本次实验选取了 5 个语义相似度模型,分别为 dssm, cnn-dssm, lstm-dssm, arc1 和 esim。训练数据采用哈工大 lcqmc 公开数据集,按照比例分为训练集、验证集和测试集,共计 26 万条文本对。
数据样例如下图所示:
训练结果如下图所示:(此处测试集是 lcqmc 数据集)
从 F1 和 Acc 的结果来看,esim 模型效果最好,arc1 模型次之, lstm-dssm 再次。dssm 模型 F1 远低于其他模型,但 acc 略高于 cnn-dssm 模型。
三、评测数据集的构建
下面我们来看这份“考卷”是如何出的。
首先,我们需要探讨一下影响两句话意思是否相同的因素有哪些。首先能够想到的是“词法”和“句法”两大类。
词法是指在句式相同的情况下,替换一个词语,使得句子意思相同或者不同。句法是指在词语一致的情况下,变换词语的位置,使得句子意思相同或者不同。
此外,上下文的信息也会影响两句话的语义。将所有因素整理如下:
由于上下文的模型与这里讨论的语义相似度模型属于不同的方法,因此在这里先不考虑。我们根据词法和句法的分类构建一个评测数据集,示例如下,每一分类有 100 条文本对, 共计 2300 条:
在数据集的构造时,我们尽量保证每一个“知识点”只有最小粒度的变化。这样才能清晰的对模型的细分能力进行评估,同时也可以评估出模型是否在用“考试技巧”答题。
四、指标及评测结果
首先,根据“词法”和“句法”的分类,提取出两个评价指标。整个评测数据集的 F_macro 值作为“综合能力”指标。
评测结果如下图所示:
从以上结果来看,esim 无论是同异义词判别能力还是词语位置分析能力,都取得了最好的效果。cnn-dssm 和 arc1 综合能力相近,但擅长的领域不同。cnn-dssm 对于词语位置的分析能力更强,而 arc1 对于词语的判别能力更强。
下面再对“词法”和“句法”分别进行更细粒度的分析,首先来看词法:
从词法分析来看,esim 整体较好,且对于”疑问词“的判别能力远优于其他模型,但在”谓语“、”宾语“的判别能力低于 arc1 模型。arc1 模型的”谓语“判别能力远优于其他模型, 但”时间状语“判别能力较弱。cnn-dssm 模型严格优于 lstm-dssm 模型, 且对于“否定副词”的判断最好。在所有词性中,”量词“的整体判别水平较高, 且远高于同模型的其他词性判别结果。
再来看句法。由于部分句法细分仅包含“同义“,因此会只有 F1 的值。对于同时包含“同义”和“不同义”的细分,则分别计算 F_macro 值。
以上分析结果来看,cnn-dssm 整体实力较为突出。dssm 效果最差(由于 dssm 模型并不会记录位置信息,因此结论与理论相符合)。
再将 F_macro 值进行拆分,分为 F0 和 F1,可以看出模型对于”同义“与”不同义“的判断倾向。
由于 F1 的值普遍高于 F0,可以得知模型对于语义相同的位置信息判断更准确,但 esim 和 arc1 对于地点主语替换例外。(这可以作为一个“考试技巧”的判断,即模型面对位置不同,更倾向于分类为“同义”)
通过以上指标,我们已经可以对不同模型的细分能力有量化的认识。然而,通过细分召回率矩阵,可以通过可视化的方法,对模型的对比有直观的感受,并且能够发现一些有趣的结论。
从图中可以看出,cnn-dssm 和 lstm-dssm 对于“同义”和“不同义”的判断倾向性更加明显(红蓝差异很大)。这说明这两个模型有更多的“考试技巧”,即在更多情况下,会将模型判断为“同义”。有趣的是,arc1 的倾向与其他模型不同。
五、总结与展望
本次实验主要提出了一套细粒度的语义相似度模型评测方法,提出了一些细粒度的评价指标,可以使我们更加深入的了解不同模型的特性。在我们较为熟悉的模型上进行试验,实验结果符合预期。
这种根据语言学特性的评测数据集构建方法,可以使我们对于模型有更加立体化的认知,对于模型的细化能力有更深入的了解,这可以为之后的模型优化提供参考方向。
不足之处在于,这种方法虽然可以发现模型的一些“考试技巧” (cnn-dssm 模型对于位置不同的两句话更倾向于分类为“同义”),但并不能够完全消除“线索”。
例如,对于“主语”这个分类,是否有可能具有一些词语,只出现在“同义”的句子当中,使得模型会认为具有这个词语的两个句子都是“同义”呢?面对这种偏差,解决方法是可以尽量保证所有词语均在“同义”和“不同义”中出现,以此来规避这种“线索”。这些经验可以在下一版评测数据集中加以优化。
换一个角度,从算法流程的角度来看,影响语义相似度的还会有其他因素。例如,本次实验所采用的的 jieba 分词,分词的效果如何,对于语义相似度的判断是否有影响?
本次实验文本向量化采用的是 word2vector,那么这种向量化模式对于模型影响如何?从结果看出,“量词”的判断准确性会高于其他词性,是不是由于 word2vector 向量化的计算方式导致的?这些问题需的解答要后续更多的工作,去构建更完善的评测体系。
还有一个值得探讨的有趣问题。在本次实验里,对于“考试技巧”的判断,还是基于对于数据的直观理解,是否能够提炼出一个衡量“考试技巧”的指标?如何才能公正客观又明确地设计这样一个指标呢?这对于模型质量的判断是一个很有价值的工作,值得深入探究。
另外,本次实验重在梳理评测方法,因此实验当中选取了结构较为简单的算法结构,更加方便判断方法的可行性。后续可以加入更多的相似度模型一起评测,加入 transformer 等机制,采用不同的向量化方法,会使得评测结论更加完善。
最后分享管理学教授 Peter Drucker 最有名的一句话:If you can't measure it, you can't improve it. 只有更好、更科学的评测体系,才能让 AI 变得越来越聪明。毕竟,考试只是手段,变得优秀才是目的。
标签:NLP,dssm,评测,合格,数据,模型,同义,考卷,考试 来源: https://blog.51cto.com/15060467/2678856