赞
踩
按应用领域分类
按回复生成方式分类
任务导向对话系统一般流程如上。
因为像Siri和小度这种应用比较多,它们都接收语音信号。但我们主要关注的是排除了语音识别和语音合成之外的其他部分。
以订票为例,我们需要收集的信息有出发地、到达地和出发时间。对话系统需要从用户那里收集到这些信息,才能说通过调用订票系统接口进行订票。
这些需要的信息,我们称为对话状态(Dialogue state)。因为涉及到状态的转化,我们很难通过用户的一句话就收集到所有信息,通常需要多轮对话。
比如用户说“帮我订一张去北京的机票”,我们只能获取到到达地信息,我们需用向用户提问来获取其他信息。
有了对话状态,我们可以引入 槽位(slot) 和 槽值(value) 的概念。
比如这里槽位有出发地
、到达地
和出发时间
。现在我们只有到达地
的(槽)值。
整个任务导向对话系统的流程就是试图维护这样一个对话状态,即希望能从用户那里获取槽位对应的值。
其中需要用到自然语言理解把用户的输入理解成结构化的语义表示。比如从用户的第一句话中,能理解到领域(类别)是机票;意图(类别)是订机票;语义槽有到达地
的值。
然后通过对话管理来更新状态并获取缺失的状态。
通过对话策略选择回复引导用户提供更多的信息。对话策略会输出一个结果到下一个模块,这个结果称为对话动作(Dialogue action)。然后通过自然语言生成模块来生成回复文本,不过一般是选择预先设定好的回复模板。
这里假设想询问出发时间,选择“请问您什么时间出发”。然后继续整个过程,直到收集到所有的槽值。
检索对话系统就是基于问题库,去匹配最相似的问题;
而生成式对话系统一般通过编码器和解码器来实现。
我们主要来学习任务型对话系统。
下面我们回顾一下实现对话系统所需要的基础技术。
首先我们看一下在深度学习兴起之前,我们一般会遵循的流程。
在NLP端到端深度学习技术兴起之前,拿到原始文本后,我们需要按照上面的步骤进行处理,最后基于统计模型进行建模。
值得一提的是,上面的标准化一般用于英文,比如将单词的过去式、将来式等提取成一个能表示该单词的部分。
神经网络由线性运算和非线性激活函数组成。
注意,这里并不会对基础网络做过多介绍,如果想深入了解,推荐从零实现深度学习框架。
Word2Vec的出现解决了向量化的问题,因为我们无法直接把一个句子向量化,但是我们可以得到其中每个词语的单词向量,然后就可以得到句子的向量,最终应用到不同的NLP任务。
有了词向量后,我们也可以应用图像领域中的卷积神经网络。
我们可以对一定窗口内的单词向量进行卷积操作,最终得到整个句子的压缩表示,用于后续NLP任务。
如果把文本看成是由单词所组成的序列,那么我们就可以应用循环神经网络。
简单循环神经网络试图维护一个状态,用户保存过去有用的历史信息同时剔除对未来无用的信息。
这种网络结构非常适合于处理我们的文本。
由于仅使用一个状态来做这件事情有点困难,后来就出现了LSTM通过多个状态和一些门控来简化这个操作。
Seq2seq模型解决了从一个序列映射到另一个序列的问题,常见的应用由机器翻译、文本生成、摘要生成等。
具体来说由编码器和解码器组成,编码器接受输入序列,解码器根据编码器得到的编码生成输出序列。
Seq2seq模型由一个问题,不管多长的序列它都编码成定长的向量,这样总会有一些信息丢失。而注意力(Attention)机制的提出,可以让我们在解码的过程中,有机会注意到输入序列中的每个单词。比如翻译“I”的时候应该需要看到“我”。
由于之前的Seq2seq一般是基于RNN实现的,它的缺点是计算缓慢,无法并行加速。
Transformer提出,我们只需要注意力机制就够了。
经过Transformer模块,可以把输入表征序列转换为更强大的另一种输出表征序列。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。