《applying deep learning to answer selection:a study and an open task》QA问答模型笔记
2017-06-20 21:49
726 查看
聊天机器人本质上是一个范问答系统,既然是问答系统就离不开候选答案的选择,利用深度学习的方法可以帮助我们找到最佳的答案,本节我们来讲述一下用深度学习来做自动问答的一般方法
对于一个范问答系统,一般我们从互联网上收集语料信息,比如百度、谷歌等,用这些结果构建问答对组成的语料库。然后把这些语料库分成多个部分:训练集、开发集、测试集
问答系统训练其实是训练一个怎么在一堆答案里找到一个正确答案的模型,那么为了让样本更有效,在训练过程中我们不把所有答案都放到一个向量空间中,而是对他们做个分组,首先,我们在语料库里采集样本,收集每一个问题对应的500个答案集合,其中这500个里面有正向的样本,也会随机选一些负向样本放里面,这样就能突出这个正向样本的作用了
CNN的三个优点:sparse interaction(稀疏的交互),parameter sharing(参数共享),equivalent respresentation(等价表示)。正是由于这三方面的优点,才更适合于自动问答系统中的答案选择模型的训练。
我们设计卷积公式表示如下(不了解卷积的含义请见《 机器学习教程
十五-细解卷积神经网络 》):
假设每个词用三维向量表示,左边是4个词,右边是卷积矩阵,那么得到输出为:
如果基于这个结果做1-MaxPool池化,那么就取o中的最大值
HL是一个非线性变换g(W*x+b),P是maxpooling,T是tanh激活函数。问题Q和答案A分别通过模型,得到两个向量。最后计算两个向量的余弦距离。
模型中,Q与A共用HL变化和CNN网络模型参数。
训练时获取问题的词向量Vq,和一个正向答案的词向量Va+,和一个负向答案的词向量Va-, 然后比较问题和这两个答案的相似度,如果两个相似度的差值cos(Vq,Va+)-cos(Vq,Va-)<阈值m就用来更新模型参数,因为当cos(Vq,Va+)-cos(Vq,Va-)<m时,耗费L=max{0,m-cos(Vq,Va+)+cos(Vq,Va-)}>0,所以要更新参数让耗费变小。
cos(Vq,Va+)-cos(Vq,Va-)<m说明模型不能够将A+
答案排在足够靠前,那么进行权重更新。如果cos(Vq,Va+)-cos(Vq,Va-)>=m,不需要更新模型,更换A-回答,直到ccos(Vq,Va+)-cos(Vq,Va-)<m。
参数更新方式和其他卷积神经网络方式相同,都是梯度下降、链式求导
对于测试数据,计算问题和候选答案的cos距离,相似度最大的那个就是正确答案的预测
以下是六种结构设计,解释一下,其中HL表示hide layer隐藏层,它的激活函数设计成z = tanh(Wx+B),CNN是卷积层,P是池化层,池化步长为1,T是tanh层,P+T的输出是向量表示,最终的输出是两个向量的cos相似度
图中HL或CNN连起来的表示他们共享相同的权重。CNN的输出是几维的取决于做多少个卷积特征,如果有4个卷积,那么结果就是4*3的矩阵(这里面的3在下一步被池化后就变成1维了)
以上结构的效果在论文《Applying Deep Learning To Answer Selection- A Study
And An Open Task》中有详细说明,这里不赘述
要把深度学习运用到聊天机器人中,关键在于以下几点:
1. 对几种神经网络结构的选择、组合、优化
2. 因为是有关自然语言处理,所以少不了能让机器识别的词向量
3. 当涉及到相似或匹配关系时要考虑相似度计算,典型的方法是cos距离
4. 如果需求涉及到文本序列的全局信息就用CNN或LSTM
5. 当精度不高时可以加层
6. 当计算量过大时别忘了参数共享和池化
参见52NLP文章
insurance数据集https://github.com/shuzi/insuranceQA
方法文章
实现代码githubhttps://github.com/white127/insuranceQA-cnn-lstm
其中有cnn_theano , cnn_tensorflow , lstm_cnn_theano 三个版本的代码
语料库的获取方法
对于一个范问答系统,一般我们从互联网上收集语料信息,比如百度、谷歌等,用这些结果构建问答对组成的语料库。然后把这些语料库分成多个部分:训练集、开发集、测试集问答系统训练其实是训练一个怎么在一堆答案里找到一个正确答案的模型,那么为了让样本更有效,在训练过程中我们不把所有答案都放到一个向量空间中,而是对他们做个分组,首先,我们在语料库里采集样本,收集每一个问题对应的500个答案集合,其中这500个里面有正向的样本,也会随机选一些负向样本放里面,这样就能突出这个正向样本的作用了
基于CNN的系统设计
CNN的三个优点:sparse interaction(稀疏的交互),parameter sharing(参数共享),equivalent respresentation(等价表示)。正是由于这三方面的优点,才更适合于自动问答系统中的答案选择模型的训练。我们设计卷积公式表示如下(不了解卷积的含义请见《 机器学习教程
十五-细解卷积神经网络 》):
假设每个词用三维向量表示,左边是4个词,右边是卷积矩阵,那么得到输出为:
如果基于这个结果做1-MaxPool池化,那么就取o中的最大值
模型结构
HL是一个非线性变换g(W*x+b),P是maxpooling,T是tanh激活函数。问题Q和答案A分别通过模型,得到两个向量。最后计算两个向量的余弦距离。
模型中,Q与A共用HL变化和CNN网络模型参数。
通用的训练方法
训练时获取问题的词向量Vq,和一个正向答案的词向量Va+,和一个负向答案的词向量Va-, 然后比较问题和这两个答案的相似度,如果两个相似度的差值cos(Vq,Va+)-cos(Vq,Va-)<阈值m就用来更新模型参数,因为当cos(Vq,Va+)-cos(Vq,Va-)<m时,耗费L=max{0,m-cos(Vq,Va+)+cos(Vq,Va-)}>0,所以要更新参数让耗费变小。cos(Vq,Va+)-cos(Vq,Va-)<m说明模型不能够将A+
答案排在足够靠前,那么进行权重更新。如果cos(Vq,Va+)-cos(Vq,Va-)>=m,不需要更新模型,更换A-回答,直到ccos(Vq,Va+)-cos(Vq,Va-)<m。
参数更新方式和其他卷积神经网络方式相同,都是梯度下降、链式求导
对于测试数据,计算问题和候选答案的cos距离,相似度最大的那个就是正确答案的预测
神经网络结构设计
以下是六种结构设计,解释一下,其中HL表示hide layer隐藏层,它的激活函数设计成z = tanh(Wx+B),CNN是卷积层,P是池化层,池化步长为1,T是tanh层,P+T的输出是向量表示,最终的输出是两个向量的cos相似度图中HL或CNN连起来的表示他们共享相同的权重。CNN的输出是几维的取决于做多少个卷积特征,如果有4个卷积,那么结果就是4*3的矩阵(这里面的3在下一步被池化后就变成1维了)
以上结构的效果在论文《Applying Deep Learning To Answer Selection- A Study
And An Open Task》中有详细说明,这里不赘述
总结
要把深度学习运用到聊天机器人中,关键在于以下几点:1. 对几种神经网络结构的选择、组合、优化
2. 因为是有关自然语言处理,所以少不了能让机器识别的词向量
3. 当涉及到相似或匹配关系时要考虑相似度计算,典型的方法是cos距离
4. 如果需求涉及到文本序列的全局信息就用CNN或LSTM
5. 当精度不高时可以加层
6. 当计算量过大时别忘了参数共享和池化
模型实现
参见52NLP文章insurance数据集https://github.com/shuzi/insuranceQA
方法文章
实现代码githubhttps://github.com/white127/insuranceQA-cnn-lstm
其中有cnn_theano , cnn_tensorflow , lstm_cnn_theano 三个版本的代码
相关文章推荐
- APPLYING DEEP LEARNING TO ANSWER SELECTION: A STUDY AND AN OPEN TASK 论文阅读
- 【论文分享】APPLYING DEEP LEARNING TO ANSWER SELECTION: A STUDY AND AN OPEN TASK
- 【论文阅读笔记】Deep Learning in Medical Imaging: Overview and Future Promise of an Exciting New Technique
- [论文阅读笔记] DeepNeuron: An Open Deep Learning Toolbox for Neuron Tracing
- An introduction to variable and feature selection
- Machine Learning Foundation Lecture 02 Learning to Answer YesNo 学习笔记
- Theano-Deep Learning Tutorials 笔记:Modeling and generating sequences of polyphonic music with the RNN
- Neural Networks and Deep Learning 学习笔记(二)
- neural network and deep learning(笔记二)
- neural network and deep learning笔记(1)
- 机器学习基石笔记 Lecture 2: Learning to Answer Yes/No
- Neural Networks and Deep Learning 学习笔记(一)
- Begin to study Deep Learning
- neural network and deep learning笔记(2)
- [MOOC学习笔记]机器学习基石 Lecture02 Learning to Answer Yes/No
- 【转载】How to build and run your first deep learning network
- Facebook AI Director Yann LeCun on His Quest to Unleash Deep Learning and Make Machines Smarter
- Lecture 1 - Intro to NLP and Deep Learning
- 【Notes on Neural Networks and Deep Learning】(to be continued)
- 论文《From Facial Parts Responses to Face Detection: A Deep Learning Approach》笔记