论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统

本文主要是介绍论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文笔记整理:吴涵,天津大学硕士,研究方向:自然语言处理。



来源:2019 Association for Computational Linguistics
论文链接:https://www.mitpressjournals.org/doi/full/10.1162/tacl_a_00284
开放源码:https://github.com/sumanbanerjee1/GCN-SeA

概述

面向特定领域的面向目标的对话系统通常需要对三种类型的输入进行建模,即,(i)与该域相关联的知识库,(ii)对话的历史,这是一系列话语,以及(iii)需要为其生成响应的当前话语。本文提出了一种面向目标的对话的增强记忆GCN。该模型利用(i)知识库中的实体关系图和(ii)与话语关联的依存关系图来计算单词和实体的更丰富表示形式。此外,在某些情况下,例如当对话使用代码混合语言时,依赖解析器可能不可用。在这种情况下,我们从整个语料库构造了一个共现矩阵,并使用该矩阵将图结构强加于单词上。更具体地说,如果在句子中两个词经常同时出现,我们会在句子中的两个词之间添加一个边。我们的实验表明,这种简单的策略可以合理地替代依存关系分析树。

模型和方法

每个t轮的对话都可以看作是用户话语(U)和系统响应(S)的连续显示,并且可以表示为:(U1,S1,U2,S2,...,U t,S t)。除对话外,每个对话还伴随着与该对话相关的e个 KB(知识库)三元组,可以表示为:(k1,k2,k3,...,ke)。每个三元组都是这种形式:(entity1,relation,entity2)。在任何第i轮对话:给出:
(1)    dialogue history H =( U1, S1, U2, ..., S i−1),
(2)    the current user utterance as the query Q = Ui
(3)    the associated knowledge graph Gk
目标:生成Si。
利用知识库中的图结构和话语中的句法结构来生成适当的响应,提出以下模型:

1. Query Encoder

查询Q = Ui是对话中的第i个(当前)用户话语,包含| Q |个标记。我们将第i个标记在查询中的嵌入表示为qi。我们首先通过将这些标记传递给双向RNN来计算这些标记的上下文表示:

注:双向RNN假设当前t的输出不仅与之前序列有关,还与之后的序列有关。

现在,考虑由图G表示的查询语句的依存关系分析树,我们使用特定于查询的GCN对GQ进行操作。把 作为第一层GCN的输入

查询特定GCN的第k跳中的节点表示形式计算如下:

W、g:第k跳边缘指定方向的查询-GCN的权重和偏差。其中:

2. Dialogue History Encoder

对话的history H包含| H |个标记,我们用pi表示第i个标记在历史中的嵌入。再次,我们首先使用双向RNN计算这些标记的隐藏表示形式:

现在,我们为历史记录中的每个句子计算一个依存关系分析树,并将所有树共同表示为一个图G。此图将仅包含属于同一句子的单词之间的边,并且跨句子的单词之间没有边。然后,我们使用特定历史的GCN对这个图G进行操作,该操作将St作为第一层的输入。历史特定GCN的第k跳中的节点表示形式计算如下:

V、o: 特定于边缘方向的历史-第k跳中的GCN权重和偏差

3. KB Encoder

Gk是描述与对话相关的知识图中实体之间的关系的图。假设有m个这样的实体,我们将对应于第i个实体的节点的嵌入表示为ei。然后,我们运行特定于知识库的GCN。特定于KB的GCN的第k跳中的节点表示为:

与句法GCN的情况类似,我们还向EK添加了逆边缘,以便允许信息在知识图中的实体对的两个方向上都流动。

4. Sequential Attention

我们使用RNN解码器生成响应的标记,并将解码器的隐藏状态表示为:

其中:T是总共的解码器时间步长 

为了从查询GCN的最终层(k = f)获得节点向量的单个表示形式,我们使用下面的Attention机制:

其中:V、W1、W2都是参数。此外:在每一次解码循环中,我们会根据查询上下文向量 计算历史中每个节点/标记的注意力得分,从而从history-GCN的最后一层获取查询感知表示。其中:

其中:V2、W3、W4、W5是参数。最后,我们通过使用下面的计算KB-GCN的最后一层中所有节点的注意力得分来获得知识库的查询和历史记录表示

5. Decoder

a. 解码器的两个条件:
(1)包含history和KB的上下文
(2)对话中最后/前一个话语的查询
b. 我们使用一个聚合器来学习对历史和KB组件的整体关注。这些注意力得分:θHt和θKt取决于相应的上下文向量和先前的解码器状态dt-1。最终上下文向量的获取方式为:

在每个时间步,解码器都会使用以下公式计算词汇表上的概率分布:

其中:Wt: 第t时间步的解码器输入。V’和b’: 参数。Pvocab: 整个词表的概率分布 时间步t的损失:  ,其中Wt*是真实回答的第t个字。
总损失:每个时间步损失的平均值。

6. Contextual Graph Creation

于对话历史记录和查询编码器,我们使用依赖关系分析树来捕获编码中的结构信息。但是,如果对话以语言显示,则不存在依赖关系解析器,那么我们需要一种从话语中提取图形结构的替代方法。

在上下文语境是整个句子时,一个可行的简单方案是创建一个词共现矩阵。一旦有了这样的共现矩阵,对于给定的句子,如果两个单词的共现频率高于阈值,则可以在两个单词之间连接边。

词共现矩阵可以包含共现频率计数或正向PMI值(衡量两个事物的相关性)。

实验数据集

(1)经过修改的Bordes的DSTC2数据集。基于饭店餐桌预订的任务,并包含人类与机器人之间真实对话的文字记录。删除对话状态注释,并且仅存在原始话语-响应对以及每个对话的一组相关的KB三元组。
(2)由Banerjee最近发布的修改的DSTC2的代码混合版本,它通过以四种语言将修改后的DSTC2(En-DSTC2)的英语版本的语音代码混合在一起来收集此数据集:Hindi (Hi-DSTC2), Bengali (Be-DSTC2), Gujarati (Gu-DSTC2), and Tamil (Ta-DSTC2)。
(3)对两个目标导向的对话数据集进行了实验,这些数据集包含人类之间的对话,其中对话以Oz向导(WOZ)的方式收集。
(4)Cam676数据集(Wen等,2017),其中包含来自餐厅领域的676 KB-grounded对话以及MultiWOZ(Budzianowski等,2018)数据集,其中包含10438个对话。

实验结果

所有代码混合语言上,我们的模型均优于基准模型。从所有语言的结果中得出的一个普遍观察结果是,RNN + GCN-SeA的性能优于GCN-SeA。

BLEU和ROUGE得分表明,我们模型的响应更加流畅。它也根据对话目标产生正确的实体,但未能提供足够的可请求位置。

在MUL上,模型能够产生流畅的响应,但由于多个域的复杂性增加,因此难以提供正确的实体。但是,由成功率可以看出,模型仍然提供了大量正确的可请求插槽位。这是因为多个域(hotel, restaurant, attraction, hospital)具有相同的可请求插槽位(address,phone,postcode)。

所有语言在GCN-SeA + Random方面的性能下降。这表明依赖关系和上下文结构起着重要作用,不能被随机图代替。

RNN-Bahdanau的注意力机制要比GCN-Bahdanau的注意力机制要好。

在自发对话的嘈杂环境中,例如DSTC2数据集中显示的那些,我们的模型响应是有利的。但是,在用于人与人对话的WOZ环境中,对话的自发性较低。

总结

作者证明了具有结构意识的表示形式在面向目标的对话中很有用,并且得到的模型优于四个对话数据集上的现有方法。除使用GCN注入依赖关系图和上下文图的结构信息,以丰富对话上下文和KB的表示形式。还提出了一种顺序注意力机制来结合:
(1)当前查询 (2)会话历史 (3)KB

最后,作者凭经验表明,当依赖解析器不适用于某些语言(例如代码混合语言)时,则可以使用词频出现频率和PPMI值 提取上下文图并将其与GCN配合使用以提高性能。

 


 

OpenKG

开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

点击阅读原文,进入 OpenKG 博客。

这篇关于论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851138

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F