[译]在聊天机器人系统中应用深度学习技术,第一章:介绍

96
demobin
2016.04.08 11:54* 字数 3141

[译]Deep Learning for Chatbots, Part 1 – Introduction原文地址
聊天机器人(chatbots),又称为对话系统(Conversational Agents or Dialog Systems),是实下很热门的一个议题。微软就在这个领域下了很大的赌注,而且类似微软的还包括有脸书(推出了虚拟助手M)、苹果(有广为人知的Siri)、谷歌、微信和Slack。一大波新兴初创公司想要通过这个技术改变客户与服务提供商的交互方式,如APPOperatorx.ai,如聊天框架chatfuel,又比如聊天开发库Howdy's Botkit。微软最近发布了它们自己的机器人开发框架
很多公司都希望研发一个机器人能够拥有与人类对话相近的效果,而且它们还声称要用NLP(Natural Language Process自然语言处理)和DL(Deep Learning深度学习)技术来实现它。但是所有关于AI的宣传都很难使它们所设想的成为现实。
在这个系列文章中,我想要重温一些用于构建对话系统的深度学习技术,从我们目前的技术水平开始,来聊一聊什么是能够做到的,什么是在短时间内不可能实现的。这篇文章将作为一个介绍,并且在接下来的文章中深入实现细节。


一、模型的研究方向分类

1. 基于答案抽取的模型VS生成模型

基于答案抽取的模型(属于较为简单的方式),使用一个预定义好答案的知识库基于输入和文本启发式的选择一个最合适的回答。这个启发式方法可以是基于表达式规则的匹配,或者更复杂的基于机器学习的分类器。这些系统并不会生成新文本,它们只是从固定的集合中选择一个作为响应。
生成模型(复杂而艰难的方式),它并不依赖于预定义答案库。它能从无到有生成新的响应。生成模型通常用在机器翻译技术上,而这里的‘翻译‘则并不是从一种语言到另一种语言,取而代之的是从输入到输出。


Neural Conversational Model
Neural Conversational Model

两种方法各有优缺点。由于是手工的响应,所以基于答案抽取的模型不会发生语法上的错误。但它无法处理没有合适的预定义响应的实例。同样的,这种模型不能在对话中联系上下文信息,比如之前提到的名字等。生成模型则更‘智能‘,它能提到之前输入的实体信息让人们感觉在和一个真人聊天一样。然而,这种模型很难训练,并且很容易产生语法错误,而且还需要海量的训练数据。
深度学习技术在两种模型上都能应用,但是研究者似乎更倾向于生成模型的方向。seq2seq是目前最合适的文本生成模型,研究者希望在这个领域快速取得突破。然而我们在设计一个工作良好的生成模型的目标上还处于一个非常早期的阶段。目前工业界的生产系统上也多半是基于抽取的模型。

2. 短对话VS长对话

更长的对话显然自动化处理起来更加困难。一方面是短文本只要为单一的输入创建单一的输出,比如,你从用户那收到一个特定的问题然后你响应一个合适的答案。而长对话则需要你在多轮对话之后还保持之前对话的信息。客户向导对话就是一个典型有多个问题的长对话。

3. 开放域VS限定域

开放域要求用户可以在任何领域开始一段对话。在有明确意图和目标的情况下这不是必须的。在社交媒体如Twitter和Reddit上的对话就是一个典型的开放域对话--对话主题可以在任意方向上展开。需要无数的主题和事实知识才能创建合理的响应让它变得异常的困难。
限定域的输入空间和输出空间都被限定在一个量级内,因为系统只要实现一个具体的目标。技术支持和购物向导就是一个典型的限定域问题。这些系统不需要与你讨论政治,它们只需要尽可能的有效的完成指定的任务即可。当然,用户仍然可以在任意想要的领域展开一段对话,但是,系统并不需要一定处理这些实例,用户也不会期望得到一个很好的响应。

二、挑战

在构建对话模型的工作中,有很多活跃的研究领域,其中有些明显的也有一些不那么常见的挑战。

1. 上下文结合(incorporating context)

要生成一个合理的响应,系统需要结合语义上下文和环境上下文。在长对话中,人们要要记住双方说过什么又和对方交换过什么信息。这就是一个语境的例子。最常见的方法是用词向量技术把对话转变为向量表示,但是在长对话中使用这种技术也是一个挑战。论文Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network ModelsAttention with Intention for a Neural Network Conversation Model都是在这个方向上进行了尝试。其中一个需要结合一些其它语境数据如时间、地点、或者用户信息。

2. 个人相干性(coherent personality)

在生成响应的时候系统必须对语义相同的输入生成一致的回答。比如,你想要在‘你多大了?’和‘你几岁了?’这两个问题上得到一样的回复。这听起来很简单,但是要把这些特定的知识和个人相干的信息放到模型当中是一个非常难的研究课题。很多系统经过学习能生成一些似是而非的回答,但是它们都没有能训练出一个能生成确定语义信息的模型出来。通常认为这是因为训练的数据来自于不同的用户。论文A Persona-Based Neural Conversation Model在明确的个人模型这个方向上走出了第一步。

Example of incoherent responses of Neural Conversational Model
Example of incoherent responses of Neural Conversational Model

3. 模型评估

评估对话系统的一个思路是计量这个系统是否能令人满意的完成一个任务,比如在对话中解决用户向导的问题。但是这个方法的代价很大,因为这需要人工的判断和评估。在开放域中有些情况甚至没有一个能明确定义的目标结果。在机器翻译领域常见的一个指标BLEU,它是基于文本匹配的,所以也不适合用在对话模型中评估响应的结果,因为它可能包含完全不同的单词和短语。事实上,在论文How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation的研究中发现没有任何一个通用的指标与人的判断有关。

4. 意图和多样性

一个常见的问题是生成模型倾向于产生通用的回答,比如‘真叼!’或者‘我不懂。’之类的东西,它在面对很多输入实例时都管用。谷歌早期的智能回复系统就往往不管你输入什么都回答你‘我喜欢你哟’这样的话来。这大部分原因是受这个系统所用的训练语料和算法的影响。Some researchers have tried to artificially promote diversity through various objective functions一些研究者也尝试了通过增加目标函数来人工的提高响应的多样性。然而,人们一般根据指定的输入和意图来生成不同的回答,而由于生成模型训练并没有说携带指定的意图所以它们都卡在了这个多样性上。

三、它究竟效果如何?

以现有的尖端研究来看,我们究竟走到了哪,这个系统的效果如何?让我们回过头来再看看两个实现方向,基于答案抽取的系统在开放域是明显行不通的,因为你手工编纂的答案不可能覆盖所有的情况,而一个开放域的生成模型则差不多就是一个‘强智能’了,因为它要处理所有的场景,我们离这个目标还有很长的路要走(当然很多研究者正在这条路上前行)。
这也给我们留下了一个问题,虽然在限定域这两种模型都是适用的,但是对话越长、上下文越重要,这个问题就越难以解决。
在最近的一个采访中,百度首席科学家吴恩达指出:

'深度学习现如今最大的价值在那些你能够获得足够的数据量的子领域,而一个它无法做到的例子就是:实现一段有意义的对话。有一些演示,如果你挑一些对话片段出来,它看上去貌似一段有意义的对话,但其实如果你真的自己来尝试一番,你会发现它很快就脱轨了。'

很多初创公司对外提供对话模型的接口并声称保证它们能够自动化,因为它们已经获取了足够的数据,那只有一种可能,就是它们是在一个很狭窄的领域--比如在聊天中打车。任何一个稍微大一点的领域中(比如销售的电子邮件)就超越了我们目前能做的极限。然而,我们还是可以用这个系统发出和修正回答来帮助人工,这是目前切实可行的。
在生产系统中出现语法错误是代价非常高的问题,用户很可能就因此离去。这也是为何目前大部分的系统都采用基于答案抽取的模型的原因,这个模型不会有语法上的错误和冒犯性的语句。如果一个公司能获取这样一个手工的大数据库那这个生成模型就是可行的--但是它们需要通过一些其它的技术来防止发生类似微软Tay犯下的错误。

四、接下来要写的和一些值得一看的文章列表

在下一章中,我们将深入聊天机器人这一技术的细节,并基于深度学习实现一个基于答案抽取的模型和一个生成模型,但如果你有兴趣的话你也可以通过下面这些论文来了解相关的研究进展,这会是一个很好的开始:

日记本