《applying deep learning to answer selection:a study and an open task》QA问答模型笔记
来源:互联网 发布:软件学院到湖湘公园 编辑:程序博客网 时间:2024/06/05 11:35
聊天机器人本质上是一个范问答系统,既然是问答系统就离不开候选答案的选择,利用深度学习的方法可以帮助我们找到最佳的答案,本节我们来讲述一下用深度学习来做自动问答的一般方法
语料库的获取方法
对于一个范问答系统,一般我们从互联网上收集语料信息,比如百度、谷歌等,用这些结果构建问答对组成的语料库。然后把这些语料库分成多个部分:训练集、开发集、测试集
问答系统训练其实是训练一个怎么在一堆答案里找到一个正确答案的模型,那么为了让样本更有效,在训练过程中我们不把所有答案都放到一个向量空间中,而是对他们做个分组,首先,我们在语料库里采集样本,收集每一个问题对应的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》QA问答模型笔记
- APPLYING DEEP LEARNING TO ANSWER SELECTION: A STUDY AND AN OPEN TASK 论文阅读
- 论文笔记《HyperFace: A Deep Multi-task Learning Framework ...》
- A Guide to Deep Learning
- A Trip To Deep Learning
- 笔记——TensorFlow and deep learning, without a PhD
- 12 papers to understand QA system with Deep Learning
- 12 papers to understand QA system with Deep Learning
- An Introduction to Variable and Feature Selection
- Deep Learning for Content-Based Image Retrival:A Comprehensive Study 学习笔记
- Deep Learning for Content-Based Image Retrival:A Comprehensive Study 论文笔记
- An Introduction to Deep Learning (in Java)
- CNN QA(Question and Answer)问答的theano和tensorflow代码
- Deep Learning Study Materials
- The development and prosperous of deep learning theory applying in computer vision(Image part)
- TensorFlow and deep learning,without a PhD
- 模型加速:WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Deve
- [Java] Java中的变长参数的使用
- bzoj1819: [JSOI]Word Query电子字典
- 设计模式->行为型模式->责任链模式
- pgpool3.2.9中编译 pgpool-walrecrunning函数出错
- html5视频video标签的使用格式和属性
- 《applying deep learning to answer selection:a study and an open task》QA问答模型笔记
- Cookie
- Java Web架构知识整理——记一次阿里面试经历
- MySQLdump数据库复制到另一台机器
- LeetCode二叉树的层序遍历的输出
- (二)iOS Core Bluetooth 蓝牙 “外设模式”
- 5.元组
- VS中调用libsvm的步骤
- 自定义string