机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱
今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下。感觉是存在一些内在的趋势的。只是要找到一个当下切实可行又省时省力的方案好像不太容易。
论文摘要
《Information Extraction over Structured Data: Question Answering with Freebase》
本文利用查询KB替代查询数据库,可以更好的理解问题,找到对应的答案,尤其的对于查询类的问题。通过预设的问题词,对问句进行解析,并抛弃子节点词,得到依赖树,根据依赖树查找KB。
基于知识库的问答系统,有两个处理点:对问题的解析,辨别出实体,以及包含的关系;对KB的查询。其中难点在于建立问句和知识库关系的映射模型,尤其是对于open domain的问答,不能依赖与手动标注实现。问题解析有两种手段,从语义分析出发,利用句法分析,词性标注等,“理解”问句,获得实体以及实体之间的关系,但是不得不建立大量词典,然后对问句的语义进行计算求解,以期最后可以获得一个满意的答案;另一种是信息提取,不分析具体的句法,而是对句子中出现的词(实体)进行分析求解,复杂点在于利用贝叶斯等分类器对问句进行分类找出要求解的答案节点。需要大量的训练数据
《Question Answering with Subgraph Embeddings》
本文跳出传统语义分析的范畴,从构造低维向量空间的角度进行问题求解,基于词向量的启发,将问句和答句根据每个词的向量计算得出句子对应的向量,应该存在一个函数可以使得问题答案对q,a的匹配值达到最大:S(q,a)
分两步进行问答求解:
1、使用大量样本数据训练模型,确定S(q,a)
2、根据问句中的实体,获取实体相关的subgraph,并组装出候选答案,求argmax S(问句,候选答案)
训练模型上可以使用神经网络训练,该方法的前提是答案向量与问题向量经过某种映射以后,在一个多维空间内是十分靠近的
《Question Answering over Freebase with Multi-Column Convolutional Neural Networks》
本文应用卷积神经网络生成问题向量q,如上图所示,使用卷积神经网络的多层代表问题的不同信息,并与答案集合求解,最终的得出问题答案的匹配值。
《Semantic Parsing via Staged Query Graph Generation:Question Answering with Knowledge Base》
1.考虑到传统语义解析与KB结合不够紧密,作者提出了查询图的概念
2.查询图的构造由实体链接系统确定主题词,核心推导链,增加约束和聚合这几种操作构成
3.对于查询图的每一个状态,我们都用一个奖励函数对它进行评价,使用优先队列进行启发式搜索构建查询图
4.通过查询图的实体链接得分、核心推导链三个特征、约束聚合手工特征以及全局特征作为输入向量,训练单层神经网络作为排名器得到奖励函数
5.核心推导链使用卷积神经网络(letter-trigram作为输入)进行训练,并且ensemble了三个不同数据训练的模型
(以上内容为摘抄)本文基本思想是结合了传统语义分析和神经网络的方法,语义分析为主导,在获取相应答案pattern的步骤中使用CNN选定推导链,并使用诸如限定词、约束聚合对答案进行规范,获得了比较显著的成果。
《DYNAMIC COATTENTION NETWORKS FOR QUESTION ANSWERING》
这篇文章使用了注意力机制,在斯坦福的问答测试集上取得了80.1%的好成绩(人工准确率86%)。不过因为斯坦福数据集提供了问题和答案的候选段落,与要做的知识库貌似没有很好的连接。论文方法主要有两点,一是将问题和答案段落配对,经过向量变换以后,通过注意力机制对答案和问题都配置权重,根据权重和问题答案的向量计算结果,输入LSTM网络得出最佳答案段落。另一个是在LSTM中使用提出的HMN方法从段落中选取答案字段,予以输出。论文所提方法可以作为参考,主要问题在于训练样本并不具有通用性,答案一定要在候选答案中存在才可以,如果可以替换为知识网络并准确选取就更好了。
这里插一个内容,记忆网络框架(摘抄):
输入模块I(Input):将外部输入转化为内部表达。我们可以把输入模块想象成人类的感知器官,接受外部的原始输入并将其转化为能够被大脑处理的生物信号。具体来说,输入模块用于将外部的输入(如自然语言句子、图片等)转化为内在的分布式表达。输入模块可以根据应用的需要选用不同的模型,诸如CNN、LSTM、bag-of-words等等。
记忆模块M(Memory):用于存储记忆。每一条记忆都是一个分布式表达向量,每一个记忆有一个索引地址号,所有记忆组成了我们的记忆模块。我们的记忆模块就像是计算机中的硬盘一样,存储着一条条的信息,每一个信息都有一个物理地址。我们可以记忆模块进行记忆的读取,修改,删除,也可以插入新的记忆信息。
泛化模块G(Generalization):根据外部输入的内在表达去更新记忆。我们可以根据新的输入对记忆模块中的每一个记忆都进行更新并增加新的记忆,也可以仅对部分相关记忆作针对性更新。最简单的方式是,直接将输入存储在记忆模块中而不对其他的记忆进行修改,即。这里是一个为输入选择记忆槽(为输入确定记忆的索引地址)的函数,在记忆存储满的时候,也可根据函数对记忆进行替换。更复杂一点,我们也可以引入一些遗忘机制等等。
输出模块O(Output):根据外部输入的内在表达去选择记忆模块中与之最相关的记忆。该记忆也称为支撑记忆(Support Memory),即。这个选择的方式有很多,最简单的方法就是将和记忆向量投影到同一个向量空间中,通过比较相似度得分(cosine,点乘等)来选择最相似度得分最高的记忆作为输出。当然我们也可以根据应用的需要,选择多个记忆作为输出。选择多个记忆的方式也有很多种,最简单的方法就是选择相似度得分最高的k个记忆作为输出,论文中作者提出了另一种方法,先选择得分最高的作为第一个输出,再选择与得分加上与得分 最高的记忆作为第二个输出,以此类推(这种方法更像是在进行推理,先将输入作为推理的支点,选择与输入最相关的记忆作为第一条线索,再根据输入和第一条线索去确定下一条线索)。
回答模块R(Response):根据输入的内在表达和输出模块提供的记忆,输出满足应用需要格式的结果。它就相当于encoder-decoder模型中的decoder部分,将和作为输入,根据应用的需要使用不同的模型输出最终的结果(分类器、语言模型、RNN、CNN等)。
《End-To-End Memory Networks》
论文提出了一种带有注意力的改进的memery network,然而只是提出了一种思想,从实验结果看,并没有提高业内的state of art。提出的思想比较适合KB_QA,并没有神经网络中的那么多结构,只有两部分组成:记忆部分和RNN神经网络。先将知识进行向量化存入memory中,这些知识可以来自于一段话,也可以是一段对话,然后将问题和对应知识进行计算,并加入注意力权重,结果通过softmax函数进行排序,得到隐层输出,再将T2时间的输出和T1时间的输出进行相加输入RNN的下一个环节中,以此循环计算,最后通过矩阵W变化得出真正的输出。直观的理解可以是对问题答案组合进行多次注意力解析,并且在每次解析期间都从记忆库中读取知识加入其中。
《A Knowledge-Grounded Neural Conversation Model》
论文提出了一种将seq2seq模型与事实相结合的方法,先使用seq2seq中的encoder计算出问句以及对话历史S(没有使用LSTM,而是使用了GNU,好像业内都喜欢用GNU),然后将事实通过关键词检索或者命令词提取技术,获取出相关的事实f1,f2......然后通过计算S和f1的结合概率,输入decoder中,输出对应回答,理论上可以计算出跟概率最大事实相关的回应。 论文进行了两种模型的训练,一种不带事实的模型训练,一种带有事实模型的训练;奇妙的是,确定最终模型以后,可以通过修改事实库,以达到动态扩展模型的作用。想法比较新颖,但是回应的准确率相比于seq2seq并没有显著的提升,事实相关性有所提升。若要应用与我们自己的系统,可以再思考思考如何将问句和知识结合起来。 还有一个思想是:通过大量的微博(twitter)语料获取回答句式,然后通过事实获取回答信息,这一点比较好。有了构建生成式机器人的可能。
《Sequence to Backward and Forward Sequences: A Content-IntroducingApproach to Generative Short-Text Conversation》
一种根据问题和语料库,预测答案关键词的方法,使用了朴素贝叶斯模型,预测一个关键名词
《Deep Reinforcement Learning for Dialogue Generation》
本篇论文提出了使用RL来指导SEQ2SEQ模型的输出,以防止输出的无信息性和重复,不连贯。主要思想可以说是利用seq2seq的pre-train作为reward函数,对候选答案进行重新奖励排列,得出更好的结果。其中生成r2的时候又使用了一种RL模型来确定后验概率,从而指导奖励函数的生成。可以说这是一种将增强学习与SEQ2SEQ相结合的思路,具体代码地址:
https://github.com/jiweil/Neural-Dialogue-Generation
https://github.com/Marsan-Ma/tf_chatbot_seq2seq_antilm
《Personalizing a Dialogue System with TransferReinforcement Learning》
从该图中,可以看出给予POMDP的强化学习聊天系统是基于状态机的一种策略学习,首先系统中有很多基本状态,根据回答或者制定的策略选择状态迁移,从而推导进行对话。
本文是对基于POMDP对话框架的一种扩展,以前都是基于通用知识进行训练,缺乏提供个性化的服务。本文通过将通用知识训练的模型迁移到个性数据上训练,得出具有个性服务的对话系统。从实验例子看,有效减少了互动对话的轮数,比一般任务型对话有更好的效果。算法上使用M;w;wp作为共享变量,从通用数据训练得出,pu根据少量具体用户数据训练得出,最后带入公式中求出整体的Q_learning函数。Wp应该是根据数据得出的具体用户的Q函数参数,相对于通用知识的W,只是文中没有给出。所以这个系统主要还是针对有记录的用户存在的个性化策略。
《Latent Intention Dialogue Models》
文章运用双向LSTM和RNN,CNN对对话历史进行处理,计算得出对话的潜在意图,根据搜索KB取出知识,利用增强学习策略生成回复内容,并使用生成模块最终生成回复,涉及较多内容,从实验结果看比较理想,在任务驱动型对话中有显著效果。
《End-to-End Task-Completion Neural Dialogue Systems》
《A User Simulator for Task-Completion Dialogues》
https://github.com/MiuLab/TC-Bot
与《End-to-End Task-Completion Neural Dialogue Systems》叙述的是相同的内容,源程序相同,这篇更偏向于代码实现。代码提供了一个simulator user框架,定义好任务相关的几个状态以后,根据状态进行模拟对话,用于强化学习训练。通过NLU理解输入语句,转化为槽位表示的形式,进行策略学习,输出槽位显示的系统回复,然后通过NLG生成回答。这里面 NLU和NLG都可以使用深度学习的方法,策略学习本文中使用的是强化学习。这样的好处是可以避免编写规则,根据定义的状态和模拟策略定制化对话系统,完成既定任务。缺点是功能可能单一,不具备易于扩展功能的条件。但是相比于广域seq2seq的训练,似乎更接近于可实现,效果可控。
《End-to-End Memory Networks with Knowledge Carryover for Multi-Turn Spoken Language Understanding》
(code:https://github.com/yvchen/ContextualSLU.git) 论文中部分内容摘抄:
A key component of the understanding system is an spoken language understanding (SLU) module-it parses user utterances into semantic frames that capture the core meaning, where three main tasks of SLU are domain classification, intent determination, and slot filling
Then slot filling is framed as a sequence tagging task, where the IOB (in-out- begin) format is applied for representing slot tags as illustrated in Figure 1, and hidden Markov models (HMM) or conditional random fields (CRF) have been employed for tagging [6, 7, 8].
To the best of our knowledge, this is the first attempt of employing an end-to-end neural network model to model long-term knowl- edge carryover for multi-turn SLU.
本文提出了一种将RNN和记忆网络应用于SLU模块的方法,专注于传统diag system中的意图理解和序列标注,如图所示,将历史对话作为记忆通过RNN和输入对话进行计算,并引入注意力机制得出encoding表示,作为知识o,然后使用知识o通过RNN tagger输出intent和slot信息,注意intent和slot应该是作为输出y一起处理的,形式相似于:query_slot:{name,age}, info_slot:{gentel:male,address:***}.
《SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient》
将GAN与RL相结合,在数学上有严格的推理,确实也获得了很好的结果,不过技术还不成熟,从思路上来讲是很有前途的思想。可以作为是RL在对话上应用的发展,有可能达到新的高度。继续保持关注。
更多精彩内容,机器不学习官方网站 jqbxx.com