怎样让聊天机器人读懂对话历史
人工智能现在的火热程度大家有目共睹,凯文凯利在《必然》中预测未来时代的人工智能可能会重新定义人类的意义,但时下的人工智能发展水平显然还没有大家想象得那么美好,仍然需要我们不断地探索。目前众多研究人员正深耕其中,作为其中代表的聊天机器人(Chatbot),已然成为科研界研究的热点。
通常来说聊天机器人实现方式有两种:一种是基于生成式,即机器人“自己说话”,一个字一个字创作出回复语句来。另外一种是基于检索式,即机器人“转发”别人的话。从互联网大家的话语中寻找到合适的回答予以转发。
现有的生成结果由于技术所限,或多或少都存在语句不流畅的问题,但能够做到“有问必答”偶尔还能蹦出“彩蛋”。检索的模型一般流畅性方面无须担心,不过随着目前网络资源的日益丰富,语料规模也越来越大,如何从众多语句中选择合适的句子作为回复是检索式聊天机器人的核心问题。
虽然目前市场上的聊天机器人众多,但我们见到的那些貌似都不是那么聪明。最直观的一个体现就是前后不连贯,上下难衔接,因此在进行检索的时候考虑历史信息则显得尤为重要。那么如何让机器人理解对话历史信息从而聪明地进行回复呢?微软亚洲研究院的研究员们提出了一个模型Sequential Matching Network(SMN)。相关论文的作者吴俣谈到“SMN模型可以让聊天机器人准确的理解当前和用户的对话历史,并根据历史给出最相关的回复,与用户进行交流,达到人机对话的目的。”
但这在实现的过程中也遇到不少难点,“精准计算聊天历史和候选回复的语义相似度十分困难,主要的挑战有两个方面:
由于聊天历史信息繁多,如何将历史中重要的词语、短语以及句子选择出来,并通过这些重要部分刻画聊天历史,是一个亟待解决的问题;
如何对聊天历史中的各轮对话进行建模,如何判断对话历史中的跳转,顺承等关系,也是一个棘手的问题。” 那么论文作者提出的SMN模型又是如何解决这两个问题的呢,接下来我们将为您解读。
图1:SMN网络架构
SMN模型一共分为三层。第一层为信息匹配层,对之前的历史信息和待回复的句子进行匹配度计算:同时进行词语(embedding向量)和短语级别(GRU表示)的相似度计算。然后再把这两个矩阵分别作为卷积神经网络的一个channel,利用CNN的max-pooling进行特征抽象,形成一个匹配向量。第二层为匹配积累层,利用一个GRU神经网络,将每一句话和回复所计算出的匹配信息进一步融合。第三层为匹配结果预测层,利用融合的匹配信息计算最终的匹配得分,在预测时他们使用三种策略,分别是只利用GRU2最后一个隐藏层(SMN_last),静态加权隐藏层(SMN_static),和动态加权隐藏层(SMN_dynamic)。在进行检索的时候,他们将最后一句的信息结合上文历史信息中的5个关键词(历史信息中用tf-idf进行筛选,选择Top5关键词)在系统中进行检索,然后用上述SMN网络对候选结果打分从而选出回复句。
作者分别在Ubuntu语料(大型公开计算机相关求助与解答语料)和豆瓣语料(作者从豆瓣小组的公开信息中爬取并在论文中公布)上进行了实验,分别以Rn@K和MAP、MRR、P@1为评价指标,取得的结果均为目前最好。
作者表示“SMN不同以往的模型,第一步不进行上下文的建模学习,而是让每句话和回复进行匹配度计算,这样可以尽可能多的保留上下文的信息,以避免重要信息在学习上下文的向量表示时丢失。而且SMN在对上下文句子关系建模时,考虑了当前回复的影响,使得回复成为一个监督信号,这样可以更准确的对上下文历史进行建模。”并且吴俣向我们透露“据我们所知,我们公布的豆瓣语料是第一个人工标注的中文多轮对话语料。”
在谈及目前的方法还有哪些不足之处时,作者表示“目前我们的检索方式有时找不到正确的候选句,所以第一步的检索方法还有待改善,另外虽然我们的模型可以建模当前回复和历史信息的关系,但还是无法避免一些逻辑上的问题,不过这也是我们未来工作的重点,我们将继续提高候选回复在逻辑上的连贯性”,让我们共同期待他们的未来工作。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%