去年年末,今日头条实验室邀请华为诺亚方舟实验室主任李航博士进行一场题为《Will Question Answering Become Main Theme of Research in Information Retrieval?》的讲演,以下为讲演实录。

首先感谢李磊博士的邀请,我非常高兴今天有机会和大家交流,下面和大家分享一下自己对自然语言处理中的自动问答的一些看法。

1

在信息检索这个领域,怎么样让用户更好地访问信息,很快很准地访问信息,这是基本问题,跟推荐正好是反向的。推荐是系统主动给用户推荐东西,而检索往往是用户有一个明确访问信息的需求,然后与系统交互,比如在搜索系统里提交一个查询语句,得到相关的文档。自动问答就更进一步,用户只要用自然语言去提个问题,问答系统就直接把答案告诉给用户。这个其实跟推荐也蛮相关的。有人说未来推荐的一个重要技术就是跟搜索和问答的结合,推荐现在主要基于协同过滤,很有效,但在一定程度上也很准,因为用户的真正需求有时很难抓住。但是如果能跟用户做一定的交互,比如让用户描述一下他的兴趣或者他的需求,这个时候推荐就跟搜索非常相关了。兴趣可能是很广的,但在某一个特定时刻他可能只关心一些特定内容。

2

在信息检索领域,学术界有这样的说法,也不是我一个人的观点,信息检索有三代技术或者叫三个不同的范式,七十年代大家开始研究图书馆搜索,九十年代开始研究互联网搜索,2010年一个标志性的事件——苹果发布siri,用户可以在手机上通过自然语言对话访问信息,这个将成为未来研究的核心问题,即通过自然语言对话帮助用户访问信息,帮助用户完成任务。

3

有两个典型场景,一个是在手机上,很自然,今日头条也是,自然语言对话的时候,用户用语言的方式,跟系统做交互;另外一个场景就是呼叫中心,就是说在一个特定的领域里面帮助用户解决一些问题。我们可以看到,自动问答作为一个问题,需要进行深入的研究。在自然语言处理和信息检索领域,自动问答的研究已有很长的历史了,至少有二十年的历史,一个最有名最成功的系统就是IBM Watson系统。

4

自动问答问题主要有两个,一个是事实问答,一个是社区问答。自动问答的方法主要有两种,一种是基于检索的方法,这个更常用,一种是基于语言分析的方法,还有两者结合的方法。社区问答、事实问答大概都是用这些技术来做的。

56

比如事实问答,你问谁发明了手机,那么系统告诉你是谁发明的,这种问答是关于事实的问答,事实问答牵扯的问题基本上是几个W,what/who/where/when表示的问题,答案一般是一个名词短语,有可能是一个实体名,也有可能是一个数字。做的时候最基本的技术是检索技术,先做章节片段的检索,即passage retrieval。得到一个问题的时候,对它进行分类分析,之后去找相关的段落、片段进行匹配、排序。

匹配、排序在推荐里面也是最基本的技术,搜索也是一样,就是推荐和搜索匹配的东西不一样,推荐的时候往往是产品和用户的匹配;而搜索是查询和文档的匹配。

社区问答也有类似的机制。社区问答往往适合于回答比较长的情况,不是前面的四个W,通常是why和how表示的问题。回答往往不能用一句话或一个词来表达,需要一段话或一篇文章。这个时候,基本的技术也是检索技术,如索引、匹配、排序,跟刚才的事实问答很相像。

我们看到自动问答系统,准确率通常能达到70%-80%的水平。我们当然会想能不能再提高一些,能达到90%以上?这个时候就会感到,现在整个技术框架是有一定瓶颈的,仅仅在现在基本的技术基础上做,改进空间并不是很大。有个重要的事情我们应该去看,就是人到底是怎么做信息检索的。为什么别人问我们问题,我们知道答案的时候,就能给对方一个比较好的应答?人有一套鲁棒的信息知识存储和检索系统。下面就比较一下人和计算机的差异。信息检索的终极目标,应该是让计算机变成人脑的一个扩展,帮助人去存储、记忆、检索知识和信息。今日头条将自己定位为内容平台,一定程度上也相关,让大家向这个平台提供内容,使它变成每一个人的大脑的延伸 ,使得他想要得到什么知识,得到什么信息,就随时可以得到。我们现在看到的主要是信息检索这个方向的需求。那么我们看人的大脑是怎么做信息检索的?

7

现在对人的大脑的研究有很大进展,因为有更多先进的设备和仪器出现。前几天我去清华大学医学院参观他们的脑科学实验室,真的非常有意思。比如说,看老鼠的大脑,现在能够做实验,不需要插电极到老鼠的大脑里,而是用一种光学的仪器去看,固定在一个地方,看哪些神经元在活动,有哪些突触把它们连接起来,可以看得非常清楚。我看到的那个仪器还不是特别大,可以看老鼠大脑的几百个神经元,如果它扩大到一万,一亿个神经元,那就非常不得了了。未来的一段时间,有希望可以看到老鼠大脑一亿个神经元对外界刺激的反应,很有意思。我们慢慢开始了解,动物、人的大脑到底是怎么工作的。

在人脑的信息存储和检索里,有两个最重要的部位,一个是海马体,一个是大脑皮质,大家可能都知道。如果从计算机架构的角度去看,大概是这样一个架构:人主要有五种传感器 ,其中视觉和听觉是最主要的,大概80%—90%的信息都是通过视觉和听觉获取的。从传感器获得信息之后,人脑对其做处理。听到的(比如现在我在说话)由海马体做短期的记忆和编码,之后传送到大脑皮质,大脑皮质将编码后的信息做长期记忆。我们的意识到底是什么?意识到底在大脑哪个部位?现在有很多争论,但是很明显,大脑意识对应于计算机的CPU,它能够去控制整个大脑的工作过程。而长期记忆相当于计算机的外部存储,海马体相当于计算机的内存。人脑中的内存其实是非常小的,只能存很少的信息,基本上只能记住30秒,过后就记不住了,就会忘掉。如果信息重要,海马体就会把信息传送到大脑皮质(长期记忆)里,把它记下来。赫布提出的一个假设,大脑里面有两个神经元,同时变得活跃了,之间就会有新的链路产生、或链路变得更强。记忆的过程实际上就是在大脑中相关的神经元变得活跃,产生新的链接的过程,这就是我们记忆的基本原理。

8

我们可以做个简单的比较,人脑和计算机是非常不一样的。

9

人脑做的是并行处理,计算机做的是串行处理。人脑能够去处理数学上很难(或很好)定义的问题,但是计算机如果要作任何处理的话,一定要是数学上能够严格定义的问题,它才能够做得较好。所以人脑和计算机有很多不同的地方,我就不一一叙述了。计算机是一个硬的东西,把信息和知识存在计算机里,就变成了一些01数字,但用户描述的访问信息需求是软的,用自然语言来描述的,这个软的碰到硬的的时候,计算机能够做一些事情,就是我们现在所谓的关键词检索,这样的东西一定程度上能够工作得很好,但有时不够理想。最理想的是,计算机的信息处理在一定程度上也是软的,而且能够和人的信息需求的软的东西结合起来。未来的发展可能就是信息检索过程的一步一步的“软化”。

我们现在计算机是怎么做信息检索的呢?我们现在做了很多简化,如果人做,比如说人做问答的时候,有几个步骤,分析、理解、推理、检索、决策、生成,这样的过程。

10

来了一个问题,我先分析它的内容,理解它的意思,做一定推理,然后检索,找到存在大脑中的相关信息,决定该怎么回答,最后产生回答,是这样的一个过程。当然人具体是怎么做的细节还不清楚。现在的计算机,即人工智能,还没有达到理解语言的地步。没有真正地从语义的角度去理解用户的需求,我们通常做一个简化,比如自动问答的简化是这样的,一般只有分析、检索、生成这几个步骤。这是我们在现在的计算机上能够实现的,对自动问答,能做到70-80%。其实也还不错了,但是我们的目标是做得更好。我们希望:未来有一种全新架构的计算机,能够做得更好,那是未来的事。另外,我们也看短期,在现在的计算机体系结构下,怎么样能够去不断改进模型,不断往前推进。这就是当前自动问答研究应该去探索的问题。

让我总结,自动问答有以下的问题应该去大力研究,就是从知识库中的问答、生成式问答、鲁棒的问答、互动式问答,下面就简单介绍一下我对这些问题的看法。11

首先看一下从知识库中的自动问答。现在绝大多数情况下,计算机中的数据库都是用SQL来访问,基本没有人用自然语言访问,一个理想是人用自然语言做这个事情。自然语言去访问数据库是很自然的需求,大家很久前就开始做相关研究,但一般来说都不是做得很好,只有在特定领域里,特定场合下,人写些规则可以用。12

我们希望研究这样一个问题,有一个知识库,以关系数据库的形势存在,有大量的关于这个数据库的问答数据,我们的目标是学习一个模型,用这个模型去帮助未来的关于这个知识库的自动问答。这个问题与自然语言处理中的语义分析是密切相关的。这是Percy Liang给出的一个定义或者一个模型化。

13

语义分析更广一些,包含了从知识库中的自动问答。这里,我们面临几个问题,一个是词汇的歧义性多义性,一个词可能表示多个意思,同时不同的词可能表示同一个意思,问句和知识库中的词汇都有歧义和多义。另外,问句和知识库都有一定的结构,知识库有结构,问句是自然语言,要遵循一定的语法规则,也有一定的结构。我要去做问答、做语义分析时,实际上是要做问句和知识库的匹配。这个匹配是一个复杂的匹配问题,因为两边都有歧义,都有结构,怎么样才能做好,这是一个有很大的挑战的问题。

还有生成式问答,我们在问答系统里面,希望能够自动产生自然的回答,因为用户在提问的时候可能问法是不一样的,意思是一样的,系统找到答案,理想状态,能够根据用户提问的方式产生回答。比如说,用户可能问:珠穆朗玛峰有多高?也可能问:珠穆朗玛峰的高度有多少英尺?这时,即使答案是一样的,最好按照用户的提问方法,产生式地给出答案,给用户一种亲切感。

14

这个问题在对话里面也是一个非常重要的问题,在跟用户对话的时候,中间产生了需求,要去访问一些知识库,做一个问答,在知识库里找到答案,回答问题。这就变成一个非常重要的问题,这里的挑战是,怎么找到合适的说法去回答问题。这个问题和人的知识问答有相似之处。我们知道人脑是分区的,不同的脑区有不同的功能,比如说有负责语言的脑区。人产生答案的过程中,知识与信息的检索和语言的生成的操作应该是分开的。脑子里先检索到知识与信息,然后产生答案。就是说,生成式问答应该更接近人,生成虽然从信息检索角度来说,可能不是特别重要,但从对话的角度看是比较重要的。

另外一个问题,鲁棒的问答系统,更一般的是鲁棒的人工智能。Thomas Dietterich教授提出这个概念,人工智能系统应该面临四个可能的情况。

15

第一个是“我知道我知道”,我知道这件事该怎么做,我知道我知道这一点。第二个是“我知道我不知道”,我不知道这个事该怎么做,但我知道我不知道。第三个“我不知道我知道”。最不好的是第四个“我不知道我不知道”,自己不知道这件事情该怎么做,还不知道自己不知道。“我不知道我不知道”,系统犯错误就是这种情况,自己完全不知道自己错了,鲁棒的人工智能要解决的也就是这种情况,让这种情况不要出现。

IBM Watson系统就是鲁棒的自动问答系统。Waton参加的知识比赛有一个对这个系统来说非常有利的设置,就是抢答机制。在这个比赛里可以去跟人抢答,不确信的话,也可以选择不答,让人去犯错误。这个系统设计目标就是回答70%的问题,回答准确率达到80%,在3秒内完成问答任务。IBM的研究人员在参加比赛之前,就对这个系统挺有自信,因为从历史资料来看,这样的性能就能赢过人类冠军了。

16

Watson系统的核心理念是不确信的时候就不回答,系统里面有相当部分是在做这样的事情,既答案正确性的评估。找到一个答案以后,再去做评估,去查一遍所有证据,看看答案是不是可能是错的。

17

其实在推荐里面,我相信也有类似的事情。给用户推荐的时候,再从另外一个角度去评估一下推荐的东西是不是不合适,就是我不知道我不知道这样的状态。在自动回答里面有时会有这样的事情发生,比如说在网上搜姚明的身高,会产生他的身高是.229cm这样的答案,明显是错的,问答系统里面如果有机制去检验答案的正确性,就可以避免这样的错误。应对“我不知道我不知道”有一定的挑战,为什么呢?你知道会犯哪种错误,就不会那样去设计系统。不过有一些事情一定是可以做的。你要回答身高的时候,大概检验一下答案,身高一定是有范围的,超出这个范围可能答案就是不对的了。我们可以想想如何让人工智能系统更加鲁棒,避免犯不必要的或者愚蠢的错误。

还有一个问题就是交互式问答,问答也不应该是一个锤子买卖,一次做好。这里问答和推荐可以结合起来。推荐以后,可以问顾客是否满意,用户反馈用自然语言对话。问答也一样,可以是交互式的,用户问一个问题,系统可以反问,当系统不确信自己是否“理解”用户问题的时候,可以去问。有了答案以后可以去做一个总结。或者一轮问答结束后,用户可以接着再问,姚明身高是多少?体重呢?系统可以把姚明的身高、体重依次告诉用户,这里面如何去理解用户的意图,呈现答案的内容,管理好对话?有一些很有意思的挑战问题。

1819

下面我就简单介绍一下我们实验室做的两个工作。我先说下我们实验室做的研究方向。我们有四个方向,自然语言处理和语音处理,做自然语言对话,机器翻译,还有推荐搜索,做手机相关的推荐与搜索,还在做通信网络上的机器学习应用,还有大数据分析。我们定位,长期研究与短期研究的结合,基础研究与应用研究的结合。这里介绍的自动问答的研究属于基础研究。

第一问题是,知识存在于关系数据库里,有大量的问答数据,是关于这个知识库的。我们只用数据驱动的方法,只知道知识库,只有大量的数据,能不能自动构建一个神经网络,自动去做回答?这是我们要解决的问题。20

我们假设有一个奥林匹库运动会的关系数据库,针对它进行问答,答案在数据库的表格里面,比如说你问:北京奥运会之前开得最长的奥运会是哪个?这个问句转换成SQL语言会变成一个很复杂的语句。我们假设有大量的相关问答数据,一个数据集是2万5千,另一个是10万这样的规模,我们的目标是建一个神经网络,不做任何的语法分析、语义分析,仅用神经网络,做一个比用语法分析更好的问答系统。我们这个数据集,其实有一些争议,因为不是自然产生的数据,现实中得不到这样的数据,我们用模板生成了数据,作为研究的第一步,我们认为这也是不得已的。我们还在做研究,这个模型有一个缺点,就是还比较慢,要多次扫描整个数据库。这个工作仍是一个对最基本概念的探索。212223

我们最基本的做法是这样的。首先用神经网络对问句作语义表示。数据库也一样,用神经网络对数据库的每一个元素作语义表示。我们都熟悉如何用神经网络做自然语言的语义表示,或者说分布式表示。然后我们用五层神经网络,对问句与数据库进行匹配,在理想状态下,不管用户输入怎么样的问题都能从数据库里面找到答案,答案就是数据库里的一个元素。那么为什么是用五层呢?最后一层相当于一个多分类器,在所有的候选里面选一个元素,之前四层对应SQL语言的嵌套结构。假设自然语言问句对应的嵌套SQL语句最多有两侧,神经网络的每两层解析一层SQL语句,所以总共有四层神经网络。每层表示SQL语句与数据库的一定的匹配关系。每一层有一个reader,一个annotator,分别是一个神经网络,reader先在每一行里读取最相关元素的表示,比如说判断应该读取的列是“城市”,那么就在每一行里,读取对应的元素,如北京、伦敦等,把它们找出来。之后有annotator,annotator针对每一行标注一些重要特征,annotator还有一个池化的操作,相当于在所有的行中找到最好的特征。整体来说就是经过一层神经网络以后,先在各行里面找到对应的元素,然后最后标注出最好的特征,持续做四次以后,最终就可以做多分类,找到答案。那么大家可以看到结果,在小训练数据集上准确率也能达到很高。有两种训练方法,一种是end-to-end,另一种是step-by-step,都能做得很好。在更大的训练数据集上,还能做得更好。step-by-step的意思是,在训练五层神经网络时,人给出指令,如告诉答案就在这一列。

另外一个工作是我们提出的生成式问答系统。假设知识库是三元组表示的知识图谱。要产生回答,如果问题是姚明身高多少,刘翔身高多少,根据这个情况系统回答时要说他身高是多少。我们提出了一个模型完成这个工作,模型的基本思想比较简单。

2425系统的处理分两路,一路基于问句产生答句,另一路根据问句检索答案。知识库三元组中的每一元素,既有符号表示,又有分布式表示。

26

模型的右边做搜索,搜索过程中,既做符号上的匹配,也做分布式表示上的匹配,直观上说,符号匹配是硬的,分布式匹配是软的,如果都匹配好的话,就能更好地找到答案。知识图谱对应着人的长期记忆,搜索的过程对应着长期记忆的检索。模型的左路做答案生成。实际上是说给一个问句,基于文句、检索答案,产生答句。这个过程由序列对序列学习,即sequence-to-sequence learning完成,跟翻译、生成式对话很相似。不同的地方是产生答句时,把检索的答案插入到生成的结果中,比如身高是2.29米,就把2.29米插进去,这部分不同于一般的sequence-to-sequence learning。在每个位置上,做一个判断,决定是产生一个词,还是插入答案。

27

那么这个方法的效果呢,还行,但不是特别好,有多个原因,一个主要原因是我们现在的训练数据噪音还太大,大概有72万从网上爬到的问答对。这个数据还有很多噪音,大概有10%-20%的错误,训练数据的清理还不是一件容易的事儿。现在的准确率只有52%,如果训练数据好的话,我们猜测至少应该能达到60%以上,大概是这个情况吧。生成式问答还有挺有挑战的,希望这方面今后有更多的研究。

 

行,这个报告基本就到这里。在这个报告里,我列举了自动问答的研究课题,如从知识库中的问答、生成式问答、鲁棒的问答,交互式问答。介绍了我们做的一些工作。现在我们主要用深度学习,可以看出自然语言处理和信息检索,光用深度学习还不太够,虽然它很强大。如何把深度学习和符号处理结合起来,应该是未来的发展方向,现在已经开始这样做了,今后需要进一步深入研究。总的来说,信息检索领域,自动问答将变成非常重要的研究课题,因为大家把访问信息的模式变成了通过自然语言对话。未来推荐也有可能跟问答会结合到一起,在一定场景下跟人做互动,更好理解用户的需求。下面是相关的文献。

28

谢谢大家。