Pytorch学习记录-TextMatching文本匹配01
本文是对知乎上这篇文章的阅读笔记,查了一下ACL和arXiv历年来关于TextMatching的论文,不知道如何下手,就找找别人的文献综述看看,但是似乎和我想象的不大一样,还是得先实现一个基于深度神经网络的模型才行。
0. 深度文本匹配发展总结
本文基于知乎《深度文本匹配发展总结》,希望作为对之后文献阅读的一个路径。
0.1 常用数据集
- SNLI:570K条人工标注的英文句子对,label有三个:矛盾、中立和支持
- MultiNLI:433K个句子对,与SNLI相似,但是SNLI中对应的句子都用同一种表达方式,但是MultiNLI涵盖了口头和书面语表达,可能表示形式会不同(Mismatched)
- Quora:400k个问题对,每个问题和答案有一个二值的label表示他们是否匹配
-
WikiQA:
问题是相对应的句子的数据集,相对比较小。
0.2 模型发展
- 单语义模型,简单的用全连接、CNN或RNN编码两个句子然后计算句子之间的匹配度,没有考虑到句子中短语的局部结构。
- 多语义模型,从多个粒度解读句子,考虑到和句子的局部结构。
- 匹配矩阵模型,考虑待匹配的句子间不同单词的交互,计算两两之间的匹配度,再用深度网络提取特征,更精细的处理句子中的联系。
- 深层次的句子间模型,这是近几年STOA模型,随着attention等交互机制论文的发表,最新的论文用更精细的结构去挖掘句子内和句子间不同单词之间的联系,得到更好的效果。
这部分和我想的类似,之前希望做的是基于文本的词、句、段落、篇章四个粒度进行匹配,而且在2017年transformer出现之后,使用attention成为提升模型得分的最直接的方式。
0.3 单语义模型
经典模型是DSSM(2013),来自论文《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》
0.3.1 DSSM模型创新点
- 用三个字母的word hashing代替了BOW模型,降低单词向量维度
word hashing理论是对单词进行拆分,文中使用'good'举例,在单词两侧增加开始和结束标记'#',然后将这个词'#good#'打散为n-grams,这里结果是'#go','goo','ood','od#',最后使用n-grams向量表示这个词。
模型的结构。使用DNN将高维度稀疏文本特征映射到语义空间中的低维密集特征中。第一个隐藏层,具有30k单位,完成word hashing。然后通过多层非线性投影投射word hashing特征。
此DNN中的最后一层神经活动形成了语义空间中的特征。
- 使用全连接神经网络处理句子
这个模型的缺点也很明显,没有考虑单词之间的时序联系,相似度匹配用的余弦相似度是一个无参匹配公式。
0.4 多语义模型
经典模型是MV-LSTM模型(2015),来自中国科学院《A Deep Architecture for Semantic Matching with Multiple Positional Sentence Representations》
0.4.1 MV-LSTM模型
使用Bi-LSTM构建神经网络,对LSTM隐藏层的输出进行匹配,作者认为这个模型能够考察每个单词在不同语境下的含义,然后使用Bi-LSTM处理句子可以实现用变长的窗口逐步解读句子,从多粒度考察句子的效果。
image.png模型中和就是输入的句子,首先通过Bi-LSTM获得位置语句表示(表示为虚线橙色框)。然后,k-Max汇集从每个交互矩阵中选择前k个相互作用(在图中表示为蓝色网格)。最后通过多层感知器MLP计算匹配分数。
0.4.2 创新点
- 使用了当时比较新的Bi-LSTM网络,将句子的时序考虑进去,同时也有了对更长句子信息的捕捉能力。
- 使用Interaction tensor计算句子之间的两两匹配度,从多个角度解读句子。
- 匹配计算公式采用了带参数的计算公式。
因为语言的表示有多样性,带参数的公式比不带参数的公式显得更加合理,然后对匹配矩阵进行K-Max的动态池化操作,也就是挑选K个最大的特征,最后采用全连接层进行维度压缩和分类。
0.5 匹配矩阵模型
来自论文《Text Matching as Image Recognition》
这篇论文从3个角度构建匹配矩阵。更精细的考虑句子间单词的两两关系,构建出3个矩阵进行叠加,把这些矩阵看作是图片,用卷积神经网络对矩阵进行特征提取。
论文中一共有3种方式构建匹配矩阵,Indicator是一个这个句子的单词是否在另一个句子中出现的指示矩阵,第二个是单词之间的点积,第三个是余弦相似度。三个匹配矩阵叠加再用CNN在矩阵上进行特征提取是这篇整体的思想。
0.6 深层次句间交互模型
在做实际匹配处理的时候,通常会出现训练集、测试集中出现语料库中没有的单词(OOV问题)。深层次句间交互模型的单词使用Glove预训练和characters卷积拼接作为单词的embedding输入。characters卷积是对每个字母随机赋予一个向量,对单词的所有字母卷积得出特征作为单词的补充特征,这些特征是为了缓解OOV的问题。
0.6.1 BiMPM
2017年IBM《Bilateral Multi-Perspective Matching for Natural Language Sentences》
双边、多角度句子匹配。
文章创新点
- 双边,不是之前BiLSTM那种双边,而是从问句到答句,再从答句到问句
- 多角度,使用了4种方式(Full-matching/Maxpooling-matching/Attentive-matching/Max-attentive matching)对句子之间的交互关系进行处理
模型的整体框架图,输入是预训练的glove embeddings 和 chars embeddings,经过BiLSTM的编码之后,对每一个step的LSTM的输出进行从p到q和从q到p的两两配对,有四种组合方式,然后将所有的结果进行拼接和预测结果。
使用四种匹配方式,匹配公式采用带参数的余弦相似度
- Full-matching:句子中的每个单词与另一个句子中最后一个隐藏层输出结果做匹配
- Maxpooling-matching:与另一个句子每一个隐藏层输出作匹配,选取其中最大值
- Attentive-matching:利用这个单词的embedding和另一个句子各个单词的embeddings分别计算余弦相似度,然后用softmax归一化作为attention权重,加权求和再进行带参余弦相似度计算
- Max-attentive matching:与Attentive相似,先计算出attention权重,然后取最大值,作相似度匹配
0.6.2 DIIN(Densely IIN)
2018年纽约大学《Natural Language Inference over Interaction Space》
Interactive Inference Network(IIN,交互式推理网络)
DenseNet可以在经过复杂的深度神经网络之后,还可以很大程度上保留原始特征的信息。(但是为了保留原始特征,现在是不是使用attention机制会更好?)。
模型的整体框架,可以看到输入部分有四个部分的特征(Glove,char,EM(exact match),POS)。这是一个分级多阶段处理的网络,包括5个部分,每个组件都与不同类型的实现兼容。机器学习中可能存在的所有方法,例如决策树,支持向量机和神经网络方法,都可以转移以替换该体系结构中的某些组件。
什么是highway networks?
深层神经网络相比于浅层神经网络具有更好的效果,在很多方面都已经取得了很好的效果,特别是在图像处理方面已经取得了很大的突破,然而,伴随着深度的增加,深层神经网络存在的问题也就越大,像大家所熟知的梯度消失问题,这也就造成了训练深层神经网络困难的难题。
2015年Rupesh Kumar Srivastava等人受到LSTM门机制的启发提出的网络结构(Highway Networks)很好的解决了训练深层神经网络的难题,Highway Networks 允许信息高速无阻碍的通过深层神经网络的各层,这样有效的减缓了梯度的问题,使深层神经网络不在仅仅具有浅层神经网络的效果。
使用highway network对特征进行编码,这个编码的输出构造一个句子内的attention,(具体就是公式 ,对单词a和单词b的向量和它们的点积进行拼接,再做一个线性的映射得到一个权重参数,经过softmax归一化后成为句内attention的权重参数)然后是参考了LSTM的设计,对highway出来的向量和带了句内交互的attention项的向量用门机制进行了过滤,得到每个单词的向量表示,然后将向量表示两两之间做一个匹配形成匹配矩阵,最后用DenseNet对匹配矩阵进行特征提取。
0.6.3 DRCN
2018年首尔大学《Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information》
这篇论文的创新点在于:1、采用了固定的glove embedding和可变的glove embedding拼接并提升了模型效果。2、采用stack层级结构的LSTM,在层级结构上加入了DenseNet的思想,将上一层的参数拼接到下一层,一定程度上在长距离的模型中保留了前面的特征信息。3、由于不断的拼接导致参数增多,用autoencoder进行降维,并起到了正则化效果,提升了模型准确率。
小结
怎么感觉模型越来越复杂,而且使用的模型结构和之前看到的不太一样,GEC部分还好理解,为什么文本匹配部分更加庞杂。
网友评论