原文连接:https://www.aclweb.org/anthology/P17-2079.pdf
我们推出了AliMe
聊天,一个开放域聊天机器人引擎,它将信息检索(IR
)的联合结果和序列到序列模型(Seq2Seq
)的生成模型相结合。AliMe
聊天使用基于序列到序列的重排模型来优化联合结果。大量的实验证明我们的引擎比IR和生成模型都要出色。我们推出了AliMe
聊天,以实现真实的工业应用,并获得比其他公共聊天机器人更好的结果。
1. 序言
在过去的几年里,聊天机器人蓬勃发展,例如微软的小冰、苹果的Siri、谷歌的谷歌助手。与传统的应用程序不同,用户通过简单和结构化的语言与他们进行交互(例如,“提交”,“取消”,“预定”等。),聊天机器人允许用户使用自然语言、文本或语音(甚至图像)与他们进行交流。
我们正在努力使机器人能够在电子商务领域回答客户的问题。目前,我们的机器人每天服务数百的客户问题(主要是中文,也有一些英文)。其中大多数是与商业有关的,但也有大约5%是以聊天为方向的(数千个)。为了提供更好的用户体验,建立一个开放域的聊天机器人引擎是必要的。
用于构建开放域的聊天机器人的常用技术包括IR模型和生成模型。给定一个问题,前者在问答(QA)知识库中检索最接近的问题,并接受成对的答案,后者根据预先训练的序列到序列模型生成答案。通常,IR模型无法处理在QA库中不相近的长尾问题,并且生成模型可能产生不一样的或没有意义的答案。
为了解决这些问题,我们提出了一种集成IR和生成模型的混合方法。在我们的方法中,我们使用序列到序列的重排模型来优化联合结果。具体地说,对于一个问题,我们首先使用一个IR模型来检索一组QA对,并使用它们作为候选答案,然后使用序列到序列模型对候选答案进行重排:如果最高的候选所得分高于一个确定的阈值,它将被选为答案。否则答案将由生成模型提供。
我的理解:当高于阀值的时候,可以说明数据库里面有类似的回答(和业务相关),可以直接利用 IR 模型进行回答,否则就可能是闲聊的问题,利用生成模型进行回答。
我们的论文做出如下贡献:
- 我们提出了一种新颖的混合方法,利用一个序列到序列模型来优化IR和生成模型的联合结果。
- 我们进行了一系列的实验来评估这种方法。结果表明,我们方法在IR和生成两方面表现都很出色。
- 我们将我们的聊天机器人引擎和一个公共的聊天机器人进行了比较。证据表明我们的引擎性能更好。
- 我们启用了
AliMe
聊天,用于真实的工业应用。
论文的其余部分结构如下:第2节介绍我们的混合方法,接着在第3节中的实验,相关的工作在第4节,第5节总结我们的工作。
2. 基于Seq2Seq的重排模型
我们在上图中概述了我们的方法。首先,我们从在线客服中的聊天记录中构建了一个QA知识库。基于这个QA知识库,我们开发了三种模型:IR模型、生成模型和重排模型。有两点值得注意:
- 这三种模式都是基于单词的(即需要分词):IR模型的输入特征是单词,而生成模型和重排模型的输入特征是单词向量表示,这些都是使用
fasttext
预先训练和在两个模型中进行进一步调整的 - 我们的生成模型和重排模型是建立于同一序列到序列结构,前者生成输出,后者则是岁输入问题的候选答案进行评分。
给定一个输入问题 $q$ 和一个阈值 $T$,我们的方法的过程如下:
- 首先,我们使用
IR
模型检索一组$k$个候选的QA对。
$$
\left\langle q_{\mathrm{kb}{i}}, r{i}\right\rangle_{i=1}^{k}(k=10)
$$
- 我们将每个问题$q$与其候选答案$r_i$配对 ,并为每一个问答对使用重排模型中的计分公式计算置信度得分
$$
o\left(r_{i}\right)=s\left(q, r_{i}\right)
$$
- 我们考虑答案$r$使用最大分数$o(r)=\max o\left(r_{i}\right)$:如果$o(r) ≥T$,采取答案$r$;否则输出一个基于生成模型的回复$r’$。
在这里,阈值 $T$ 是通过实证研究得到的,在第3.2节中讨论。
2.1 QA知识库
我们在 2016-01-01
和 2016-06-01
之间使用我们在线客服中心的聊天记录作为我们原始的数据源(客户和员工之间的对话)。我们通过将每个问题与一个相邻近的答案配对来构建QA对。在需要的时候,我们把连续的问题(或答案)连接在一起。之后,我们过滤出包含业务相关关键字的QA对。最后,我们获得了 9,164,834 个QA对。
2.2 IR模型
我们的检索模型采用搜索技术为每个输入找到最相似的问题,然后获得相匹配的答案。通过分词,我们为全部9,164,834 个问题构建了一个反向索引,将每个单词映射到包含该单词的一系列问题中。给定一个问题,我们将其划分为一组单词,删除停用词,将设置扩展为它们的同义词,并使用细化的集合来调用一组QA候选对。然后我们使用 BM25
来计算输入问题和检索到的问题之间的相似度,并采用最相似的匹配的答案作为答案。
2.3 生成模型
我们的生成模型建立在Seq2Seq结构上。让 $\theta_{i}={y_{1}, y_{2}, \cdots, y_{i-1}, c_{i} }$ ,通过公式 (3) 在位置 $i$ 上生成一个单词$y_i$的概率,$f$ 是一个计算概率的非线性函数,$s_{i-1}$是位置$i-1$的输出的隐藏状态,$c_i$是上下文向量,取决于$
\left(h_{1}, h_{2}, \cdots, h_{m}\right)
$, 即输入序列的隐藏状态:$c_{i}=\sum_{j=1}^{m} \alpha_{i j} h_{j}$,$α{ij} =a(s{i−1}, h_j )$由一个对齐模型给出,该模型计算$j$位置的输入与$i-1$的输出的匹配程度。如下图所示。
公式理解:将给定上下文向量和前面所有的输出,求当前词的概率 => 转换为函数 f 只和上一个输出 $y_{i-1}$ 和隐状态 $s_{i-1}$ ,以及当前状态的上下文向量有关 $c_i$
$$
\begin{aligned} p\left(y_{i}=w_{i} | \theta_{i}\right) &=p\left(y_{i}=w_{i} | y_{1}, y_{2}, \ldots, y_{i-1}, c_{i}\right) \ &=f\left(y_{i-1}, s_{i-1}, c_{i}\right) \end{aligned}
$$
我们选择门循环单元(GRU)作为循环神经网络(RNN)。下面讨论一些重要的实现。
Bucketing and padding. 为了处理不同长度的问题和答案,我们采用了在Tensorflow
中提出的存储桶机制。我们使用五个存储桶 (5, 5), (5, 10), (10, 15), (20, 30),(45, 60)
来容纳不同长度的QA对,例如,长度为4的问题和一个长度为8的答案将被放在存储桶(5, 10),并在需要时使用特殊符号“PAD
”填充问题和答案。
Softmax over sampled words. 为了加快训练过程,我们将softmax
应用于一组抽样词汇(目标单词加上512随机单词),而不是整个集合。这个想法与的重要性抽样策略相似。
Beam search decoder. 在解码相位,我们使用定向搜索,在每个时刻 t 维持 top-k (k = 10)
输出序列,而不是贪婪搜索,每个时刻 t 只保留一个,以使我们的生成更加合理。
2.4 序列到序列重排模型
我们的重排模型使用同样的序列到序列模型来为输入问题的候选答案进行评分。具体地说,我们选择的是平均概率,在公式(4) 中表示为$s^{\text {Mean-Prob }}$,作为我们的打分函数(一个候选答案被视为一个单词序列 $w_{1}, w_{2}, \cdots, w_{n}$)。我们还尝试过平均互熵(Averaged Cross-Entropy
)和调和平均值(Harmonic Mean
),但它们的性能较差。
$$
s^{\text {Mean-Prob }}=\frac{1}{n} \sum_{i=1}^{n} p\left(y_{i}=w_{i} | \theta_{i}\right)
$$
3 实验
在我们的实验中,我们首先使用评分标准平均概率考察了序列到序列模型的有效性;然后我们评估了IR
, Generation
, IR + Rerank
, IR + Rerank + Generation
(我们的方法)的有效性;我们还对我们的方法和和一个基准聊天机器人引擎进行了在线A/B测试;最后,我们将我们的引擎与一个公共聊天机器人进行了比较。
为了评估,我们让业务分析人员回答每个测试问题的答案(两个实验的分析师与其他公共聊天机器人进行比较,一个用于其他实验),并标记为三个等级标签:“0”是不合适的,“1”表示这个答案只适用于某些情况,“2”表示答案是合适的。为了确定一个答案是否合适,我们定义了五个评价规则,即“语法正确”,“语义相关”、“口语流利”、“语境独立”和“不过度推广”。
一个答案只有当它满足所有的规则将会被标记为合适的,中立的如果它满足前三,并打破后两者中的任何一个,否则不合适。
我们使用 top-1 精度(Ptop1)作为标准,因为某些方法的输出可以不止一个(例如,IR)。该指标衡量的是 top-1 候选是否适合或中立,并按一下方法计算$P_{top1} = (N_{suitable}+N_{neutral})/N_{total}$,$N_{suitable}$表示被标记为合适的问题的数量(其他符号的定义相似)。
3.1 评估重排模型
我们首先比较了两个Seq2Seq模型,在3个平均标准(平均概率,平均互熵和调和平均数)使用一组随机抽取的的500个问题。表1显示了$P_{top1}$的结果,这表明带有$s^{\text {Mean-Prob }}$ 的序列到序列模型具有最好的性能。我们在重排模型中使用。
3.2 评估候选方法
我们使用600个问题集合对以下四种方法的有效性进行了评估:IR
, Generation
, IR + Rerank
, IR + Rerank + Generation
。结果如图所示。显然,建议的方法(IR + Rerank + Generation
)具有最佳的 $P_{top1}$:自信度得分阈值T=0.19,$P_{top1}$ = 60.01%。在这里,得分高于0.19(虚线的左边,600个中的535个)的问题,使用重排来回答,剩下的通过生成来处理。其他三种选择的$P_{top1}$分别为47.11%、52.02%和56.23%。请注意,如果使用更高的阈值(例如0.48),或者以不同的方式进行重排和生成更多数据,那么可以实现更高的$P_{top1}$。我们使用较低的阈值,因为序列到序列生成的不可空性和可变性:随着$P_{top1}$的下降,我们获得了给更多的可控性和可解释性。
3.3 线上 A/B测试
我们在AliMe聊天,我们的在线聊天机器人引擎中实现了建议的方法,并对新的和现有的IR
方法进行了A/B
测试(问题同样分布在两种方法中)。我们随机抽取了2136个QA对,其中1089个问题由IR回答和1047有混合方法处理,并比较了它们的 $P_{top1}$。如表2所示,新方法的$P_{top1}$为60.36%,远远高于IR基线(40.86%)。