事隔许久,又要拾起读论文的这项长期运动来了。这次入坑的是QA,选择的这篇论文是公司老大偶尔发现的该数据集的代码一起讨论,于是为了不胡说八道,便对代码的论文来review一下。
-1. 论文地址
0. Abstract
一般而言,摘要里面的主要内容分为两点,分别是我做了什么,取得了什么成果。
Abstract
- 我做了什么?(划重点)
- 深度学习框架用到了QA上
- 构造了一个新的QA语料库,且在保险领域引入了一个新的QA任务。
- 成果? top-1 准确率高了
1. Introduction
回忆起我们自己写论文的时候,在introduction会写什么?我们来数一数。
- 背景
- 国内外的发展情况
- 应用到的技术
- 本论文工作的初步介绍
- 论文的结构
- ...
在背景当中作为QA领域的入门人士,最想了解的必然是什么是QA,这一部分作者就告诉了读者他定义的QA是什么
什么是QA
在本文当中,QA就是针对每一个question q,从candidate pool中挑选出最为匹配的答案的过程。之后,根据如此定义,QA问题即可视为一个二分类的问题,即q与a匹配还是不匹配。
在之后的部分当中,作者介绍了本文的工作之一,自己构建的corpus,包括corpus的规模、缺陷以及本文采用语料库的测试规模等等。
紧接着,就是本文的结构。通过论文的结构,读者可以再一次清晰的厘清论文的整体架构。
论文架构
2. Model Description
接下来的部分是论文的主体结构。
baseline
一种是使用bag-of-words的方式进行word embedding,另一种是IR中的weighted dependency model(WD)。IR并不是很了解,有空补这个大坑。
CNNs-based System
这一块,论文总结了CNN用于QA系统的三大优点,分别为sparce interaction,parameter sharing以及equivariant representation,论文里面对这三点进行了详细的解释。并且在下面通过一个例子,来解释cnn是怎样与词嵌入之后的向量进行运算的过程。
CNN运算的详细过程
这个过程广泛应用于使用cnn来做自然语言处理的各种模型当中,所以详细解释一下。
在公式(1)的左边3x4的矩阵中,每一列的向量即为某个字或者词的向量,如(我,[w11, w12, w13]),在这里“我”用这个3维向量表示,所有这个矩阵代表即代表着的就是这几个字或者词组成的句子,然后使用右矩阵的特征核对左边句子向量每两个相邻词进行卷积运算,即是对句中的bigram进行卷积,得到的3维向量使用1-MaxPooling得到该句子的唯一输出。
Training and Loss Function
Loss Function
对于每一个问题Q,存在一个正例答案A+和一个从候选池里面sample出来的负例答案A-,深度学习的框架来生成这三者的向量表示VQ、VA+、VA-,得到这三者之后通过求其余弦相似度来与阈值m相对比。
公式
当二者的差值小于m时,此时的正例答案的词向量并不能满足要求要求,通过网络来更新参数,只有二者的差值大于等于m的时候。当前pair下,三者的向量均为可满足的。此时再从候选池当中选择另一个负例来计算,以此类推,当达到了所选对单一问题所选负例的样本数时,该问题情况下的参数才完全确定。公式3的hinge loss函数即为当其差值小于m时候,需要将其最小化的函数。
Architectures
接下来是本文的重点,即网络结构。在本文中,作者共提出了6种网络结构。分别如下:
模型结构1-4
结构1为Q和A分别训练自己的隐藏层、CNN层、Pooling层和最后的非线性映射,这里的激活函数选择是tanh。
结构2为在隐层和CNN层时Q和A共同训练,之后再分别进行pooling、非线性映射。
结构3是在结构2的基础上,最后又分别加入了一层隐藏层。
结构4则是将最后一层的隐层变为二者共同层。
模型结构5-6
结构5则为在CNN后面又加入了一层CNN层。
结构6为在5的基础上,两层CNN的输出共同作为后面pooling层的输入。
在进行CNN卷积时,作者还使用skip-bigram的方式,即当前词并不与相邻词作为整体与卷积核进行卷积,而是与再下一个词,把中间的一个词跳过,所以被称为skip-bigram。
以上就是作者尝试使用的6种结构,通过论文中给出的实验结果,当使用结构2,隐层的神经元数200,卷积核为4000个时,取得了最佳效果。下一部分的实验部分,作者使用了不同的计算相似度的方式来进行效果对比,具体实验结果在论文中有,就不一一赘述了。
3 .Results and Discussions
在这个部分,作者得出了如下结论:
- 深度学习的框架比baseline要好(如果效果连baseline都比不过,估计也不会选过来当baseline把。)
- Q和A放入统一的神经网络时效果要比分别各自的神经网络要好。
- CNN已经获取了足够的特征,不再需要再在之后增加其他隐层。
- 增加CNN 滤波器的数量可以获得更好的效果层数。
- 增加CNN的层数可以获取更多的特征。
- Layer-wise supervision可以缓解神经网络的高效学习的难题(即结构6的处理方法。)
- skip-bigram的方式在某些数据集上有些提升。
- 选择有效的计算相似度的方式会使得结果有所提升。
下一步部分为Related work,其实即为该研究的一些其他人的工作,即为国内外研究现状。
4. Conclusions
在该部分上,其实所有做的工作取得成果在第一部分已经介绍了大部分,在此也不一一赘述了。
5. Some Thoughts
这算是我看QA方面论文的第一篇,时间也是2015年的论文,所提出的神经网络结构也较为简单,也没有加入RNN的部分,没有去刻画自然语言的序列特征,包括激活函数也是tanh。当然由于时间原因,有其局限性。这是复坑的第一篇论文,详细的把所有部分过程都记录下来,方便以后review。
6 Code
To be continued.
个人公众号,分享所思所想
网友评论