讲堂周明:自然语言对话引擎

图灵汇官网

“微软AI讲堂”是我们近期推出的系列活动之一,旨在通过多样化的形式如讲座、分享和讨论等,走进校园,传递知识,普及科学,揭开人工智能的神秘面纱。

上周,微软AI讲堂首次活动在清华大学举行。此次活动聚焦于自然语言理解方向,邀请了清华大学计算机科学与技术系教授、党委书记孙茂松老师和微软亚洲研究院副院长周明博士,两位在自然语言处理领域具有深厚造诣的专家,从各自的专业角度进行了分享。

今天我们首先来聆听微软亚洲研究院副院长周明博士关于自然语言聊天、问答和对话的精彩演讲。或许你能在其中找到未来人机对话的新灵感!

以下是周明博士演讲的主要内容(经过适当精简):

非常荣幸能来到微软AI讲堂清华大学站。我们做理工科的学生往往擅长纯技术,但科技与人文的结合同样充满趣味。希望同学们在参与编程比赛时,能够大胆创新,提出一些新颖的想法,超越前辈,做得更好。

今天我将介绍自然语言对话的相关内容。微软小冰就是一个模拟人机对话的例子。电脑接收文字、图像或语音信息,识别内容,然后给出相应的回应。这些回应有时显得十分自然,让人感觉仿佛电脑背后真的有人在对话,但有时候也会不尽人意。这正是我们希望通过编程比赛鼓励大家共同参与,推动人机对话技术发展的原因。

我们团队一直在微软致力于自然语言人机对话的研究,并为微软小冰提供了关键的自然语言处理技术。接下来我将概述人机对话的机制,希望能对你有所帮助。

人机对话可以分为三个层次:聊天、问答和对话(即针对特定任务的对话)。例如,当你进入商店时,售货员可能会说:“你好!”你回应:“你好。”接着她会问:“你想看看什么?”你说:“我想买两包方便面。”她再问:“哪种牌子的?这款三块钱一包,那款五块钱一包。”你说:“那要三块钱一包的吧。”她说:“好的,你用支付宝还是微信付款?”你说:“微信。”她说:“好的,这是你要的东西。”

值得注意的是,在我们日常生活中经常发生的对话中,实际上包含了三种基本的人类智力活动:聊天、问答以及面向特定意图的对话。聊天通常没有太多实质性内容,主要是为了拉近人与人之间的关系;问答则是为了获取信息;而面向特定意图的对话则围绕着明确的目标展开。例如,售货员知道你的意图是购买方便面,因此围绕这一意图进行有针对性的对话。最终,你完成支付,售货员将方便面交给你。这三项技能是我们在研究人机对话时最为重要的三项技能。

近年来,深度神经网络逐渐取代了传统的统计机器学习方法,成为主要的研究方向。如今,自然语言处理技术已经全面转向深度学习网络,我们的对话系统也广泛使用了这一技术。因此,首先让我来介绍一下深度学习网络的基本概念。

深度学习网络通常包含一个输入层、一个输出层以及若干个隐藏层,这些隐藏层通过不同的权重连接。当输入数据通过这些层时,根据神经网络中的权重逐步推进,最终产生输出结果。在训练过程中,有许多样本数据可供使用,输入与输出之间存在对应关系。当输入数据通过神经网络时,如果结果不符合预期,可以通过反向传播算法调整参数,直至网络趋于稳定,从而达到一定程度的智能行为。这是一种最简单的神经网络结构。

接下来,我们来看看常用的几种神经网络结构,首先是卷积神经网络。它从头开始处理数据,通过滑动窗口提取信息,然后进行卷积运算,最终得到一个卷积结果。此外,卷积操作后还可以提取最大值,整个过程体现了信息抽取的过程。

第二种常见的神经网络是二维卷积神经网络。它在矩阵中寻找小窗口并滑动,每个窗口通过卷积运算得到一个值,最后将所有窗口的值整合,形成二维卷积的结果。

第三种是循环神经网络(RNN),它描述了序列过程。任何位置的输出都受限于前一位置或前一状态的信息,称为隐状态。隐状态与当前输入字符串的信息相结合,生成当前的隐状态,然后根据当前隐状态预测每个词的输入概率。训练完成后,任何句子都可以通过这样的循环神经网络处理,其结果由多个隐状态组成,最后的隐状态则继承了前面所有句子、词的信息。

当然,每个位置都代表了到目前为止句子的信息,因此使用时可以选择最后一个节点,或者将所有节点结合起来形成一个向量,代表当前句子的编码。这样训练相对简单,一个句子进来走一遍这个过程,就可以得到每个位置词的输出概率,这些概率相乘就是循环神经网络的损失函数。根据损失函数,通过反向传播修正网络的连接强度,最终网络稳定时就可以得到循环神经网络。

只要有大规模语料库,通过这种方法就能形成描述当前语料库每个句子的循环神经网络。

接下来,我将介绍刚才提到的三种对话功能的具体应用。首先是聊天,这种人机对话是如何形成的?主要有两种方法。一种方法是将网上的论坛、微博或网站中出现过的对话句子抽取出来,作为训练语料库。当收到一个新句子时,系统会在语料库中找到与其最相似的句子,并输出对应的回复。虽然这种方法看似简单粗暴,但在某些情况下仍然有效。

然而,有时系统找到的句子可能对应多个回复,它无法确定哪个回复最适合当前输入语句。这时就需要一个匹配过程,即判断输入语句与语料库中的回复在语义上是否相关或一致。为此,我们采用了一些度量方法,介绍其中两种。

第一种方法是,给输入语句和回复打分,评估它们之间的相关性。如果有多个选择,首先将所有选项排序,输出最佳分数。这种方法可以对整个句子进行编码,使用循环神经网络或卷积神经网络进行编码,也可以简单地将每个维度取平均值,最后计算两个向量之间的距离。

第二种方法是,将问题和回答的每个词计算距离,形成相似度矩阵,通过卷积得到矩阵变换的信息,再取最大池化层,矩阵维度逐渐缩小,最后可能只保留一个节点。这可以通过多种变换实现,最终得到一组节点,这些节点代表了两个字符串之间的距离,通过多层感知器计算句子。

然而,这些方法在处理短字符串匹配时过于依赖自身信息。而我们日常对话通常带有背景和常识,每句话都有一个主题词表。例如,当你来到清华三食堂,话题可能包括吃饭、早餐、午餐、晚餐、价格、饭卡等,这些词都是与主题相关的。匹配时需要体现出这些主题词。

如何体现?首先找出输入语句的N个主题词,再找出可回复句子的主题词,用主题词增强匹配过程。这也是通过神经网络计算两个词串,加上主题词增强的相似度。

具体算法是通过注意力模型计算每个主题词与当前句子的匹配强度,所有主题词根据强度加权,体现当前背景主题词的强度,再与原句匹配,计算相似度。

另外,我们还可以将主题词视为知识图谱,通过主题词限定当前输入应包含哪些信息,哪些信息不应输出,哪些信息需要补充等。实际上,在具体实现时,可以看到一个句子有三种表示方法,两个句子之间每种句子都有三种表示方法,通过两两表示方法计算距离,最终得到一个向量,通过多层感知器得到一个数值,表示这两个输入串的距离。因此,这两个输入串不是赤裸裸地直接匹配,而是通过周围知识所代表的主题词增强。

接下来是生成模型。输入一个句子,通过循环神经网络进行编码,再通过解码过程输出每个词。在机器翻译中,是从原文输出译文;在古诗中,是生成第二句;在这里,是输入用户的问题得到系统的回复。

这是一个生成过程,可以看到下部进行句子编码,用这个编码指导每个词的输出。在输出时,既考虑原始句子的编码,也考虑前面词的输出和前面的隐状态,最终传递输出,直到输出词尾。

输出时,并不能一视同仁对待所有词。有些词的权重较高,这由注意力模型体现,输出某一类词时,哪个源端词对它影响最大,要体现在输出的概率方面。

传统的RNN和注意力模型可以用于问题输入和系统回复,但也有许多问题,如回答过于单调。为此,我们需要利用外部知识来丰富回答。例如,使用主题词增义。原始句子通过注意力模型输出每个位置的词,再增强与该句子相关的主题词,将主题词编码,也通过注意力模型预测输出。一个词的输出不仅来自源端信息,还受到主题词的制约,最终输出的概率是这两个输出预测结果的概率之和,选择最优的输出。

刚才说的是单轮对话,现在说多轮对话。人在对话时会考虑上下文,不仅仅是当前的一句话,还需要考虑多轮的信息。因此,要将整个对话(会话)纳入考虑,对会话进行编码,用会话预测输出的回复。

在计算时,我们有几个这样的模型。刚才介绍了基于搜索的方法,还可以用多层感知器来模拟多轮对话。对每个之前出现的句子进行编码,每个编码都可以通过一个句子的编码体现整个句子的信息,再通过注意力模型与目标连接,最后预测时通过基于句子的注意力模型来预测。可以理解为我们在回复时既要看到前面哪一句话重要,还要看到那一句话里哪个词重要,所以是一个双层注意力模型。

以上是关于聊天的介绍,还有问答和对话。

问答就是用户提出问题,系统需要理解这个问题,然后利用系统所有的资源来回答这个问题,资源可能是FAQ、文档、表格、知识图谱等。哪个资源能回答问题,就选取哪个资源输出。如果有多个资源都能回答问题,我们选择最有可能的答案输出。

简单来说,知识图谱有两种处理方式:一种是对用户问题进行语义理解,通常使用语义分析方法,如CCG、DCS或机器翻译。另一种是信息检索方法。例如,一个问题“Where was Barack Obama born?”,这句话中出现了实体Obama。假设知识库是完备的,那么系统会判断答案一定是与Obama相关联的某个节点,然后到知识库中以Obama为中心,挖出所有相关信息,再计算相似度,相似度高的就是答案。我们将这些技术应用于微软小冰,如回答问题、聊天等,还应用于京东商城的导购系统。

在京东商城如何通过对话过程实现导购?实际上是对用户输入的话检测意图,如果检测不到,系统判断可能是聊天,通过聊天引擎进行沟通。如果检测到意图,如订旅馆,就有对应的对话状态表记录当前状态及需填充的信息。

系统知道需要填充什么信息时,就会生成相应问题让用户回答,用户回答后系统再将信息抽取过来填充到表中,直到所有信息填充完毕,完成任务对话过程。

这里涉及到对问题的理解,提取关键信息,还有对话管理,如状态转移、槽位填充或更改、选择新的槽位开始对话,以及生成对话让用户自然回答,从而获得系统所需信息。

今天简单介绍了三个关键技术,每个都不容易。虽然我们取得了一些成绩,但仍有许多问题需要解决,也期待大家运用智慧将这个领域推向前进,更好地解决问题。

未来有三件大事非常重要:一是如何更好地建模上下文或多轮对话,目前仍使用较为粗糙的信息表示方法,没有精确断定前文信息,将来可以使用信息抽取方法记录信息,引导未来的对话。二是如何个性化信息指导生成个性化回复,现在回复千篇一律,需要对不同人群做出适应性调整,使对话更加丰富多彩。

好的,我的演讲就到这里,谢谢大家!

本文来源: 图灵汇 文章作者: 18500355862