前言
我们在日常生活中经常使用自然语言对话系统,比如苹果Siri。现在的对话系统多数只能做单轮对话,可以帮助用户完成一些简单的任务,如问天气,查股票(如果做多轮对话,也是在单轮对话的基础上加一些简单处理)。实现这些自然语言对话系统的基本技术可以分为两大类,基于规则的和基于数据的。你也许想知道对话系统的基本原理是怎样的?特别是如何用数据驱动的方式构建一个对话系统?
最近基于数据的自然语言对话技术取得了突破性的进展。我们发现,利用深度学习和大数据,可以很容易地构建一个单轮对话系统, 自动生成对话 ,并且取得惊人的好效果。比如,用5百万微博数据可以构建一个系统,用户给出一句话,这个系统可以自动生成一句回答。用户输入“我想买一部三星手机”,系统回答“还是支持一下国产的吧”,等等。你也许想知道这是如何实现的?能达到什么样的水平?
本文试图系统地回答以上问题。首先指出,自然语言对话将是人们信息访问的主要手段,信息检索领域的主要研究范式。之后,定义自然语言对话任务,对相关技术进行分类,列举主要技术挑战。接着,详细介绍如何构建基于数据的对话系统。最后,详细介绍最新的基于深度学习的对话技术。当中也介绍深度学习在自然语言表示学习中的最新成果。
信息检索领域的范式转移
“科学的发展依赖于间断性、革命性的变化”,这是科学哲学与科学史学家托马斯·库恩(Thomas Kuhn)的名言。库恩认为科学的每个领域都有不同的“范式” (paradigm),它们有着不同的研究对象、基本概念、解决问题的手段,甚至不同的研究者群体,比如,在物理学领域,量子力学与牛顿力学就属于不同的范式。科学的发展不是连续的,而是间断的,量子力学并不是在牛顿力学基础上发展起来的。当一个领域发生革命性的变化的时候,一定有新的范式产生,库恩称之为范式转移(paradigm shift)[1]。
信息检索是计算机科学的一个分支,研究和开发计算机帮助用户管理、访问、使用信息的技术。纵观信息检索几十年来的发展历程,可以看到它已经历了两个主要范式:图书馆搜索和互联网搜索。七十年代研究的重点是如何帮助用户在图书馆快速地查找文献资料,有不少该领域基本技术被开发出来,比如向量空间模型。九十年代研究的重点是如何帮助用户在互联网上迅速地访问想访问的网页,有许多创新,链接分析、排序学习、语义匹配、日志分析等技术被开发出来。
2011年苹果公司发布了语音助手系统Siri,标志着一个新的时代的开启。自然语言对话成了人们访问信息的一个新的手段。现在,移动设备成为个人计算的主流,越来越多的用户通过移动设备访问信息。在移动设备上,自然语言对话是人机交互最自然的,最有效的方式。另一方面,自然语言对话的技术,虽然达到了一定可用的水平,但还不成熟,不能很好理解用户的意图,不能充分满足用户的需求。这就意味着,围绕自然语言对话有很多待解决的具有挑战性的问题,它自然成为信息检索领域研究的一个新的重点,一个新的范式。
自然语言对话
自然语言对话可以形式化为以下问题。有一个计算机系统(对话系统),一个用户。用户通过自然语言,如中文、英文,与对话系统进行多轮交谈,系统帮助用户完成一个任务,特别是访问信息的任务。
自然语言对话,即计算机和人通过人类的语言进行交互,是实现人工智能的标志,其研究与开发有着很长的历史。迄今为止,有许多自然语言对话系统被开发出来,在受限的条件下,可以与用户进行一定的对话,帮助用户完成简单的任务。
现在的对话系统大多只做单轮对话,如果做多轮对话,也是在单轮对话的基础上做一些简单的处理。技术主要包括基于手写规则的,和基于数据驱动的。比如,六十年代就有著名的Eliza系统问世,基于手写规则,能与用户进行简单的对话,使许多用户感觉到好像是在跟真人进行交流。Siri之后,有许多对话产品出现,包括谷歌Now,微软Cortana。国内有许多聊天机器人发布,如微软Xiaobing,受到广泛瞩目。据我们所知,大部分的对话系统都是基于规则,或者基于数据的。
自然语言对话的研究与开发,虽然取得了一定的进展,但离实现人工智能的理想,甚至离实现在复杂场景下的实用化还有很大距离。自然语言对话有许多应用场景。比如,如果用户能够通过对话在智能手机上完成订酒店之类的复杂任务,那么手机就会真正成为用户的得力助手。这里的核心问题是如何“理解”用户的语言,帮助用户完成任务。现在的语音助手还不能做到这一点。再比如,许多公司有呼叫中心,在电话上回答用户提出的各种问题。如果能够实现自动呼叫中心,机器来回答用户的问题,就能大大提高服务的效率和质量。这里的核心问题也是自然语言对话。
必须指出,重要的是需要将自然语言对话作为科学问题研究,而不能停留在工程的技巧上。作为科学问题研究,应该有几个特点:首先是建立数学模型解决问题,其次是实验结果能够再现,还有复杂的问题被还原成简单的问题解决。
基于数据的对话系统
大数据时代为自然语言对话研究提供了一个新的机会,大量的对话数据可以从实际的场景获得。一个重要的研究问题是,我们是否可以利用大数据,构建一个数据驱动的自然语言对话系统。比如,记录呼叫中心话务员与客户的对话,用这些数据,是否可以构建一个自动的呼叫中心。
计算机理解人的语言还是非常困难的,即使是不可能的。一个克服这个挑战的方法就是用数据驱动的方式构建对话系统。搜索技术的成功给我们的一个启示,尽量避开自然语言理解,用数据驱动的方式解决问题,是人工智能技术实用化的一个有效途径。我们可以把对话系统的主要部分用数据驱动的方式构建,另一方面,只实现轻量级的知识使用、推理、对话管理。
我们可以把自然语言对话分成单轮对话和多轮对话进行研究。单轮对话是基础,也应该是研究的第一个重点。单轮对话可以是基于规则的,或基于数据的。基于数据的方法又可以分成基于检索的方式和基于生成的方式。下面作一简单介绍。
图1 基于检索的对话系统
图1是基于检索的单轮对话系统。大量的单轮对话数据存储在索引里,每一个实例包括一个信息和一个回复。用户输入一个信息,检索模块从索引中检索相对相关的信息和回复,并将最适合的回复返给用户,形成一轮对话。而检索系统本身是通过机器学习构建的。
图2 基于生成的对话系统
图2是基于生成的单轮对话系统。学习模块利用大量对话数据构建生成模块。当用户给定一个信息时,生成模块针对该信息自动生成一个回复。
深度学习与语义表示学习
最近深度学习技术有了突飞猛进的发展,为语音识别、图像识别、自然语言处理(包括自然语言对话),提供了强大的工具,为这些领域今后的快速发展提供了新的契机。事实上,若干个基于深度学习的对话系统已被开发出来,受到了广泛瞩目。
深度学习为自然语言处理带来的本质突破是语句的语义表示学习,也是基于深度学习的对话技术的基础,这里做一简要介绍。
在自然语言处理领域,一个普遍使用的技术是用实数值向量来表示单词的语义,其基本假设是单词的语义可以由与其共现的其他单词来决定。比如,统计每一个单词与其它单词在一个数据集的共现频率,并将其表示为向量,这些向量能够很好地表示单词的语义相似性,两个单词向量的余弦相似度越大,两个单词的语义就越相近。
最近自然语言处理与深度学习的一个新发现是,我们可以通过深度学习用实数值向量来表示语句的语义。如图3所示,两句话“John loves Mary”和“Mary is loved by John”的语义向量就相近,而这两句话的语义向量就与“Mary loves John”的语义向量相远。
图3 语句的语义可以由向量空间中的实数值向量表示
下面具体地讲述四个深度学习方法:单词嵌入(word embedding)、循环神经网络(Recurrent Neural Network)、卷积神经网络(Convolutional Neural Network)、递归神经网络(Recursive Neural Network)的原理,它们是语句语义学习的强有力工具。
第一个工具是单词嵌入,其中最常用的是称为Word2Vec的工具[2]。如果仅仅基于一个单词和其他单词的共现信息构建该单词的语义表示向量,那么就会得到一个高维稀疏的向量。这种高维的向量不适合用于语句语义表示的学习,因为它有过多的参数。我们的问题是如何将高维的单词向量压缩成为低维的单词向量。Word2Vec提供了一个有效的方法,它对应着以下的非监督学习方法[3]。
假设在一个数据集上获得单词在不同上下文出现的互信息可以由一个矩阵来表示,每一行对应着一个单词,每一列对应着一个上下文,每一个元素表示相应的单词与上下文的互信息,表示该单词与上下文共同出现的可能性大小。因为这个矩阵是稀疏的,可以对其进行矩阵分解,即将原来的矩阵近似地表示为两个矩阵的乘积的形式。这时得到的左矩阵就可以作为单词嵌入使用。它是一个低维稠密矩阵,每一行对应着一个单词,每一列对应着一个话题。
图4 循环神经网络
第二个工具是循环神经网络(RNN)[4]。RNN把一句话看成单词的序列,每个单词由一个向量表示,每一个位置上有一个中间表示,由向量组成,表示从句首到这个位置的语义。这里假设,每一个位置的中间表示由当前位置的单词向量以及前一个位置的中间表示决定,通过一个神经网络模型化。RNN把句末的中间表示当作整个句子的语义表示。参照图4。RNN与隐马尔可夫模型有相似的结构,但具有更强的表达能力,中间表示没有马尔可夫假设,而且模型是非线性的。加入长短期记忆(Long Short Term Memory,LSTM)机制, RNN可以处理远距离依存关系,能够更好地表示整句的语义。
图5 卷积神经网络
第三个工具是卷积神经网络(CNN)[5,6]。CNN对句子进行扫描,抽取特征,选择特征,最后组合成句子的语义表示。首先从左到右用一个滑动窗口对句子进行扫描,每个滑动窗口内有多个单词,每个单词由一个向量表示。在滑动窗口内,通过卷积(convolution)操作,进行特征抽取。这样,在各个位置上得到一系列特征。之后再通过最大池化(max pooling)操作,对特征进行选择。重复以上操作多次,得到多个向量表示,将这些向量连接起来得到整个句子的语义表示。参照图5。同一卷积层内参数是共享的,也就是同一层的卷积操作是相同的,这也就保证了在局部领域进行相同的特征抽取。
图 6 递归神经网络
第四个工具是递归神经网络(ReNN)[7]。ReNN假设对语句进行句法分析,得到句法树。句法树的每个节点上有一个向量中间表示。父节点的表示由其子节点的表示决定,通过神经网络模型化。而根节点的表示就是整个句子的语义表示。参照图6。句法树上的中间表示可以在句法分析的过程中得到,比如在最大间隔分析(max margin parsing)。
基于深度学习的自然语言对话系统
华为诺亚方舟实验室是最早用深度学习技术开发自然语言对话系统的研究机构之一,提出了若干个具有代表性的模型,这里做一简单介绍。我们开发了基于检索的单轮对话系统和基于生成的对话系统。
如图1所示,基于检索的方式将对话看作搜索问题。系统索引大量对话数据,每一个实例由单轮对话中的一对信息与回复组成。给定一个信息,系统从索引中找出相关的信息与回复对,计算输入信息与检索到的回复之间的匹配度,基于匹配度对回复进行排序,并将排在最前的回复返回。输入信息与每一个回复之间的匹配度计算,由事先学好的多个匹配模型完成。回复的排序由事先学好的排序模型决定。这里的关键问题是如何实现不同的匹配模型。我们提出了两个基于深度学习的匹配模型。
图7 匹配模型Deep Match CNN
第一个匹配模型称为Deep Match CNN [5],如图7所示。这个模型可以判断给定的两句话和是否可以成为一次单轮对话中的信息和回复。将两句话输入到CNN模型,可以得到它们的语义表示(实数值向量)和。之后,再将这两个语义表示输入到一个多层神经网络,判断两句话语义的匹配程度。这就是Deep Match CNN模型的基本想法。如果有大量的信息和回复对的数据,那么就可以训练这个模型。这里介绍的是最基本的模型,还可以对它进行扩展,这里不予介绍,详见[5]。
图8 匹配模型Deep Match Tree
第二个匹配模型称为Deep Match Tree [8],如图8所示。这个模型,基于句法分析结果,判断两句话是不是可以形成一轮对话中的信息和回复。先对两句话和进行句法分析,得到两个句法树和,再看两个句法树的子树是否满足各种匹配模式。比如“how do you think about Hong Kong”与“the food in Hong Kong is great”就满足匹配模式“how do you think about X”与“the Y in X is great”。之后将匹配结果输入到一个多层的神经网络,这个神经网络的输入层的每个神经元对应一个匹配模式。匹配模式事先从数据中挖掘出来,有上百万个。如果输入的两句话能够满足某一模式,其对应的神经元取值为一,否则取值为零。神经网络最后判断两句话的匹配程度。如果两句话能够满足许多配模模式,那么这两句话最终形成一轮对话的可能性就会很高。Deep Match Tree模型也可以通过大量信息与回复对的数据训练得到。
如图2所示,基于生成的方式将对话看作基于信息产生回复的问题。系统利用大量对话数据构建生成模型,给定一个信息,系统自动生成一个回复。这里的关键问题是如何实现这个生成模型。我们提出了一个基于深度学习的生成模型。
图9 生成模型Neural Responding Machine
这个生成模型称为Neural Responding Machine(NRM)[9],如图9所示。NRM的基本想法是这样的。将输入的一句话看作一个单词表示的序列,通过编码器,是一个RNN模型,将转换成一个中间表示的序列,再通过解码器,是另一个RNN模型,将转换成一个单词的系列,作为一句话输出。NRM模型也可以通过大量信息与回复对的数据训练得到。
基于检索的对话系统和基于生成的对话系统各有其特色。生成系统比检索系统的准确率会高一些,在一个标准数据集上,检索系统的准确率是70%,生成系统的准确率是76%。但检索系统比生成系统会更安全一些,不会返回语法不通的句子。这里的准确率的定义是,人对返回结果做评价,如果回复可以成为一轮对话,就认为是正确,否则是错误。如何对自然语言对话系统进行客观评价,仍然是一个需要进一步深入研究的课题。
同时指出,基于深度学习的生成模型比传统的基于机器翻译的模型在准确率上有大幅度的提升,从26%提高到76%[9]。深度学习在图像处理、语音处理等领域有许多大幅度提升性能的实例,在自然语言处理领域这样的事例还不多,在机器翻译等任务上的提升往往没有这么高。
令人惊讶的是,基于生成的对话系统可以返回许多有趣的回复,超出想象。表1给出一些系统生成的例子。可以看出,在大部分情况下,系统能够生成比较“自然”的句子,构成一个自然的对话。
生成系统产生的回复例如下:
输入信息 | 系统回复 |
持续面试是必须的习惯。 | 必须来支持!加油! |
每天最重要的是就是思考用哪姿势睡觉…… | 每天都在思考这个问题 |
看韩寒的台湾经验与惊艳 alink | 支持一下感觉挺不错的 |
今晚又可以在海边发呆了,舒畅啊。 | 好美的蓝天,我喜欢 |
女人的名字决定性格!你的准吗? | 准,准,准,准,准 |
22岁上非诚勿扰是什么心态? | 挺好的,支持一下感觉挺不错的 |
结束语
本文介绍了利用大数据与深度学习构建自然语言对话系统的技术。最近的深度学习对话的一些进展确实令人振奋。我们还不知道能沿着这条路,是否能达到完全实现、或者局部实现自然语言对话的目标,但是至少我们面前出现了不少可以尝试的路径,不少可以期待的机会。
参考文献
- 托马斯•库恩, 《科学革命的结构》(The Structure of Scientific Revolutions)(1962),北京大学出版社,2003。
- Tomas Mikolov, Martin Karafiát, Lukas Burget, Jan Cernocký, and Sanjeev Khudanpur. Recurrent Neural Network based Language Model. InterSpeech 2010.
- Omer Levy, Yoav Goldberg, and Ido Dagan. Improving Distributional Similarity with Lessons Learned from Word Embeddings. TACL 2015 pp. 211-225.
- Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S. Corrado, and Jeff Dean. Distributed Representations of Words and Phrases and Their Compositionality. NIPS 2013, pp. 3111-3119.
- Hu, B., Lu, Z., Li, H., & Chen, Q. Convolutional Neural Network Architectures for Matching Natural Language Sentences. NIPS 2014 (pp. 2042-2050).
- Blunsom, P., Grefenstette, E., & Kalchbrenner, N. (2014). A Convolutional neural network for modeling sentences. ACL 2014.
- Socher, Richard, John Bauer, Christopher D. Manning, and Andrew Y. Ng. "Parsing with compositional vector grammars." ACL 2013.
- Mingxuan Wang, Zhengdong Lu, Hang Li, Qun Liu. Syntax-based Deep Matching of Short Texts. IJCAI’15, 2015.
- Lifeng Shang, Zhengdong Lu, Hang Li. Neural Responding Machine for Short Text Conversation. ACL-IJCNLP'15, 2015.
90+位讲师,16大分论坛,Databricks公司联合创始人、Apache Spark首席架构师辛湜,Hadoop、HBase和Thrift项目的PMC成员和Committer、Kudu的发明人Todd Lipcon等海外专家将亲临 2015中国大数据技术大会 。余票已然不多, 预购从速 。 (责编/周建丁)