构建聊天机器人:检索、seq2seq、RL、SeqGAN

本文将简要介绍聊天机器人的四种构建方法:检索、seq2seq、Reinforcement Learning、seqGAN。

聊天机器人的现状

聊天机器人从应用领域分为:

  • 专业型
  • 通用型

从技术上分为:

  • 检索型
  • 生成型

目前聊天机器人在专业领域利用检索的效果较好,正朝着通用领域生成型发展。

检索

检索方法的数据库是很多对话的pair,其原理是将query编码成vector,然后在数据库中找最接近的query,然后将最接近的query的回答输出。注意点如下:

  • query的编码方式LSI:使用词袋模型或tf-idf对数据库中的query集进行编码得到矩阵AA,行代表word,列代表document;对矩阵进行SVD分解得到A=USVTA = USV^T,其中VV表示文档在特征空间的特征向量;当新的queryqq来临时,对其做变换S−1UTqS^{-1}U^Tq得到特征空间的向量,然后用余弦相似性计算与数据库中qeury的相似度即可。这种方法的缺点是当新数据越多的时候误差越大,需要重新计算SVD,同时对于同义词、一词多义等语义特征难以把握。
  • query的编码方式RNN:可以采用两个RNN。第一个RNN对每句话进行编码到一个向量;第二个RNN对第一个RNN的输出继续编码成一个向量。
  • query的编码方式auto-encoder,设定encoder的单元数,encoder前面加embeding等,相当于特征压缩。
  • query编码好之后的问题就转变成了一个retrivel的问题,采用KNN即可,同时可采用KD-Tree、LSH优化检索速度。

seq2seq

seq2seq使用两个RNN,一个作为输入的encoder,一个作为输出的decoder。需要注意的大致包含以下几点:

  • encoder中可以包含上一句,也可以包含上上一句。如果包含多个句子,可以采用启发式的encoder,训练2 step的RNN。第一个RNN负责对每个句子进行建模,第二个RNN负责对第一层RNN的输出进行建模输出变量。
  • decoder每个step可以采用attention

RL

为什么要用强化学习

seq2seq有一些缺点:

  • 只能计算前缀部分的概率(改进可用recursive neural network)
  • 使用最大似然估计模型参数

第一个缺点使seq2seq不容易理解文本,因为AI-requires being able to understand bigger things from knowing about small parts.

第二个缺点使seq2seq的对话不像真实的对话,只考虑当前对话最大似然忽略了对话对未来的影响,容易出现“I don’t know”(因为其概率最大,其他方向的相互抵消);对话重复(不考虑上下文的关系)等问题。

针对第二个缺点,我们了解到概率最高的输出不一定等于好的输出,好的对话需要考虑长久的信息。可以引入强化学习,人为设计相关的reward让机器更好地学习。

强化学习的架构设计

强化学习的本质是根据reward,使模型参数朝着reward增长最大的方向移动。 强化学习的聊天机器人架构设计如下:

期望reward的计算公式如下:

Policy Gradient

在上一节中,我们得到了目标函数与优化目标,这节中,我们考虑如何求目标函数的梯度∇Rθ\nabla R_{\theta}。

上一节中得到RθR_{\theta}的方式是通过采样,通过采样的方法自然无法计算梯度实现梯度的传递。解决的思路是:将RθR_{\theta}转化成梯度的采样。具体实现如下:

θ的更新方式如下:

这样更新的物理含义如下:

采用强化学习的模型与传统的seq2seq对比如下,其区别主要是强化学习对不同的loss用reward当做权重:

训练的整体过程如下:

Add Baseline

加入baseline之后的梯度为:

Reward设计

强化学习中,如果有人提供reward那是再好不过的了,不过这样投入的时间精力物力财力都很大,如何设计reward是这里讨论的问题。这里,提供三种reward的设计思路。

  • ease of answering

核心是P(“I don’t know”|response)比较小。

虽然S\mathbb{S}不可能覆盖所有的null回答空间,不过类似的回答在空间的位置都是很接近的,所以可以抽样去模拟。

  • non-repetitive

核心是希望agent在每一轮对话中都可以产生新的信息,因此对连续两轮相同的输出进行惩罚。

最终的reward如下图所示:

SeqGAN

架构设计

SeqGAN与传统GAN一样,包括generator、discriminator。不同的是网络是condition的,也就是使用了condition GAN,generator condition的是query(因为RNN网络本身有随机性,所以这里不加随机的输入),discriminator condition的也是query。

SeqGAN训练的大致思路与GAN一致,对generator、discriminator分别训练。

离散梯度的传导

然而,若按上面传统GAN的架构设计,更新generator参数的时候梯度是无法传递的。原因是generator的输出是采样离散的,难以计算梯度进行梯度的反向传播。

简单的解决方案是采用WGAN,传递的不是采样离散的值而是分布。SeqGAN的解决方案借鉴了强化学习。

强化学习

采用强化学习的思路,将discriminator当做人,将discriminator的输出当做reward。利用policy gradient可以得到generator参数的更新方向(详见之前的强化学习部分),这样便解决了离散采样值梯度更新的问题。

Monte Carlo Search

使用强化学习,利用policy gradient解决了离散值梯度传递的问题后,还会出现对句子不同长度reward的分配问题。详见下图。这个问题在数据量大并且采样足够的情况不严重,在采样较少的情况较严重。

Teaching Forcing

生成模型的训练通常很难,seqGAN中,初始的generator生成的x效果不好,因此discriminator给的reward很低,这样模型很难训练,因为它一直看到比较低的reward,也就是不好的数据,并不知道好的数据长什么样,自然很难像好的数据学习。

解决初始训练的思路是训练的时候更多的见到reward高的pair对,具体实施方法有两种:

  1. 按照reward采样,reward越大采样到的比例越高
  2. 增加更多的真实数据去训练

评估模型

这里涉及到如何去评估模型的好坏,传统的方式是BLEU,这里提供一种合成data的新思路。

BLEU

BLEU需要提供候选和参考集,采用n-gram计算:候选n-gram在参考集n-gram中出现的最大频数/候选n-gram的总数。需要注意的有两点:

  • 利用参考集n-gram的最大频数作为上限,防止重复大量n-gram得到较高的得分
  • 增大短句子的惩罚项,避免短句子得到较高的得分

其缺点如下:

  • 需要用reference data
  • 只关注当前的可能性,未关注对话的长期性持久性满意性

对话长度

对话长度一定程度上反应了对话的满意度。定义对话结束当且仅当产生”i dont know”这样的null response(方法参考ease to answer的reward设计)或者agent连着重复了两句同样的话(word overlapping的程度)。

多样性

对话应该是多样性的,这是检索模型的缺点,太固定了,而生成模型有一定的随机性。

方法是计算输出response中unigram、bigram的数量,同时用token长度做正则避免长句子分数较高。

Synthetic data

生成数据的方法,是先用LSTM(可以是random)产生很多pair作为真实数据。generator利用LSTM的数据学习,然后利用generator生成fake的answer,与真实的answer计算negative log likelihoood即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CreateAMind

深度学习调参有哪些技巧?

最近因为一些需要,参与了一些CNN建模调参的工作,出于个人习性,我并不习惯于通过单纯的trial-and-error的方式来调试经常给人以”black-box...

2214
来自专栏AI科技大本营的专栏

一文带你了解深度神经网络架构发展史

作者 | Eugenio Culurciello 译者 |叶俊贤 深度神经网络和深度学习算法因为在科研工作与工程任务中都取得了显著的效果从而大受欢迎。而其中取...

37612
来自专栏AI科技评论

学界 | 腾讯 AI Lab 解读19篇 ECCV 2018 入选论文

计算机视觉欧洲大会(European Conference on Computer Vision,简称ECCV)将于9月8日-14日在德国慕尼黑举办,该会议与C...

962
来自专栏AI科技评论

深度神经网络发展历程全回顾:如何加速DNN运算?

深度神经网络(DNN)目前是许多现代AI应用的基础。自从DNN在语音识别和图像识别任务中展现出突破性的成果,使用DNN的应用数量呈爆炸式增加。这些DNN方法被大...

4376
来自专栏CDA数据分析师

如何利用机器学习进行海量数据挖掘

互联网的海量数据不可能靠人工一个个处理,只能依靠计算机批量处理。最初的做法是人为设定好一些规则,由机器来执行。但特征一多规则就很难制定,即使定下了规则也没法根据...

2357
来自专栏AI科技评论

干货 | UT Austin博士生沈彦尧:基于深度主动学习的命名实体识别

沈彦尧基于亚马逊实习项目延伸探讨了主动学习在深度学习中的应用与思考,并分享了多篇深度主动学习的 ICLR,ICML 文章。

1922
来自专栏数据派THU

一文详解聚类和降维(附实例、代码)

来源:机器之心 作者:Vishal Maini 本文长度为3500字,建议阅读6分钟 本文对无监督学习的聚类和降维算法进行介绍,其中包括 K 均值聚类、层次聚类...

4048
来自专栏机器之心

深度 | 最后一届ImageNet挑战赛落幕,「末代」皇冠多被国人包揽

选自LSVRC 2017 机器之心编译 参与:机器之心编辑部 近日,ImageNet 最后一届挑战赛成绩已经公布,多个国内院校和企业在各个比赛项目上取得了非常不...

3695
来自专栏机器之心

ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

论文名称:《Unified Perceptual Parsing for Scene Understanding》

2202
来自专栏腾讯高校合作

ECCV 2018 | 腾讯AI Lab解读19篇入选论文

1381

扫码关注云+社区

领取腾讯云代金券