聊天机器人

1、聊天机器人分类
(1)按功能分类可分为:问答型聊天机器人、任务型聊天机器人、闲聊型聊天机器人。算法

      实现不一样功能的聊天机器人所用技术也不尽相同,例如在作问答型聊天机器人时,咱们须要提取问句中的焦点词汇,以此去三元组或知识图谱中检索,且为了提升检索的精度,经常须要对问句和关系进行分类操做。可是对于闲聊型聊天机器人则能够直接将其当作序列标注问题处理,将高质量的数据丢进深度学习模型中进行训练,最终获得目标model。数据库

(2)按模式分类可分为:基于检索模式和生成式模式。网络

a.    基于检索的模型,它使用预约义响应的数据库和某种启发式推理来根据输入和上下文选择适当的响应。换句话说就是构建FAQ,存储问题-答案对,以后用检索的方式从该FAQ中返回句子的答案。  这些系统不会产生任何新的文本,他们只是从固定的集合中选择一个响应。这种方法有明显的优势和缺点。 因为使用手工打造的存储库,基于检索的方法不会产生语法错误。 可是,它们可能没法处理没有预约义响应的场景。 出于一样的缘由,这些模型不能引用上下文实体信息,如前面提到的名称。框架

b.     生成式模型,这种方法要更难一些,它不依赖于预约义的响应,彻底从零开始生成新的响应。 生成式模型一般基于机器翻译技术,但不是从一种语言翻译到另外一种语言,而是从输入到输出(响应)的“翻译”。ide

这方法有明显的优势和缺点。它能够引用输入中的实体,给人一种印象,即你正在与人交谈。 然而,这些模型很难训练,并且极可能会有语法错误(特别是在较长的句子上),而且一般须要大量的训练数据。函数

(3)按领域分类可分为:开放领域和封闭领域。学习

a.    开放领域的chatbot更难实现,由于用户 不必定有明确的目标或意图。  像Twitter和Reddit这样的社交媒体网站上的对话一般是开放领域的 - 他们能够谈论任何方向的任何话题。 无数的话题和生成合理的反应所须要的知识规模,使得开放领域的聊天机器人实现至关困难。同时这也须要开放域的知识库做为其知识储备,加大了信息检索的难度。优化

b.    封闭领域的chatbot比较容易实现,可能的输入和输出的空间是有限的,由于系统试图实现一个很是特定的目标。 技术支持或购物助理是封闭领域问题的例子。 这些系统不须要谈论政治,只须要尽量有效地完成具体任务。 固然,用户仍然能够在任何他们想要的地方进行对话,但系统并不须要处理全部这些状况 - 用户也不指望这样作。网站

2、聊天机器人技术之语义类似度计算
       在基于检索模式的聊天机器人中,咱们常须要计算问句与FAQ中的问题集合的类似度,现根据本身的经验介绍几种文本类似度计算的方法:翻译

(1)最长公共子序列

       该方法思路较为简单,直接使用最长公共子序列算法,设字符串A长度为L1,字符创B长度为L2,它们的最长公共子序列为lcs,那么这两个字符串的类似度的度量为sim=2*lcs/(L1+L2)。

(2)向量类似度计算

        这种方法思路一样较为简单,将两个字符串进行分词转换成空间中的向量点,计算两个文本的余弦类似度或欧氏距离便可。

(3)编辑距离

       编辑距离是两个字串之间,由一个转成另外一个所需的最少编辑操做次数。详情能够参考连接。

(4)CNN计算文本类似度

a.     为何用cnn进行文本类似度计算

       这是由于传统文本类似度算法,侧重于文本自己的类似度计算,所以须要大量的归一化的过程,例如中文数字和阿拉伯数字的归一化,中英文 单位的归一化(例如kg和千克)。可是即便经过归一化的方法,仍然有不少语义类似文本没法经过这种方法获得满意的结果。好比两道数学题, 题1 = '一个苹果+二个苹果等于多少个苹果?', 题2=‘一个香蕉+二个香蕉等于多少个香蕉’,显然这两道题语义是高度接近的,可是用传统的文本类似度计算方法,计算获得的类似度是很是低的,这不能知足现代互联网或其余领域对文本语义类似度任务的须要,因而须要使用cnn和词向量的方式来计算文本语义类似度,这是由于词向量的固有特性。换言之,文本类似度计算不只仅计算两个字符串在物理意义上的类似度,还计算文本的语义类似度,而这时由于词向量固有的特性。

       简要介绍下上面的图,第一层数据输入层,将文本序列展开成词向量的序列,以后两个不一样的输入流 ,这里由于有两个输入(字符串A和字符串B),垂直方向则放置了2个彻底同样的层组合(卷积层、激活层、池化层的组合)。以后链接全链接层和激活层,激活层采用sigmoid并输出该文本属于某类的几率,这个输出的值是个0-1之间的浮点数,该值表明 文本A和文本B的类似程度,值越大类似程度越大。

       全链接层的目的是什么呢?由于传统的网络咱们的输出都是分类,也就是几个类别的几率甚至就是一个数--类别号,那么全链接层就是高度提纯的特征了,方便交给最后的分类器或者回归。

3、聊天机器人技术之序列标注问题
       聊天机器人的生成时模型能够当作机器翻译的序列标注问题,即将问句encode以后获得隐状态h,将这个隐状态做为decode的输入,最终返回问句的答案。下面介绍一下seq2seq的原理,该模型最先出如今2014年发表的论文Sequence to Sequence Learning with Neural Networks。模型图: :

       能够看到该模型从输入到输出有一条完整的流,:ABC为encoder的输入,WXYZ为decoder的输入。将encoder最后获得的隐藏层的状态ht输入到decoder的第一个cell里,从总体上看,从输入到输出像是一条“线性的数据流”。本文的论文也提出来,ABC翻译为XYZ,将encoder的input变为“CBA”效果更好。即A和X的距离更近了,更有利于seq2seq模型的交流。

        具体来讲,encoder的过程以下图,是基于LSTM的,固然也能够基于RNN。

decoder的阶段:

       获得encoder的最后一个时间步长的隐层ht之后,输入到decoder的第一个cell里,而后经过一个激活函数和softmax层,获得候选的symbols,筛选出几率最大的symbol,而后做为下一个时间步长的输入,传到cell中。(即当前的输出做为下一个状态的输入)这样,咱们就获得了咱们的目标(1)。

seq2seq with attention

    咱们前面提到,距离decoder的第一个cell越近的输入单词,对decoder的影响越大。但这并不符合常理,这时就提出了attention机制,对于输出的每个cell,都检测输入的sequence里每一个单词的重要性。即论文NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE。attention在NMT基于seq2seq的改进模型再进行改进,原理以下:

      上图中,encoder和decoder都发生了变化。首先说encoder,使用了双向RNN,由于但愿不只能获得前向的词的顺序,还但愿可以获得反向的词的顺序。使用hj→hj→表明hj前向的隐层状态,hj←hj←表明hj的反向隐层状态,hj的最终状态为将二者链接(concat)起来,即hj=[hj→;hj←]hj=[hj→;hj←]。详情请参考连接。

3、聊天机器人技术之其余问题汇总
        在参加了2018中文信息学会ATT前沿技术暑期班时,有幸听到了香侬科技的李纪为老师的讲座,现就讲座内容作简单的整理:

(1)针对于检索模型的聊天机器人,当FAQ中没有合适的答案,咱们返回的是FAQ中与问句最相近问句-答案对中的问句,而不是答案,这样作的目的是为了从提问者处获得更多的问句信息,便于返回给其正确的答案。

(2)互信息解决泛化回答,当用seq2seq训练聊天机器人模型的时候,会产生不少无聊的信息,其缘由多是训练预料多为电影对话集合,质量不高。例如

机器总会回答一些“万能文本”,不利于聊天的开展,解决这些问题,人为添加规则的效果不大,现阶段大多用强化学习来解决这一痛点,也就是开放域多轮对话中每一轮回复的选择,不只须要考虑是否可以有效回复当前输入,更须要考虑是否有利于对话过程的持续进行,让聊天持续更久一些,咱们能够采用互信息的方式来解决这一痛点。

        第一种思路,seq2seq框架解决。改变在于,从传统的最大似然法的优化目标函数(^R = arg max_R{log p(R|M)})改成最大互信息的目标函数(^R = arg max_R{(1-lambda)log p(R|M) + lambdalog p(R|M)}),其中R和M分别表明Response和Message。新的目标函数除了最大化从Message生成Response的几率,也加入了反向优化目标,即互信息,这个目标函数不只要考虑哪一个R出现几率更大也要考虑M和R的密切相关,从而下降常见回答的生成几率【仍是得实际看看效果】。

(3)用户一致性问题(一样的问题,不一样的回答),

       对于个性化问题好比爱好,年龄可能屡次提问回答不一样,这就是个性信息的一致性问题。经典的seq2seq模型训练的聊天机器人就有这样的问题,由于seq2seq模型训练用的是单句的Message和单句的Response的映射关系,没有统一维护个性信息。此外,每一个用户喜欢的聊天机器人的聊天方式可能不一样,也就是说不一样个性的用户可使用与之聊天方式相似的聊天助手。

       一种思路,seq2seq的结构,可是每种身份对应一种word embedding,把聊天助手的个性信息导入到解码decoder的过程当中(每一个t时刻,LSTM除了标准的输入,也将身份个性化的word embedding信息输入,获得的生成结果就会倾向于符合身份特征的个性化信息。

        总之,核心思想是把个性信息在decoder阶段加入体现出来,维护个性一致。

(4)问句长链接

       咱们回答一个问句的时候,可能须要考虑其上面n次交互信息,那么这就须要神经网络模型可以记录其历史问答信息。解决这一问题的常见思路是在seq2seq模型中,加入Attention机制。

(5)聊天机器人循环体

相关文章
相关标签/搜索