导读
背景介绍
数据示例:
id | sentence1 | sentence2 | label |
---|---|---|---|
1 | 你们是哪里的 | 嗯,可以啊,你是哪里啊 | 1 |
2 | 你是不是机器人 | 你是机器人吗 | 1 |
3 | 有这个打算 | 还是不对 | 0 |
4 | 挺满意的 | 物流项目管理 | 0 |
文本匹配实验方案设计
通过分析新冠疫情相似句对判定大赛 Top 方案的共同点,为了验证这些方法的有效性,本文设计了以下实验方案步骤:
1)实验经典孪生网络:SiameseLSTM,ABCNN,BiMPM,ESIM
2)实验开源的 Bert 中文预训练模型:Bert_wwm_ext,roberta_wwm_large,ERNIE
3)实验对比不同的文本匹配 tricks:对抗训练,k 折交叉验证,模型集成
4)各方案在语音机器人交互数据集上进行实验对比
孪生神经网络以两个样本为输入,输出其嵌入高维度空间的表征,以比较两个样本的相似程度。狭义的孪生神经网络由两个结构相同,且权重共享的神经网络拼接而成 。
1.1 SiameseLSTM
SiameseLSTM 是一种非常经典的孪生网络,sentence1 和 sentence2 分别进入双向 LSTM,然后将两个输出向量对位相减,然后计算二次范数,再求解最终的概率值。这个模型作为baseline,在竞赛数据集上,准确率为 83.23%;在语音机器人数据集上,准确率为 97.23%。
SiameseLSTM 发布于 2016 年的 AAAI 会议上,是很早的一篇关于孪生网络的论文,后面提出的孪生网络很多都是由这个网络衍生而来。
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 竞赛 | 0.8323 |
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 语音机器人 | 0.9723 |
全称是 Attention-Based Convolutional Neural Network for Modeling Sentence Pairs,是一种基于注意力的卷积神经网络,专用于句子对建模。主要的网络结构是卷积神经网络,在卷积前和卷积后,都添加了注意力机制。
采用 ABCNN,竞赛数据集上,准确率为 85.28%,比 上一版 提升了 2.05%;语音机器人数据集上,准确率为 97.45%,提升了 0.22%。
相比于 SiameseLSTM 而言,ABCNN 的注意力矩阵是由两个句子的向量矩阵相乘得来,因此该注意力矩阵考虑了句子之间的影响,这一点 SiameseLSTM 模型没有考虑到。
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 竞赛 | 0.8323 |
ABCNN | 竞赛 | 0.8528 |
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 语音机器人 | 0.9723 |
ABCNN | 语音机器人 | 0.9745 |
全称是 bilateral multi-perspective matching,是一种双边多视角匹配策略。这个模型将两个句子的上下文表示层的输出向量以四种不同的方式进行匹配,包括全匹配,最大池匹配,带注意力的加权求和匹配,带注意力的最大值匹配。将四种匹配结果拼接,然后进入双向 lstm 进行聚合,进入 softmax 得到预测结果。
采用 BIMPM,竞赛数据集上,准确率为 89.16%,比 ABCNN 提升了 3.88%。语音机器人数据集上,准确率为 98.48%,提升了 1.03%。
ABCNN 只是从单一的角度去做匹配, 而 BiMPM 使用了四种不同的匹配方法把两个句子之间的单元做相似度计算,特征更加丰富,取得了更好的效果。
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 竞赛 | 0.8323 |
ABCNN | 竞赛 | 0.8528 |
BiMPM | 竞赛 | 0.8916 |
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 语音机器人 | 0.9723 |
ABCNN | 语音机器人 | 0.9745 |
BiMPM | 语音机器人 | 0.9848 |
全称是 Enhanced Sequential Inference Model,一种增强的序列推理模型。在局部推理建模层,每个时间步都会通过注意力机制生成一个新的向量,然后原始向量和这个新向量进行对位相减,对位相乘,再形成两个新的向量。然后将这四个向量进行拼接,输入到下一层的 lstm 进行特征聚合,预测输出。
采用 ESIM,竞赛数据集上,准确率为 90.77%,比 BiMPM 提升了 1.61%。语音机器人数据集上,准确率为 98.80%,提升了 0.32%。
相比于 BiMPM 而言,ESIM 的特点在于,采用注意力机制对句子的每个时间步向量进行运算形成新的注意力向量,然后将新的注意力向量和原始向量进行差异性运算,包括对位相减,对位相乘。这种差异性计算,带来了模型效果的提升。
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 竞赛 | 0.8323 |
ABCNN | 竞赛 | 0.8528 |
BiMPM | 竞赛 | 0.8916 |
ESIM | 竞赛 | 0.9077 |
策略 | 数据集 | 准确率 |
---|---|---|
SiameseLSTM | 语音机器人 | 0.9723 |
ABCNN | 语音机器人 | 0.9745 |
BiMPM | 语音机器人 | 0.9848 |
ESIM | 语音机器人 | 0.9880 |
本章节实验了几种经典孪生网络,从最早的 SiameseLSTM,到后期的各种演化模型 ABCNN,BiMPM 等等。这些模型的核心思想都是来自 SiameseLSTM,即两个样本经过相同的神经网络,进行参数共享,然后对输出向量进行计算。只是后期的演化模型开始考虑句子之间的影响,考虑从多个维度来计算句子每个时间步向量的相似度,以及注重向量的差异性运算等等,模型的效果也在逐步提高。从 SiameseLSTM 到 ESIM,竞赛数据集的准确率最终可以达到 90.77%,语音机器人数据集的准确率最终可以达到 98.80%。从演化过程来看,引入丰富的注意力机制,有助于提高文本匹配效果。
Bert系列预训练模型算法效果
bert_wwm_ext:采用了全词 mask,更加关注一些同时出现的字。
ernie1.0:将实体单元和短语 mask 掉,更加关注实体,和同时出现的词。
roberta_wwm_large:采用了动态 mask,每个 epoch 会重新计算 mask 位置。
无论是在竞赛数据集还是语音机器人数据集中,bert 系列模型的效果相对于经典孪生网络都取得了较大的提升。但 bert 模型之间的效果差异不是很大,只有 1 个千分点的区别。roberta_wwm_large 的参数量更大,学习的特征更多;采用了全词 mask,更兼顾字的共现性,适合中文语境;采用了动态 mask,每个 epoch 会重新选择 mask 的位置,泛化性更好;理论上能够取得更优的效果,竞赛数据集上该模型的准确率达到了 95.02%,语音机器人数据集上准确率达到了 99.30%。
策略 | 数据集 | 准确率 |
---|---|---|
bert_wwm_ext | 竞赛 | 0.9496 |
ernie | 竞赛 | 0.9499 |
roberta_wwm_large | 竞赛 | 0.9502 |
策略 | 数据集 | 准确率 |
---|---|---|
bert_wwm_ext | 语音机器人 | 0.9938 |
ernie | 语音机器人 | 0.994 |
roberta_wwm_large | 语音机器人 | 0.993 |
文本匹配比赛常见Tricks
对抗训练是增强神经网络鲁棒性的重要方式。在对抗训练的过程中,样本会被混合一些微小的扰动(改变很小,但是很可能造成误分类),然后使神经网络适应这种改变,从而对对抗样本具有鲁棒性。思想很简单,就是让扰动 δ 的方向沿着梯度提升的方向,沿着梯度提升也就意味着让损失增大得最快。
fgm:在 embedding 上添加对抗扰动,反向传播时,会使用梯度下降来优化 embedding。在正常的梯度下降的基础上,累加对抗训练的梯度,让梯度再沿着梯度上升的方向更新一点点.
pgd:使用 fgm,有一个假设就是损失函数是线性的或者至少是局部线性的。如果不是(局部)线性的,那梯度提升的方向就不一定是最优方向了。为了解决 fgm 中的线性假设问题,有论文提出了使用 pgd 解内部的最大值问题。pgd 属于一种迭代攻击,相比于普通的 fgm 仅做一次迭代,pgd 是做多次迭代,每次走一小步。由于每次只走很小的一步,所以局部线性假设基本成立的。经过多步之后就可以达到最优解了,也就是达到最强的攻击效果。
结论:对抗训练通过添加微弱的干扰,提升了模型的泛化能力,因此取得了更好的效果,是一个有效的 trick。
策略 | 数据集 | 准确率 |
---|---|---|
ernie + 外部数据 + 数据传递 | 竞赛 | 0.9559 |
ernie + 外部数据 + 数据传递 + fgm | 竞赛 | 0.9558 |
ernie + 外部数据 + 数据传递 + pgd | 竞赛 | 0.9576 |
策略 | 数据集 | 准确率 |
---|---|---|
ernie | 语音机器人 | 0.994 |
ernie + fgm | 语音机器人 | 0.9943 |
ernie + pgd | 语音机器人 | 0.9948 |
将数据集等比例划分成 K 份,以其中的一份作为测试数据,其他的 K-1 份数据作为训练数据。把实验重复做 K 次,每次实验都是从 K 个部分选取一份不同的数据作为测试数据,剩下的 K-1 个当作训练数据,训练 K 个模型,每个模型都对测试集进行预测,共预测 K 次,取均值作为最终的结果。
这里的实验,一共训练 5 个模型,本文没有采用求均值的方法,而是直接取多数模型的预测类别作为最终的预测类别。
结论:从实验结果来看,k 折交叉验证能够有效提升模型效果。
策略 | 数据集 | 准确率 |
---|---|---|
esim | 竞赛 | 0.9077 |
esim + 5 折交叉验证 | 竞赛 | 0.9157 |
ernie | 竞赛 | 0.9499 |
ernie + 5 折交叉验证 | 竞赛 | 0.9515 |
策略 | 数据集 | 准确率 |
---|---|---|
ernie | 语音机器人 | 0.994 |
ernie + 5 折交叉验证 | 语音机器人 | 0.9943 |
由于 bert 系列预训练模型的效果远优于经典孪生网络,因此这里采用的模型集成的方式是,取以下四种 bert 预训练模型中的预测结果(这里都加入了数据增强),作为最终的预测结果。
结论:从实验效果来看,bagging 取得了最优的准确率,达到了 95.85%。优质模型的 bagging,对实验效果有很大的提升作用。
策略 | 数据集 | 准确率 |
---|---|---|
bert_wwm_ext + 外部数据 + 数据传递 | 竞赛 | 0.9502 |
ernie + 外部数据 + 数据传递 | 竞赛 | 0.9559 |
roberta_wwm_large + 外部数据 + 数据传递 | 竞赛 | 0.9470 |
模型集成(以上三个模型 bagging) | 竞赛 | 0.9585 |
策略 | 数据集 | 准确率 |
---|---|---|
bert_wwm_ext | 语音机器人 | 0.9938 |
ernie | 语音机器人 | 0.994 |
roberta_wwm_large | 语音机器人 | 0.993 |
模型集成(以上三个模型 bagging) | 语音机器人 | 0.995 |
本章节对 Top 选手使用的各个 Trick 进行了对比实验,其中 k 折交叉验证,对抗训练,模型集成有助于提升文本匹配效果。最终将各个优质模型进行模型集成,竞赛数据集下准确率可以达到 95.85%,语音机器人数据集下准确率可以达到 99.50%。
总结
本文借鉴了阿里达摩院举办的相似句对判定大赛的 Top 选手的解决方案,在竞赛数据集和我们业务数据集下都进行了相关实验,均取得了不错的效果。从实验来看,最佳效果的模型基本都是 Bert 系列。同时 k 折交叉验证,对抗训练,模型集成等 tricks 都能产生正向效果,由于时间和精力投入关系,本文的部分实验并不足够充分,例如 Bert 系列模型的 tricks 对比,主要选用了 ERNIE,因为 Roberta 训练一次要两个小时,比较耗时。不过重要的模型和 tricks 基本都进行了对比实验,也在两个不同的训练集下对实验方案进行了有效性的验证,希望能对各位产生一定的参考价值。
ABCNN:https://arxiv.org/pdf/1512.05193.pdf
BIMPM:https://arxiv.org/abs/1702.03814
ESIM:https://arxiv.org/abs/1609.06038
ERNIE1.0:https://arxiv.org/pdf/1904.09223.pdf
哈工大开源的中文预训练模型:https://github.com/ymcui/Chinese-BERT-wwm
对抗训练:https://zhuanlan.zhihu.com/p/91269728
有奖互动
Perseverance Prevails
欢迎在评论区为作者大佬打call,将抽取点赞前五名送出58技术周边一份。
开奖时间:6月18日 18:00