一、聊天机器人分类

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

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

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

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

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

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

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

a.    开放领域的chatbot更难实现,因为用户 不一定有明确的目标或意图。  像TwitterReddit这样的社交媒体网站上的对话通常是开放领域的 - 他们可以谈论任何方向的任何话题。 无数的话题和生成合理的反应所需要的知识规模,使得开放领域的聊天机器人实现相当困难。同时这也需要开放域的知识库作为其知识储备,加大了信息检索的难度。

b.    封闭领域的chatbot比较容易实现,可能的输入和输出的空间是有限的,因为系统试图实现一个非常特定的目标。 技术支持或购物助理是封闭领域问题的例子。 这些系统不需要谈论政治,只需要尽可能有效地完成具体任务。 当然,用户仍然可以在任何他们想要的地方进行对话,但系统并不需要处理所有这些情况 - 用户也不期望这样做。

二、聊天机器人技术之语义相似度计算

在基于检索模式的聊天机器人中,我们常需要计算问句与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的相似程度,值越大相似程度越大。

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

三、聊天机器人技术之序列标注问题

聊天机器人的生成时模型可以看成机器翻译的序列标注问题,即将问句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←]。详情请参考链接。

三、聊天机器人技术之其他问题汇总

在参加了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) + lambda*log 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)聊天机器人循环体

通常用强化学习解决,详情请看链接

聊天机器人—简介(一)相关推荐

  1. 聊天机器人简介与体验网址

    聊天机器人简介与体验网址 本文介绍ChatGPT聊天机器人和Openmao聊天机器人,都能根据聊天的上下文进行互动交流,能按用户要求回答问题.翻译等等.读者朋友,若有兴趣了解,可以试试. ChatGP ...

  2. 用深度学习构造聊天机器人简介

    聊天机器人(也可以称为语音助手.聊天助手.对话机器人等)是目前非常热的一个人工智能研发与产品方向.很多大的互联网公司重金投入研发相关技术,并陆续推出了相关产品,比如苹果 Siri .微软 Cortan ...

  3. 软工实践团队项目-智能聊天机器人简介

    "智能聊天机器人"项目 目前已确定的团队人员:张扬.俊彦.韫月.地秀.泽波.李翔.文婧.俞明.加伟(排名不分先后) 队伍已满,没有再招人的打算(#^.^#) 我们的想法 你有用过智 ...

  4. 聊天机器人发展及应用技术解析

    本文介绍聊天机器人原理及实现傻瓜式聊天机器人. 1 聊天机器人简介 维基百科 聊天机器人(也称为聊天机器,聊天机器人,Bot,IM bot,交互代理或人工对话实体)是通过语音或文本进行对话的计算机程序 ...

  5. 智能聊天机器人技术研究与应用

    文章大纲 1. 聊天机器人简介 聊天机器人进化历史 聊天机器人核心技术 2. 预训练模型与聊天机器人研究进展 transfomer 架构回顾 预训练对话模型 case 1 :个性化对话生成 case ...

  6. 【人机对话】对话机器人技术简介:问答系统、对话系统与聊天机器人

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要16分钟 跟随小博主,每天进步一丢丢 来自:AI算法之心 作者:段清华 个人主页:http://qhduan.com Github链接: htt ...

  7. AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等)、使用方法(七类任务)、案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略

    AIGC:ChatGPT(一个里程碑式的对话聊天机器人)的简介(意义/功能/核心技术等).使用方法(七类任务).案例应用(提问基础性/事实性/逻辑性/创造性/开放性的问题以及编程相关)之详细攻略 导读 ...

  8. 认知智能未来机器人接口API简介介绍道翰天琼聊天机器人闲聊机器人机器人伴侣

    最近要做一个智能音箱的项目,可是声卡一直配置不好...所以,还做个啥啊.没办法,智能退而求其次,做一个文本交互的聊天机器人管家,并给它写个界面. 用java写,然后在linux装个jdk就行了.我们这 ...

  9. 道翰天琼认知智能未来机器人接口API简介介绍认知智能机器人服务机器人聊天机器人

    "人类正从IT时代走向DT时代",随着移动互联网技术持续高速发展,海量数据计算存储.智能数据挖掘.低时延数据传送和可靠网络安全已经成为软硬件技术飞速发展的催化剂,也推动着数据中心从 ...

最新文章

  1. Apache Kylin在绿城客户画像系统中的实践
  2. 二叉排序树(c/c++)
  3. 十行代码实现网页标题滚动效果!
  4. 【QGIS入门实战精品教程】4.1:QGIS栅格数据地理配准完整操作流程
  5. sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]
  6. 统计单词数(信息学奥赛一本通-T1400)
  7. 国内外黑客居然都在这些地方聚集
  8. APP审核关于3.2.1金融资格的审核回复苹果
  9. 内幕:一个由罪犯秘密建立的“加密”手机公司
  10. GD32VF103移植SVSTEMVIEW
  11. netron工具简单使用
  12. 美团 O2O 供应链系统架构设计解析
  13. 【地球科学】常用的地理投影坐标系介绍(笔记)
  14. python背单词游戏,python背单词小程序
  15. 淘宝直通车如何打造爆款,直通车爆款秘籍
  16. 奥特曼html代码,和平精英捏脸代码奥特曼
  17. 大华摄像头java开发之抓图
  18. C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值
  19. adb shell 连接两个相同设备
  20. 计算机组成原理4小时速成:五大组成部分:运算器,控制器,存储器,输入设备输出设备

热门文章

  1. java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.
  2. 电脑排行,十大笔记本电脑排名(笔记本电脑排行前十)
  3. windows设置显示隐藏文件
  4. 听说RSI准的难以置信?
  5. console方法:
  6. 2019.03.16【NOIP提高组】模拟 B 组 电费结算(electric)
  7. 牛客小白月赛20 D.3的倍数
  8. 给出一个123 456的矩阵,输出转置矩阵
  9. 给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合
  10. 苏宁商品详情API接口(商品详情页数据接口)