建立人机对话系统是人工智能领域最具挑战性的课题之一。现有的对话系统构建工作主要分为两类:
本文基于检索,研究了多轮对话的回复选择:
注:文中将等待回复的最后一条消息定义为“查询”(query),将包含查询的会话历史定义为“上下文”(context),将上下文中的每一条消息定义为“话语”(utterance)。
给定上下文C、当前查询Q和候选回复R,建立函数g(C,Q,R)预测候选回复为正确回复的概率,而上下文中的信息由上下文、话语、词、字符四个层次构成。
模型自底向上,将计算从字符级组织到上下文级。在每一层中,首先使用hierarchical representation 层次表征模块来构造上下文、回复和查询的表示。然后应用triple attention三重注意机制对表征进行更新。最后,以回复为中心,对它们进行匹配,并融合结果进行预测。
字符级别:
xt:t+sj−1为embedding (xt, …, xt+sj−1)的连接,sj是第j个filter的size,把单词中的字符embed到固定大小的向量,然后使用CNN和最大池化得到每个单词的字符级嵌入矩阵ch
词级别:
使用预训练好的词向量对词x进行embedding,并引入词匹配特征MF,如果一个词同时出现在R和C或者Q中,MF设为1,否则设为0,使得模型对这种共有词更加敏感。令We为预训练的词向量,ch(x)为字符向量函数,得到词嵌入表征e(x)
再使用共享的双向LSTM得到每个单词的单词级嵌入矩阵h(x)
话语级别:
上下文级别:
将每个话语级表征输入另一个双向LSTM层中,得到第k个话语在上下文级的表征ck。
BAF:双向注意函数,用来计算两个序列之间的attention并输出它们的新表示。
为了建立三元组
BN为batch normalization layer ,有利于防止梯度的消失或爆炸。BAF通过两个方向的关注对两个序列(P, Q)产生新的表示:
说明:按照Triple Attention图示,Q2, R1 = BAF(R, Q) 和C2, R2 = BAF(C, R),此处应为原文公式错误
令Attpq、Attqp 为P和Q之间双向注意力,BAF对两个序列 (P, Q) 生成新的双向表征P`、Q`:
Triple匹配:
使用三重注意力机制产生的表示,对每一层
融合:
将4个结果拼接,输入层次RNN(bi-LSTM)并池化,将匹配结果编码为单个特征向量v,其中m∈M 为R中一个单词的匹配结果
预测:
可以将预测C、Q和R之间的匹配分数看作是一个二分类任务,最小化预测值和真实值之间的交叉熵损失。
1)Ubuntu对话语料库,是最大的公共多轮对话语料库,包含了特定领域的大约一百万次对话。
2)DouBan对话语料库,与Ubuntu语料库格式相似,但为开放域对话,使用中文。
对于Ubuntu语料库,使用n个候选响应中第k个位置的查全率(Rn@k)作为评价指标,对于豆瓣语料库,使用MAP(平均平均精度)、MRR(平均倒数排名)和Precision-at-one作为附加指标
预训练词向量使用GloVe,字符级卷积核为尺寸为3、个数为200。所有biLSTM层的隐藏大小为200。使用Adamax优化器、初始学习率为0.002。设置集成模型,使用不同的随机种子为每个语料库生成6个模型,并通过投票合并结果。
实验结果分为三个部分:非注意模型、基于注意力的模型和我们的模型
斜体表示之前的最佳结果,加粗的分数表示没有任何预训练层的单一模型的最新结果
-TAM表示去掉三重注意和匹配部分
-Atri表示去掉三重注意,即对 在每个层次上用它们的原始表示(不使用triple attention来更新表示)
-Query表示去掉和查询相关的所有部分,即注意力和匹配只对计算(查询的信息仍然包含在上下文中) 字母“A”代表triple attention的部分,“M”是triple match的部分
1)移除Query后虽然上下文中仍包含查询信息,但性能也明显下降了,说明有必要对查询单独建模
2)上下文和回复的attention移除后下降最多(R10@1下降0.6%),表明上下文和回复的关系最重要
3)去掉上下文与回复之间的匹配后,模型的性能明显下降(R10@1中为2.1),表明
4)删除上下文级和字符级后结果下降的最多,说明应当更多地关注最高和最低级别的信息,且删除其他两个级别也有显著下降,所以每个级别都不可或缺
消融实验表明层次表征和三重注意对性能的提升都是有所贡献的。
图示为Ubuntu语料库中的一个例子,上面是A和B之间的对话,A想卸载ip扫描仪,当前查询的是关于包的格式,所以真实的回应是关于格式,但现有的对话模式很容易被高频术语“安装”所误导,因为它们以同样的方式处理查询和其他话语。
拿示例中的查询、回复、上下文(仅展示了其中语义丰富的一句)三项的attention在词级别进行可视化:
1)中,查询会对上下文里的关键词package更注意,这样也更有利于找到谈话话题,而上下文会对查询的关键词deb file附近的a更感兴趣(可能由于a的表示从BiLSTM中学到了临近词的信息)
2)中,查询的注意主要集中在词“format”上,这是回复中最重要的词。但回复没有捕获查询中的重要单词
3)
也就是说每一次attention都可以抓住一些重要信息,但也会错过一些有用信息。如果在查询上-下文和回复-上下文的attention中加入信息,就可以捕获该上下文中最重要的信息。此外,查询-回复的attention可以帮助捕获回复中最重要的词。因此,TripleNet可以很好的选择正确答案,因为它可以将这三个attention整合。
本文还讨论了不同话语在上下文中的重要程度,结果发现最后3个语句比其他9个语句更重要,而Query比其他任何话语都重要,因此对其单独建模要比以相同的方式处理所有12个语句的效果要好;要更多地关注Query附近的话语,因为它们的重要性更高。
本文提出了一种用于多轮对话回复选择的TripleNet模型。我们对上下文从低(字符)到高(上下文)层次进行建模,通过
实验结果表明,该模型在Ubuntu和豆瓣语料库上,从特定领域到开放领域,从英语到汉语,均取得了较好的效果,证明了该模型的有效性和泛化性。
paper下载地址:
TripleNet: Triple Attention Network for Multi-Turn Response Selection in Retrieval-based Chatbots
这篇文章发表于CONLL2019,沿用了SMN的思想,对文本进行了更加多粒度的表示(也就是文中的层次表征),虽然已经不是SOTA,但是可以借鉴的地方也很多,模型结构非常清晰,并关注到了上下文-查询-回复之间的关系。