数据驱动的多策略聊天引擎

1. 聊天引擎做什么

  聊天引擎是一款模拟人类对话或聊天的陪伴产品。接受用户的自然语言输入,返回可解释、承上启下、顺畅的自然语言句子。与问答引擎、专家系统等不同,聊天引擎重点在,不太关注如何解决用户的实际问题或者执行任务,而是关注如何能与用户进行天南地北的聊天,涉及的话题会很广,但并不需要有精准的答案,重在互动的有效性和可持续性。聊天系统在对儿童和老人的陪伴方面可以起到非常重要的作用,即便在一个以帮助用户解决实际问题或寻找精准答案的个人助手类产品中,具有开放式聊天能力也是至关重要的。这样的聊天能力,可以成为各种信息查询、任务完成等能力之间的润滑剂,很好的改善人机交互过程中的用户体验,增强助理型机器人的人性化和用户粘性。

  苹果公司于201110月随iphone4s一起发布了Siri,轰动一时,重新点燃了人们对语音助理的期望;微软中国于20145月发布了智能机器人小冰,在微信上轰动一时,遭到封杀,又再度回归,闹的风风雨雨;2014916日百度在江苏卫视《芝麻开门》节目中首次推出他们的智能机器人小度。此外小i机器人起诉苹果Siri侵权件事,不仅引起大家对智能机器人的关注,也更加关注这个领域的知识产权的积累。 通过这些发生在身边发生一件一件机器人事件,相信大家已经对聊天机器人已不再陌生了,亦或很多人已经跟他们神侃已久。

  在这个领域,阿里起步比较晚。智能语音交互团队去年年底才成立于iDST,在语音、自然语言处理、人机交互智能化等方面大力投入。其中智能聊天引擎也是我们的一个重要研发方向。到目前位置,我们已经搭建出了一套数据驱动的多策略聊天引擎,表现得比各种小X们更聪明、更机智、更受欢迎。

2. 数据驱动的多策略聊天引擎的系统架构

  我们的聊天引擎语音助手,是具有开放式聊天能力的,是具有18岁萌妹子特性的,是具有幽默智慧的,谁用谁爱的聊天机器人。那么如何做到这一点呢?

 
首先,语音助手是具有18岁萌妹子特性的,80%+的高频部分请求我们都能给出个性鲜明,人格一致的回复。通过对语音助手日志进行统计分析,我们将高频部分划分到10000+topic,每个topic都交由我们的编辑专家们编辑回复,反复确认后最后留下13种回复。此处,语音助手为了知道你说的是哪个话题,可以用上了第一招DCNN的。

 
其次,语音助手是具有幽默智慧的,你可以跟语音助手互动,一起来玩成语接龙,古诗对接等。只要你想听,语音助手可以给你讲个冷笑话、成人笑话、鬼故事等,绕口令也可以的。假如你想考察下小云数学,简单的四则运算小云还是在行的。当然你想知道元旦是什么时候,语音助手也不是不可以告诉你的。这些如你还觉得Naïve,不妨问问语音助手阿里和马云是什么关系 关系八卦是不是让你惊倒,我们可是用上了大招CFGword2vec的。

 
另外,语音助手是具有开放式聊天能力的,假如你想聊倒语音助手,请尽管放招,语音助手可以用上了必杀技LSTM,绝不想用搜索(^_^)来搪塞你的,当然有些时候你也别拿小云的话当真,你笑了语音助手也就乐了。

数据驱动的多策略聊天引擎



 
上图是语音助手的多策略聊天引擎架构图。下面将就其中用到的几个重要的技术一一介绍。

2.1 DCNN

  本文聊天引擎利用DCNNDynamic Convolutional Neural Network)来进行话题查找。DCNN对句子建模,将不定长句子s完成Embedding,进而得到固定维度的向量A。然后利用向量A与话题向量集{T}两两计算相似度,求得相似度最大的话题Ti,如若ATi间的相似度大于阈值D,则认为s属于话题Ti

数据驱动的多策略聊天引擎

  DCNN的具体实现如上图所示,最下面是input层,将输入句子s转成输入向量,经过中间两层的convolutionk-max poollingfolding后,最上面Fully connected层输出定长向量A如想深入了解算法,请参考2014ACL上的一篇文章A Convolutional Neural Network for Modeling Sentence

2.2 Word2Vec

  关系八卦,XX的好基友是谁,XXXX是什么关系,没有背景知识库怎么能知道?本文聊天引擎来告诉你,大数据是可以回答的。我们利用word2vec在大数据上做词的Embedding,进而能得到固定长度的向量W。通过向量间的距离计算可以求得到任意两词之间的距离,距离的远近即"关系"的紧密程度,相信到这大家不难理解XX的好基友是谁这个问题word2vec能回答了吧。word2vec有一个有意思的分析是 Mikolov 2013 年刚刚发表的一项发现。他发现两个词向量之间的关系,可以直接从这两个向量的差里体现出来。向量的差就是数学上的定义,直接逐位相减。比如 C(king)−C(queen)≈C(man)−C(woman)。更强大的是,与 C(king)−C(man)+C(woman) 最接近的向量就是 C(queen)。哈哈,介绍到这,"XXXX是什么关系"是否能回答,相信聪明的你也懂的。
  Word2vec
Google 2013 年年中开源的一款将词表征为实数值向量的高效工具。具体算法网上有很多介绍,在这就不赘述。 

2.3 CFG

  如上图引擎框架所示,我们在完成四则运算、时间节假日、关系八卦等解答过程中,都需要对其中的元素进行抽取。本引擎利用上下文无关语法分析器(Context-free grammar parser, CFG)来完成。CFG parser完成输入字符串到semantic frame的匹配,下图给出了关系八卦中的一个模板例子。当用户输入query刘德华和成龙是什么关系时,我们会判定为 Frame为关系八卦,arg1为刘德华,arg2为成龙。然后我们调用上面讲过的word2vec模块计算,最后回答为"刘德华和成龙的关系就好比王力宏和周杰伦的关系。

数据驱动的多策略聊天引擎

2.4 LSTM

    

  语音助手的聊天话题是开放式的,这要求聊天引擎对任意问题都能给出与当前讨论的话题相关的回复。这是一个极具挑战性的问题,在这里我们引入了生成语言的方法。这里的生成语言有别于根据模版拼接词汇的生成方法。这里的生成语言是指,使用深度学习的方法,对输入进行理解得到语义表示,然后根据语义,直接让模型生成出,模型认为能理解,承接或者回答该语义的,语言流畅的自然语言句子。生成语言方法,能接受任意(广泛主题范围的)自然语言输入,经过大量计算,会生成一句 (很可能聊天引擎数据中并没有出现过)的语言流畅且相关的输出。本文生成语言方法借鉴google发表的一篇sequence-to-sequence,下面将对该方法进行简单介绍。

  Google使用sequence-to-sequence技术在机器翻译领域取得不俗成绩,聊天机器人本质上和机器翻译问题是相似的。sequence-to-sequence将输入的问题逐词或字encode成为一个向量表示,然后再根据这个向量表示逐词或字decode成答案输出,换到聊天机器人问题上,那么encode的过程可以认为是问题理解的过程,所得到的向量是问题理解的结果,decode过程是根据问题的理解进行答案生成的过程。    

数据驱动的多策略聊天引擎

  sequence-to-sequence相对于传统方法,能从语义上对问题进行理解,并且能回答超越给定语料库范围的问题,对于相似的问题,能生成新的答案,甚至能生成不能存在于语料库的全新句子。在sequence-to-sequence的实现上,通常会使用Long Short-Term Memory (LSTM)LSTM相对于RNN更擅长记忆长距离信息。

数据驱动的多策略聊天引擎

  上图是LSTM单个Block的示意图,可以理解为传统神经网络的神经元,神经元的参数存放在上图的cell中,cell外面多出了三个门(gate),这些门并不是开关两种状态,而是01之间的取值,表示通过该门的流量大小,即表示对信息的影响程度,而各个门的取值又会受上个时刻的信息影响,如此往复。优秀的sequence-to-sequence框架,加上LSTM强大的表达能力,为高质量的聊天机器人的实现,提供了新的方向。本文正是用LSTM来生成语言。

3. 实验效果




  下图列出的是语音助手的真实用户的聊天片段。语音助手的聊天能力很不错,有没有哇^_^

数据驱动的多策略聊天引擎
        由于聊天的话题广泛,输出千变万化,所以并没有很好的指标来衡量系统的好坏,所以本文采用AB测试的方式,与业界各种智能小X们做对比。测试语料由多种类型构成,如日常寒暄,广泛话题聊天,带问答成分的聊天等。在评测集中,我们的聊天引擎表现不俗。

4. 总结与展望

  智能机器人是一个充满了机会和挑战的领域,且极其可能成为移动端的一个重要入口,而聊天引擎是智能机器人的一个重要组成部分。智能聊天机器人语音助手是个一个多策略融合的聊天引擎,引擎中不同的方法和层级,相互配合来解决实际的聊天问题,语音助手的聊天引擎目前已经能表现出不错的聊天效果,但仍有许多不足之处,路还很长,还得踩稳每一步继续迷雾中向前探索。

上一篇:程序员最重要的能力是什么?


下一篇:[leetcode/lintcode 题解] 算法面试真题:拿走瓶子