本篇论文是2015年的IBM watson团队的。

论文地址:

这是一篇关于QA问题的一篇论文:

相关论文讲解1、https://www.jianshu.com/p/48024e9f7bb22、http://www.52nlp.cn/qa%E9%97%AE%E7%AD%94%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0     文章代码:https://github.com/white127/insuranceQA-cnn-lstm

看完第一篇的总结:

(1)写论文的过程中:

  • 摘要部分主要分为三点:

(1)将深度学习框架应用到了QA问题上

(2)构建并发布了一个新的QA语料并在保险领域引入了一个新的任务

(3)实验证明在测试集上top-1的准确率达到了65.3%

  • Introduction:

(1)背景(首先介绍主题是什么,自己实验的定义):介绍了目前的主流的人工对话系统,引出主要任务是进行答案选择和匹配。并定义自己实验的QA:给定问题q和一个答案候选池{a1....as},从中找出最佳答案ak(1<=k<=s),如果ak在q的正确答案集中(q不止一个正确答案),则认为正确,否则认为错误。可以看做一个2分类问题。匹配度最高的为最佳匹配答案。

(2) 本论文工作的初步介绍

答案候选池的构建:可以通过搜索引擎(Google或者信息检索软件Apache Lucence)

介绍本文构建的语料库(来源、规模):所有的问题和答案对都来自保险领域,并在发布的语料库1上创建了开放任务,研究人员都可以使用。其次语料库分为训练集、开发集、test1和test2.在表一中给出了数据估计。并说明是第一次发布的保险领域QA任务。

答案池的构建过程:为语料中的开发集、test1和test2中的每个问题都制定一个答案候选池。语料中共有24981个唯一答案。如果使用整个答案集作为候选池,每个问题都要和答案集里的所有答案进行比较,比较耗时。故将答案池大小设为500,将真正的答案放入答案池中,再从答案空间中随机抽取错区答案(就是负采样),直至达到500。

(3)论文结构

  • Model Description:论文的主体结构(基线系统,剩下的就是自己所要用的系统,损失函数,所有涉及到的模型结构以及图形)

所有不同学习框架的主要思想是相同的:学习给定问题和其候选答案的向量表示,并使用相似性指标去衡量他的匹配程度。

两个基线系统:bag-of-words 和IR中主流的WD(权重依赖)模型。

基于CNN的系统:采用CNN三大优点稀疏交互(过程中的输入输出非全连接)、参数共享(卷积核参数共享)和等变表示(池化)。

训练和损失函数:训练过程最小化ranking loss。具体做法是: 训练模型时每个样本包括问题Q,正确回答A+和错误回答A-。分别计算余弦距离cos(Q,A+)与cos(Q,A-)。当满足cos(Q,A+)- cos(Q,A-) < m 时,m为一阈值,说明模型不能够将A+ 答案排在足够靠前,那么进行权重更新。如果cos(Q,A+)- cos(Q,A-) >= m,不需要更新模型,更换A-回答,直到cos(Q,A+)- cos(Q,A-) < m。

为了减少运算时间,需要设置最大重选A-次数,论文中设置为50。

模型结构设置:共6种模型   结构1为Q和A分别训练自己的隐藏层、CNN层、Pooling层和最后的非线性映射,这里的激活函数选择是tanh。结构2为在隐层和CNN层时Q和A共同训练,之后再分别进行pooling、非线性映射。结构3是在结构2的基础上,最后又分别加入了一层隐藏层。结构4则是将最后一层的隐层变为二者共同层。结构5则为在结构2的CNN后面又加入了一层CNN层。结构6为在5的基础上,两层CNN的输出共同作为后面pooling层的输入

从实验结果表Table2中可以看出:结构1将问题和答案分别进行学习表示,效果比较差,并且还会同时学习双倍的参数,时间长效率低速度慢。结构2可以看出随着CNN卷积核数量的增多,效果越来越好,当达到卷积核数量为4000时,效果最佳。此外对结构2采用skip-bigram(结构2中在进行CNN卷积时,作者还使用skip-gram的方式,即当前词并不与相邻词作为整体与卷积核进行卷积,而是与再下一个词,把中间的一个词跳过,所以被称为skip-gram。)。结构3和结构4在增加隐含层后结果没提升反而降低,表明在经过卷积之后就已经学到足够的信息,没有必要再增加隐含层。结构5和6说明增加卷积层还是可以进一步提高结果的。

  • EXPERIMENTAL SETUP:通过设置不同参数,找到最佳结果;之后通过不同的相似的计算方式来进行效果比对,书写实验结果

采用word2vec进行词向量的训练,采用随机梯度下降SGD的优化方法和 l2规范式(权重0.0001,学习率0.01,判断阈值0.009),对一些超参数进行设置实验,并提出了两种新的相似度度量指标AESD和GESD

  • RESULTS AND DISCUSSIONS: (积累一些经验,结论)

自己的框架要比Baseline好;

Q和A放入统一的神经网络时效果要比分别各自的神经网络要好;

CNN已经获取了足够的特征,不再需要再在之后增加其他隐层;

增加CNN层数可以获取更多的特征;

增加CNN卷积核的数量可以获得更多特征;

Layer-wise supervision可以缓解神经网络的高效学习的难题(即结构6的处理方法);

skip-gram的方式在某些数据集上有些提升;

选择有效的计算相似度的方式会使得结果有所提升;

  • Related work:其实即为该研究的一些其他人的工作,深度学习CNN的应用,即为国内外研究现状。
  • CONCLUSIONS:在该部分上,其实所有做的工作取得成果在第一部分已经介绍了大部分,也就意味着和第一部分差不多

Some Thoughts:(1)QA方面论文的第一篇,时间也是2015年的论文,所提出的神经网络结构也较为简单,也没有加入RNN的部分,没有去刻画自然语言的序列特征,包括激活函数也是tanh。(自己弄一个模型,加上这个部分)

要把深度学习运用到聊天机器人中,关键在于以下几点:

1. 对几种神经网络结构的选择、组合、优化

2. 因为是有关自然语言处理,所以少不了能让机器识别的词向量

3. 当涉及到相似或匹配关系时要考虑相似度计算,典型的方法是cos距离

4. 如果需求涉及到文本序列的全局信息就用CNN或LSTM

5. 当精度不高时可以加层

6. 当计算量过大时别忘了参数共享和池化

(2)参考别的文章:

  • 字向量不是固定的,在训练中会更新。
  • Dropout的使用对最高的准确率没有很大的影响,但是使用了Dropout的结果更稳定,准确率的波动会更小,所以建议还是要使用Dropout的。不过Dropout也不易过度使用,比如Dropout的keep_prob概率如果设置到0.25,则模型收敛得更慢,训练时间长很多,效果也有可能会更差,设置会差很多。我这版代码使用的keep_prob为0.5,同时保证准确率和训练时间。另外,Dropout只应用到了max-pooling的结果上,其他地方没有再使用了,过多的使用反而不好。
  • 如何生成训练集。每个训练case需要一个问题+一个正向答案+一个负向答案,很明显问题和正向答案都是有的,负向答案的生成方法就是随机采样,这样就不需要涉及任何人工标注工作了,可以很方便的应用到大数据集上。
  • HL层的效果不明显,有很微量的提升。如果HL层的大小是200,字向量是100,则HL层相当于将字向量再放大一倍,这个感觉没有多少信息可利用的,还不如直接将字向量设置成200,还省去了HL这一层的变换。
  • margin的值一般都设置得比较小。这里用的是0.05
  • 如果将Cosine_similarity这一层换成分类或者回归,印象中效果是不如Cosine_similarity的(具体数据忘了)
  • num_filters越大并不是效果越好,基本到了一定程度就很难提升了,反而会降低训练速度。
  • 同时也写了tensorflow版本代码,对比theano的,效果差不多。
  • Adam和SGD两种训练方法比较,Adam训练速度貌似会更快一些,效果基本也持平吧,没有太细节的对比。不过同样的网络+SGD,theano好像训练要更快一些。
  • Loss和Accuracy是比较重要的监控参数。如果写一个新的网络的话,类似的指标是很有必要的,可以在每个迭代中评估网络是否正在收敛。因为调试比较麻烦,所以通过这些参数能评估你的网络写对没,参数设置是否正确。
  • 网络的参数还是比较重要的,如果一些参数设置不合理,很有可能结果千差万别,记得最初用tensorflow实现的时候,应该是dropout设置得太小,导致效果很差,很久才找到原因。所以调参和微调网络还是需要一定的技巧和经验的,做这版代码的时候就经历了一段比较痛苦的调参过程,最开始还怀疑是网络设计或是代码有问题,最后总结应该就是参数没设置好。
  • 结语:如果关注这个东西的人多的话,后面还可以有tensorflow版本的QA CNN,以及LSTM的代码奉上:)
  • 补充:tensorflow的CNN代码已添加到github上,https://github.com/white127/insuranceQA-cnn-lstm              Contact: jiangwen127@gmail.com weibo:码坛奥沙利

源代码: https://github.com/shuzi/insuranceQA.git

《Applying Deep Learning to Answer Selection: A Study And an Open Task》文章理解小结的更多相关文章

  1. (转)Nuts and Bolts of Applying Deep Learning

    Kevin Zakka's Blog About Nuts and Bolts of Applying Deep Learning Sep 26, 2016 This weekend was very ...

  2. #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)

    原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...

  3. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  4. What are some good books/papers for learning deep learning?

    What's the most effective way to get started with deep learning?       29 Answers     Yoshua Bengio, ...

  5. 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)

    转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...

  6. 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  7. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(下)

    转载:http://www.jianshu.com/p/b73b6953e849 该资源的github地址:Qix <Statistical foundations of machine lea ...

  8. Decision Boundaries for Deep Learning and other Machine Learning classifiers

    Decision Boundaries for Deep Learning and other Machine Learning classifiers H2O, one of the leading ...

  9. Rolling in the Deep (Learning)

    Rolling in the Deep (Learning) Deep Learning has been getting a lot of press lately, and is one of t ...

随机推荐

  1. Jenkins系列-Jenkins插件下载镜像加速

    可供选择的jenkins2 插件镜像列表: Jenkins 所有镜像列表: http://mirrors.jenkins-ci.org/status.html比如日本的镜像: http://mirro ...

  2. shiro学习详解(开篇)

    一.前言 要开始接触公司另外一个项目了,RX和我说了下整个项目框架的结构,其中提到权限的控制是通过shiro来处理的,对我而言又是一个全新的知识点,于是今天花了一点时间去学习shiro的使用,看了好几 ...

  3. shit antd & Merry Christmas bug

    shit antd & Merry Christmas bug https://github.com/ant-design/ant-design/issues/13098 antd 玩大了? ...

  4. overflow:scroll 在ios 滚动卡顿

    使用 -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果. 值 auto 使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止. touch 使用具有回 ...

  5. 《转》玩转图片Base64编码

    引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 编码.标题略大,不过只是希望通过一些浅显 ...

  6. 【刷题】BZOJ 3510 首都

    Description 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B国将永远从 ...

  7. jsp弹出新窗口代码

    1.最基本的弹出窗口代码其实代码非常简单: <SCRIPT LANGUAGE="javascript"> <!-- window.open (page.html) ...

  8. 题解【luogu1073 最优贸易】

    Solution 考虑原图是 DAG 时怎么做. 拓扑排序 + dp ,令 dp[i] 表示 \(1\) 到 \(i\) 的路径上最小的卖出价格.转移方程就是对每一个可以到达这个点的 dp 取个 mi ...

  9. centos上tensorflow一键安装脚本

    鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash   sudo yum install -y ...

  10. 无线局域网中RADIUS协议原理与实现

    转载自:http://blog.csdn.net/jinhill/article/details/5901042 摘要  RADIUS协议是一个被广泛应用于网络认证.授权和计费的协议.本文在介绍了RA ...