Commonsense and Named Entity Aware Knowledge Grounded Dialogue Generation

news2024/11/15 17:53:17

摘要

motivation:
以外部知识为基础,在对话历史背景下解释语言模式,如省写、回指和共同引用,对对话的理解和生成至关重要。
this paper:
在本文中,我们提出了一种新的开放域对话生成模型,该模型有效地利用了大规模的常识知识,以及非结构化的特定主题的知识。我们使用使用协同引用的命名实体感知结构来增强常识知识。我们提出的模型利用一个多跳注意层来保存对话历史和相关知识的最准确和最关键的部分
此外,我们采用了一个常识性的实体增强注意模块,该模块从不同来源提取的三元组开始,利用交互式对话知识模块获得的查询向量,利用多跳注意逐步找到相关的三元组支持集。

Our code is publicly available at
https://github.com/deekshaVarshney/CNTF;
https://www.iitp.ac.in/-ai-nlp-ml/resources/
codes/CNTF.zip

1. 引言

神经语言模型通常关注于较少的语言成分,如句子、短语或用于文本分析的单词。然而,语言的作用范围要广泛得多——一场对话通常会有一个中心主题,说话者会分享共同的信息,以便相互理解。信息经常被重复使用,但是为了避免过度使用,同样的东西和人都是在对话框中通过使用相关的表达式进行了多次引用。当所有这些信息都以结构化、逻辑和一致的方式传递时,对话变得连贯,说话者可以相互理解。
对话的语义理解可以通过常识性知识或世界事实来得到帮助。此外,作为一种关键的人类语言现象,共同引用简化了人类语言,同时是机器理解的重要障碍,特别是代词,由于语义薄弱而难以解析(Ehrlich,1981)。
基于反应生成方法(Ghazvininejad等人,2018;Dinan等人,2018)可以在开放领域环境中提供事实的复制,而常识知识对于创建成功的互动至关重要,因为社会构建的常识知识是人类在对话中理解和使用的上下文细节的集合。
尽管在实证评价中证明了有效性,但过去的工作也有一些显著的缺点。特别是,没有对实体、语义关系或会话结构的明确表示。为了解决这些限制,要求对话模型识别对话历史中的相关结构可以直接测试对话理解的水平。本文主要讨论命名实体级知识,并分析对话历史背景下实体的参考。
为了确保我们的模型的通用化性,我们直接以三联体的形式合并实体,这是现代知识图中最常见的格式,而不是像传统方法那样用特征或规则来编码它。
我们创建了一个名为CNTF、常识、命名实体和局部知识融合神经网络的会话模型,通过利用特定主题的文档信息和使用结构化实体和常识知识来生成成功的响应。我们首先在解析对话中的共同引用后,构造基于命名实体的三元组,以增强从概念网获得的现有常识性三元组(Speer和Havasi,2012)。我们使用多跳注意力来迭代多源信息。我们从交互式对话-知识模块中获得一个加权查询向量,该模块用于对对话、主题知识和相应的三元组进行查询。 CNTF对对话的历史和知识的句子进行推理,我们使用它从对话的背景和主题知识中过滤出相关的信息。类似地,为了对这些三元组进行推理,我们再次进行多轮迭代,屏蔽出不相关的三元组。

contribution

  1. 我们提出了CNTF,一种新的基于知识的对话生成模型,它利用对话上下文、非结构化文本信息和结构性知识来促进显式推理。
  2. 我们使用共引用解析增强了从具有命名实体感知结构的ConceptNet数据库中提取的常识三元组。
  3. 我们定义了一个有效的滑动窗口机制,以从较长的对话上下文中删除无关的信息,并确保有效的内存利用率。我们使用一个交互式对话知识模块来生成一个加权查询向量,它捕获对话和主题知识之间的交互。
  4. 通过对公开的数据集进行广泛的定性和定量验证,我们表明我们的模型优于强基线。

2. 相关工作

在本文中,我们展示了如何使用结构化和非结构化知识来改进基于文档的对话生成任务。我们提出了一种有效的基于知识的对话模型CNTF,该模型是由多源异构知识构建的。基于基于知识的对话生成基准数据集的实验。维基百科的向导和CMU_DoG,已经展示了我们提出的方法的有效性。我们的方法采用了一个大规模的命名实体增强的常识知识网络,以及一个特定领域的事实知识库来帮助理解一个话语,以及使用一个新的基于多跳注意的模型生成反应

3. 方法论

3.1 问题定义

D = { d i } i = 1 K D= \{di\} _{i=1}^K D={di}i=1K 表示一段有K轮的对话
d i = ( a i 1 , a i 2 ) d_i=(a^1_i,a^2_i) di=(ai1,ai2) 表示两个代理之间的对话交换
( a i 1 , a i 2 ) (a^1_i,a^2_i) (ai1,ai2)分别相关的文档 S i 1 , S i 2 S^1_i,S^2_i Si1,Si2包含特定主题的知识
我们通过创建三元组集来利用常识和面向命名实体的知识
τ = { τ 1 , τ 2 , . . . , τ ∣ τ ∣ } \tau=\{\tau_1,\tau_2,...,\tau_{\left| \tau\right|}\} τ={τ1,τ2,...,ττ}
τ i \tau_i τi的格式(head, relation, tail),
三元组的来源:从ConceptNet中提取话语中每个单词的关系(如果单词是来自ConceptNet中的概念单词),以及采用共参考解析法形成基于命名实体的三元组
对于第k轮对话,已知前n轮对话历史,以及和对话历史相关的知识,生成response Y = { y 1 , y 2 , . . . , y ∣ y ∣ } Y=\{y_1,y_2,...,y_{\left| y\right|}\} Y={y1,y2,...,yy}

3.2 Encoder

3.2.1 Dialogue Encoder

Dialogue Encoder在多回合对话中跟踪对话上下文,依次对话语进行编码。
每轮的输入为 x = ( x 1 , x 2 , . . . , x n ) x= (x_1, x_2, ..., x_n) x=(x1,x2,...,xn), n指的是tokens数.
对于第一轮,输入就是 a 1 1 a^1_1 a11
对于之后的l轮次,第j轮,j>1,输入是前一个回合的第二个代理的反应和当前回合的第一个代理的话语的连接, [ a j − 1 2 ; a j 1 ] [a^2_{j−1}; a^1_j ] [aj12;aj1]
然后,编码器利用BERT来获得 H D = { h i } i = 1 n H_D= \{h_i\}^n_{i=1} HD={hi}i=1n的表示。
对于对话表示,有两种状态 D S , D H D_S , D_H DS,DH
在第一轮都初始化为 H D H_D HD
然后,在接下来的轮次使用滑动窗口机制来更新 D S , D H D_S , D_H DS,DH
一个大小为“ l l l”的窗口意味着我们只连接前面的“ l − 1 l-1 l1”回合的隐藏状态。这有助于消除更长的对话上下文中的噪音和节省内存 D H D_H DH 保持固定,并存储对话上下文的隐藏状态。而 D S D_S DS在每个回合都会更新,目的是捕获适当的历史信息,以准确地生成响应。
其实就是保留前n个对话历史

3.2.2 Knowledge Encoder

[ S j − 1 ; 2 S j 1 ] [S^2_{j−1;} S_j^1] [Sj1;2Sj1] for turn j > 1, else S 1 1 S^1_1 S11
for the first turn
被截断到最大令牌计数为400。
还是使用ber进行编码得到 H K b = { h i } i = 1 m H_{Kb} = \{h_i\}^m_{i=1} HKb={hi}i=1m
m是文档的token数,m<=400
类似对话的 D S , D H D_S , D_H DS,DH ,知识文档有 K b S , K b H Kb_S ,Kb_H KbS,KbH ,都初始化为 H K b H_{Kb} HKb 与用于即将到来的回合的对话状态的滑动窗口机制不同, K b S , K b H Kb_S ,Kb_H KbS,KbH只存储从基于BERT的知识编码器中获得的当前回合的隐藏状态。

3.3 Multi-hop Attention

我们采用 dual and dynamic graph attention
mechanism
(Wang et al.,2020)来模拟人类一步一步的探索和推理行为。
在每一步中,我们假定对话和知识状态都有一些信息需要传播。
D S D_S DS is updated using the forget and add operations.每个hop的 D S , D H D_S,D_H DSDH是不同的,是存在更新的
对于hop r,

在这里插入图片描述

目标是计算 c k , t ( r ) c^{(r)}_{k,t} ck,t(r)
k是第k轮,t是第t个时间步
先计算公式(2) q k , t q_{k,t} qk,t是query embedding
v 1 ( r ) , W 1 ( r ) , W 2 ( r ) v^{(r)} _1 , W_1^{(r)}, W_2^{(r)} v1(r),W1(r)W2(r)

计算完(1),(2),(3)之后根据附录A更新 D S D_S DS
D H D_H DH是固定的

3.4 Constructing Named Entity based Triples using Co-reference Resolution

为了向现有的常识性三元组添加更多有用的链接,我们使用了从对话中提取的共引用链和命名实体。首先,我们使用AllenNLP共引用解析模块来识别对话中的共引用链。
使用命名的实体和概念作为节点,获得新的三元组集,对应的边构建如下:
(a)在同一对话中出现的每一对命名实体之间,以及
(b)在命名实体节点与同一对话框中的其他概念之间。
我们可能会注意到,首先解析共同引用,然后提取命名实体,可以确保跨多个话语的实体以某种方式连接。此外,我们显式地形成一个具有RelatedTo的三重联体,因为它很适合在大多数情况下,是因为它表示两个命名实体及其在对话中的不同引用或别名之间的关系

3.5 Commonsense and Named Entity Enhanced Attention Module

对于每个对话,最后一组三元组由常识和命名实体的三元组组成。我们从可训练的嵌入层即
E = e m b _ l a y e r ( τ ) E = emb\_layer(\tau) E=emb_layerτ
中得到了三元组的头和尾实体嵌入。形式上,一个查询用于循环三重嵌入,并计算每个跳p处的注意权值。
α k , t ( p ) = s o f t m a x ( q t ( p − 1 ) E ( p − 1 ) ) \alpha^{(p)}_{k,t} = softmax(q_t^{(p−1)}E^{(p−1)}) αk,t(p)=softmax(qt(p1)E(p1))
在这里插入图片描述
先计算5得到知识三元组的加权上下文
然后计算6来更新。使用了一种查询更新机制,其中查询嵌入使用当前步骤的加权三重嵌入进行查询。

3.6 Decoder

3.6.1 Interactive Dialogue-Knowledge Module

由于每一个话语都与特定主题的非结构化知识有关,我们采用一种交互机制来关注对话和知识句子。利用编码的加权对话上下文作为初始查询向量qt(3.5计算得到),我们可以改进从对话中提取的信息提取和知识隐藏状态,从而生成响应。为了获得加权对话上下文W HD,我们在HD和HK之间应用了如第3.3节所述的多跳注意,它们分别是从对话和知识编码器中接收到的隐藏状态。

在这里插入图片描述
decoder的隐藏状态(就是 s t s_t st)初始为3.3计算的上下文对话表示
decoder是一个词一个词的生成, e ( y t − 1 ) e(y_{t-1}) e(yt1)是生成的前一个词 ( y t − 1 ) (y_{t-1}) (yt1)的embedding
s t s_t st就可以反应对话,知识,三元组的表示

3.6.2 Fusion Block

词汇表Pg(yt)单词上的概率分布在这里插入图片描述
W 5 W_5 W5 is a trainable parameter

3.6.3 Copy Block

特别地,时间步长t时的单词要么从词汇表中生成,要么从对话历史、知识历史中复制,或者使用三元组中的实体。
t是时间步,生成一个词就是一个时间步,hop是模型multi-hop
在这里插入图片描述
在这里插入图片描述
loss就是decder的loss

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】vector的使用及其迭代器失效问题

文章目录一、vector介绍二、vector使用1. 常用构造函数2. 迭代器3. 空间操作4. 增删查改5. 动态二维数组三、vector迭代器失效问题1. 扩容导致迭代器失效2. erase导致迭代器失效3. g对迭代器失效的处理一、vector介绍 vector是表示可变大小数组的序列容器。与数组一样&#xf…

vue打包exe

文章目录一、前言二、实现方法1.跑通示例代码 electron-quick-start<1>clone示例代码<2>进入项目根目录&#xff0c;下载依赖<3>测试运行2.打包自己的 vue 项目3.将vue项目整合到示例代码中打包exe<1>将打包好的 dist 文件夹复制到示例代码 electron-q…

【Linux】gdb调试器的使用

All is well that ends well.结果好就是好。 个人主页&#xff1a;阿润菜菜 简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 Windows 操作系统中&#xff0c;我们更习惯使用一些已经集成好的开发环境&#xff08;IDE&#xff09;&#xff0c;如 VS、VC、Dev-…

LeetCode461. 汉明距离,x与y异或,之后用f(x)=x (x−1))次数与Integer.bitCount求二进制1的个数

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 1.x ^ y异或&#xff0c;用f(x)x & (x−1)&#xff09;次数求二进制中1的个数&#xff0c;那么 f(x) 恰为x删去其二进制表示中…

C语言_文件操作(上)

目录 1. 什么是文件 2. 文件名 3. 文件类型 4. 文件缓冲区 5. 文件指针 6. 文件的打开和关闭_fopen_fclose 7. 文件的顺序读写 7.1 fputc 7.2 fgetc 7.3 fputs 7.4 fgets 7.5 fscanf 7.6 fprintf 7.7 fread 7.8 fwrite 7.9 对比scanf/printf、fscanf/fprintf、…

java实现dwg转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、无奈选择第二种二、jar引入1.jar地址2.使用jar,完成dwg转为pdf总结前言 由于公司需要最近研究一个cad文件需要在浏览器中展示,经过研究发现大致有两种方式:…

JVM-围观如何打破双亲委派机制

下面手把手用代码来实现打破JVM的双亲委派机制一、Tomcat打破双亲委派机制以Tomcat类加载为例&#xff0c;Tomcat作为web容器&#xff0c; 那么它要解决什么问题呢&#xff1f;Tomcat 如果使用默认的双亲委派类加载机制行不行&#xff1f;1.1 Tomcat作为web容器&#xff0c; 那…

科技云报道:CES 2023:自动驾驶、元宇宙备受瞩目

科技云报道原创。 在被疫情扰乱了两年之后&#xff0c;2023年CES终于回归正常了。 1月5日-8日&#xff0c;CES 2023在拉斯维加斯举行。作为当前全球规模最大、影响力最广泛的消费类电子技术年展&#xff0c;本届展会涵盖的重要主题包括可持续性、数字健康、Web3与元宇宙以及人…

教你如何快速使用店铺管理系统

一、客户管理1、客户资料客户资料报表展示所有新客的数据信息&#xff0c;在此报表可进行会员开卡及新增客户操作&#xff1b;提交会员开卡表单之后&#xff0c;由数据助手更新该客户的会员卡信息至客户信息表单&#xff1b;点击新增客户弹出客户信息表单&#xff0c;默认客户分…

python自学之《21天学通Python》(8)

第11章 文件与文件系统 编写程序来解决实际项目时&#xff0c;很多时候都离不开文件和文件系统的操作。程序本身就是保存在文件系统的文件中的。文件既可以保存程序代码&#xff0c;也可以用来保存各种输入与输出数据。文件和文件系统的处理是任何高级程序设计语言必不可少的一…

Node.js教程笔记(一)

学习目标 1、初识Nodejs 2、fs文件系统模块 3、path路径模块 4、http模块 一、初识Node.js 1.1 浏览器中的JavaScript的运行环境 1、浏览器中的JavaScript的组成部分 2、为什么JavaScript可以在浏览器中被执行&#xff1f; 3、为什么JavaScript可以操作Dom和Bom&#xff…

智公网:公务员的专业限制有哪些?

公务员报考的要求越来越高了&#xff0c;尤其是限制专业这一块&#xff0c;直接阻断了很多人想要跨专业的想法。但是没有办法专业这个条件是硬性的&#xff0c;所以在报考之前一定要看清报考要求。 公务员性质也是比较特殊的&#xff0c;像是一些比较热门专业&#xff0c;在公…

线程安全☞原子性

何为原子性? 原子性&#xff1a;一条线程在执行一系列程序指令操作时&#xff0c;该线程不可中断。一旦出现中断&#xff0c;那么就可能会导致程序执行前后的结果不一致。与数据库中的原子性&#xff08;事务管理体现&#xff09;是相同的 概括&#xff1a;一段程序只能由一条…

Go语言设计与实现 -- 浅谈垃圾回收机制

概述 GC就是垃圾回收机制。而我们知道&#xff0c;内存区域是分成几个块儿的&#xff0c;例如&#xff1a; 堆区&#xff1a;为对象分配内存空间&#xff0c;在栈区和bss区之间存放函数参数&#xff0c;返回值&#xff0c;局部变量全局区&#xff1a;常量区&#xff08;const…

第一批“阳康”涌向三亚,最大的赢家或是携程

在2022年接近尾声时&#xff0c;给居民出行带来近三年困扰的疫情防控&#xff0c;终于迎来了好消息。随着国家“新十条”防控新政策的出台以及优化&#xff0c;过去出门不便、频繁查验核酸码的时代一去不返。尤其是各地逐步放宽出入境管控政策后&#xff0c;在线旅游行业也迎来…

PMP的价值有哪些?

我个人认为&#xff0c;考证只有两个出发点是正确的。一是为了提升自己或者满足自己的兴趣&#xff0c;另一个是和自己的职业规划相关。 比如&#xff0c;有同学想提升自己英语能力&#xff0c;可以考四六级&#xff0c;或者更厉害一点的考雅思、托福。比如&#xff0c;有的同…

电脑自动关机是什么原因?4个解决方法,赶紧码住收藏!

正在使用电脑&#xff0c;突然自动关机。如果没有及时保存好资料&#xff0c;我们辛辛苦苦写的资料就会付诸东流。电脑自动关机是什么原因&#xff1f;其实主要是以下这4个方面的原因。你可以根据下面不同的原因来对症下药&#xff0c;寻找解决电脑自动关机的最好方法&#xff…

直播弹幕系统(七)- 利用动态创建队列完成直播间独立聊天

直播弹幕系统&#xff08;七&#xff09;- 利用动态创建队列完成直播间独立聊天前言一. 动态创建队列1.1 测试 - 动态创建队列1.2 测试 - 聊天室独立前言 上一篇 SpringBoot STOMP RabbitMQ&#xff08;使用MQ替代Spring代理&#xff09; 中主要讲解了如何整合STOMP以及Rabb…

Vue条件语句中v-if、v-else、v-else-if的用法

文章目录1、v-if和v-else结合使用1.1 出现的错误2、v-if、v-else-if和v-else的联合使用2.1 出现的错误3、如果想要同时切换多个元素3.1 效果展示1、v-if和v-else结合使用 v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面&#xff0c;否则它将不会被识别。 <span…

智能指针(二) shared_ptr 注意点

智能指针(二) shared_ptr 注意点 1 不存在 int * 到 shared_ptr 的隐式类型转换 void proc(shared_ptr<int> ptr) {cout << "ptr.use_count()" << ptr.use_count() << endl;cout << "调用成功" << endl;return; }in…