GRACE:梯度引导的可控检索增强基于属性的生成

news2024/11/19 17:45:29

在本文中,我们提出通过梯度引导的可控检索(GRACE)来增强基于属性的生成,考虑到目标属性(见图1)。具体来说,我们训练一个鉴别器来计算给定上下文的属性分布。我们构建了一个检索库,存储了从未标注数据中提炼出的自然文本及其语义和属性信息。生成模型通过可控检索提取具有相似语义的与属性相关的信息。我们设计策略来从检索结果中分离无关属性,并将预训练语言模型(PLM)表示融入生成过程中。此外,我们提出了一个算法,该算法基于梯度迭代修正逐步生成。通过优化目标属性,算法检索出具有更强烈属性强度的信息,从而提高生成文本的属性相关性。

image.png

主要工作

(1) 我们提出了一种基于属性的生成框架,该框架利用具有可控检索的未标记语料库。
(2) 我们设计了一种梯度引导生成算法,该算法迭代地引导检索以合适的属性生成。
(3) 我们的方法在属性可控性和流畅性方面超越了情感和主题控制生成的强大基线。

方法

模型架构

image.png
图 2:GRACE 的架构。操作步骤演示了以积极情绪为目标属性的基于属性的生成的第 i 步。给定前缀“事件似乎”,GRACE 生成“uneventful”(步骤 1 到 3),更新梯度引导生成的上下文表示(步骤 4 到 8),并接受“perfect”作为所需输出(步骤 9) 。

我们的框架包含三个部分(见图2):(1) 属性鉴别器通过一个鉴别器 D D D进行属性分类,以评估给定上下文是否满足目标属性。 (2) 检索库构建了一个带有未标注语料库的库 R R R,该库携带了上下文 X n X_n Xn到其下一个词 x n + 1 x_{n+1} xn+1的映射。 R R R支持读取操作,以提供与查询语义相似且与目标属性相关的信息。 (3) 生成器基于前缀和预训练语言模型 G G G生成句子。在每一步, G G G R R R检索(读取)信息,减少特定领域词汇的影响,并将其融入神经网络模型中以生成下一个词。

上述模块协作进行基于属性的生成。我们设计了一个梯度引导的检索生成框架,该框架在每一步引导生成朝向目标属性,并完善梯度引导的检索文本,其中梯度尊重目标属性。

属性鉴别器

D D D 由上下文编码器、分类层和语言建模层组成。编码器将文本传输为上下文表示。分类层将上下文表示映射到属性向量,该属性向量可用于通过附加的 s o f t m a x softmax softmax 层进行属性分类。语言建模层将上下文表示映射到单词概率分布。我们使用编码器和分类层执行分类。为了获得 D D D,我们使用预训练的语言模型初始化编码器和语言建模层。然后,我们在分类数据集上微调编码器和分类层。

检索储存库

存储库建立

在本节中,我们将讨论如何构建检索库。我们在未标注的语料库上构建了一个检索库R,这个库是利用我们的判别器D和生成器G生成的。该库包含了许多项,每一项都包含三个向量 ( r s , r c , v c ) (r^s, r^c, v^c) (rs,rc,vc),分别代表语义、属性增强的语义以及给定上下文的属性分布。

对于一个句子 X n = { x 1 , x 2 , … , x n } X_n = \{x_1, x_2, \ldots, x_n\} Xn={x1,x2,,xn},我们定义其任意子序列为 X i = { x 1 , x 2 , … , x i } X_i = \{x_1, x_2, \ldots, x_i\} Xi={x1,x2,,xi} 对任意的 i ≤ n i \leq n in。为了构建库 R R R,对语料库中每个句子的每个子序列 X i X_i Xi,我们采取以下步骤:

  1. G是一个固定的预训练语言模型(PLM),我们通过 G G G中的文本编码器计算 X i X_i Xi 的上下文表示 r s r^s rs
  2. 我们将 X i X_i Xi 喂给 D D D的编码器以获得其属性增强的上下文表示 r c r^c rc
  3. 我们将 X i + 1 X_{i+1} Xi+1 喂给 D D D的编码器然后是分类层,以获得其属性向量 v c v^c vc。最终,我们将 ( r s , r c , v c (r^s, r^c, v^c (rs,rc,vc)定义为 X i X_i Xi 的库项(请参见图2中的库项)。注意, v c v^c vc 衡量的是考虑当前子序列的下一个词的属性分布。

储存库检索

可控检索找到与查询相似且与目标属性相关的仓库项。为了检索给定的查询文本,我们将上下文提供给生成器G,以获得文本表示 r s r^s rs。接着,我们搜索与查询的 r s r^s rs高度相似的项,从仓库中检索出前文提到的 r s r^s rs。进一步,我们检索两组具有高属性相关性的项作为检索结果。

P k N N ( x i + 1 ∣ c , X i ) ∝ P k N N ( x i + 1 ∣ X i ) ⋅ P ( c ∣ X i , x i + 1 ) (1) P_{kNN}(x_{i+1}|c, X_i) \propto P_{kNN}(x_{i+1}|X_i) \cdot P(c|X_i, x_{i+1}) \tag{1} PkNN(xi+1c,Xi)PkNN(xi+1Xi)P(cXi,xi+1)(1)

检索的理念遵循公式1中受Krause et al.(2021)启发的启发式。在检索结果中,更高的 P k N N ( x i + 1 ∣ c , X i ) P_{kNN}(x_{i+1}|c, X_i) PkNN(xi+1c,Xi)指示(1)下一个词 x i + 1 x_{i+1} xi+1与子序列 X i X_i Xi之间更好的语义连贯性,以及(2)与属性c更高的属性相关性。我们设计了以下策略来对这两个概率进行建模:

• 语义检索。为了提高 P k N N ( x i + 1 ∣ X i ) P_{kNN}(x_{i+1}|X_i) PkNN(xi+1Xi),我们搜索与上下文 X i X_i Xi在语义上相似的项。如图2的第一步,我们取 X i X_i Xi的上下文表示 r X i s r^s_{X_i} rXis作为输入。我们根据存储项的上下文表示 r s r^s rs r X i s r^s_{X_i} rXis之间的相似度,搜索仓库中的K个最近项。该算法返回一组 N \mathcal{N} N,它提供辅助语义信息以促进下一个词的预测(Khandelwal等,2020)。

• 属性检索。我们选择了两个高度属性相关的子集以增加 P ( c ∣ X i , x i + 1 ) P(c|X_i, x_{i+1}) P(cXi,xi+1)。首先,我们从 N \mathcal{N} N中选择项来组成一个子集 N + \mathcal{N}^+ N+,其中项的属性向量 v c v^c vc与目标属性c之间的相似度超过了一个阈值p。这个相似度是项的属性向量 v c v^c vc与c的独热表示之间的余弦相似度。 v c v^c vc衡量了考虑下一个子序列词的属性分布。因此,我们通过考虑下一步生成偏好来增加c的可能性。我们用 ¬ c \neg c ¬c表示反目标属性,并按照上述程序考虑 ¬ c \neg c ¬c得到 N − \mathcal{N}^- N。(以下章节3.3.1使用 N − \mathcal{N}^- N来消除检索信息中的领域偏见)。通过这种方式,我们获得了属性与目标属性最相关的项。

最终,检索操作返回 N + \mathcal{N}^+ N+ N − \mathcal{N}^- N。这两个集合包含了与目标属性和非目标属性高度相关的项。注意, N + \mathcal{N}^+ N+ N − \mathcal{N}^- N中的上下文表示在语义上与当前子序列一致。

生成器

生成器 G 根据给定前缀生成文本并考虑目标属性。在每个生成步骤中,G 从 R 中检索,从检索结果中删除不相关的域偏差,并将它们集成到生成模型中以生成下一个标记。

表示去偏

我们解决了从检索到的信息中产生的领域偏差,并旨在消除生成序列中的领域特定信息。我们将这个处理称为“去偏”。在大多数现有的基于属性的生成方法中,领域偏差存在于生成文本中,其属性与文本领域相冲突,因为基于属性的训练语料通常来自有限的一组领域(Yu等人,2021)。

在第i步生成时,G编码当前子序列以查询仓库R,以获得两组项: N + \mathcal{N}^+ N+ N − \mathcal{N}^- N。之后,我们将每组中的属性增强的上下文表示 r c r^c rc输入到D的语言模型层以获得下一个词的概率分布。然后,我们平均每个集合中的值,并获得 P k N N + ( x i + 1 ∣ c , X i ) P^+_{kNN}(x_{i+1}|c, X_i) PkNN+(xi+1c,Xi) P k N N − ( x i + 1 ∣ ¬ c , X i ) P^-_{kNN}(x_{i+1}|\neg c, X_i) PkNN(xi+1∣¬c,Xi) N + \mathcal{N}^+ N+ N − \mathcal{N}^- N。最后,我们计算它们的差异,以得到 Δ P ( x i + 1 ∣ c , X i ) = P k N N + ( x i + 1 ∣ c , X i ) − P k N N − ( x i + 1 ∣ ¬ c , X i ) \Delta P(x_{i+1}|c, X_i) = P^+_{kNN}(x_{i+1}|c, X_i) - P^-_{kNN}(x_{i+1}|\neg c, X_i) ΔP(xi+1c,Xi)=PkNN+(xi+1c,Xi)PkNN(xi+1∣¬c,Xi)

直觉是,当检索库在领域特定表达上丰富时,单独c的检索结果可能会产生许多不一定与所需属性相关的领域特定语言模式。然而,如果一个词在同时检索c和 ¬ c \neg c ¬c时都有高概率,那么这个词很可能对领域而不是目标属性c至关重要。如果 P k N N + ( x i + 1 ∣ c , X i ) P^+_{kNN}(x_{i+1}|c, X_i) PkNN+(xi+1c,Xi)较高,而 P k N N − ( x i + 1 ∣ ¬ c , X i ) P^-_{kNN}(x_{i+1}|\neg c, X_i) PkNN(xi+1∣¬c,Xi)相对较低,这表明 x i + 1 x_{i+1} xi+1对领域不重要,但对目标属性至关重要。因此,上述操作消除了 X i X_i Xi的语义相似邻居中来自R仓库语料的领域偏差。

表示整合

我们设计了一个策略来整合去偏信息到PLM的概率中,以产生下一个词。直觉上,如果一个词与给定上下文一致并且与目标属性密切相关,则该词是理想的。我们将PLM在G中的词概率表示为 P L M ( x i + 1 ∣ X i ) P_{LM}(x_{i+1}|X_i) PLM(xi+1Xi),并将其整合如下:

S f u s e ( x i + 1 , c , X i ) = λ Δ P ( x i + 1 ∣ c , X i ) + ( 1 − λ ) ∗ P L M ( x i + 1 ∣ X i ) (2) S_{fuse}(x_{i+1}, c, X_i) = \lambda \Delta P(x_{i+1}|c, X_i) + (1 - \lambda) * P_{LM}(x_{i+1}|X_i) \tag{2} Sfuse(xi+1,c,Xi)=λΔP(xi+1c,Xi)+(1λ)PLM(xi+1Xi)(2)

在公式2中, λ \lambda λ是一个衡量在预测下一个词时目标属性c的可控性的因子。我们考虑 λ ( i ) \lambda(i) λ(i)作为一个与步骤i线性递减的控制信号:

λ ( i ) = { λ m i n − λ 0 I ∗ i + λ 0 i ≤ I λ m i n i > I \lambda(i) = \begin{cases} \frac{\lambda_{min} - \lambda_0}{I} * i + \lambda_0 & i \leq I \\ \lambda_{min} & i > I \end{cases} λ(i)={Iλminλ0i+λ0λminiIi>I

其中 λ 0 \lambda_0 λ0是在第0步时的初始比率, λ m i n \lambda_{min} λmin是最小比率,I是一个预定义的步骤数。在固定的 λ 0 \lambda_0 λ0 λ m i n \lambda_{min} λmin下,一个较大的I允许更多步骤获得更高的可控性。

整合之后,我们对得分进行归一化,并使用现有的解码策略(例如,top-k抽样)来生成下一个词。

梯度引导的生成

我们提出了一种梯度引导的生成方法,以引导生成过程朝向目标属性。我们在每一步迭代评估当前子序列,并对其进行修订,直到其属性变得令人满意。

• 子序列评估。我们评估当前子序列是否满足目标属性。我们将在第i步生成的词 x i + 1 x_{i+1} xi+1与当前子序列 X i X_i Xi拼接,得到 X i + 1 X_{i+1} Xi+1。然后,我们将 X i + 1 X_{i+1} Xi+1输入到判别器D中,确定它是否与目标属性匹配(见3.1节)。如果它满足目标属性,我们接受 X i + 1 X_{i+1} Xi+1进入下一个生成步骤。否则,我们保存D的编码器和分类层的梯度 Δ Θ \Delta\Theta ΔΘ来帮助更新 X i + 1 X_{i+1} Xi+1

• 梯度引导的子序列更新。我们增强子序列与目标属性的相关性,以帮助生成具有更强属性强度的词。我们优化D的编码器和分类层,根据 Δ Θ \Delta\Theta ΔΘ获得 D Θ − Δ Θ D\Theta-\Delta\Theta DΘΔΘ。我们将 X i X_i Xi输入到 D Θ − Δ Θ D\Theta-\Delta\Theta DΘΔΘ的编码器中,获得更新后的属性增强的上下文表示 r i ′ c r'^c_i ric。此外,基于 r i ′ c r'^c_i ric,我们采用3.2.2节的检索步骤和上述模块中介绍的3.3节的生成步骤,获得新的检索结果,并生成一个新词 x i + 1 ′ x'_{i+1} xi+1。到目前为止,我们已经完成了一次梯度引导生成的迭代。

D Θ − Δ Θ D\Theta-\Delta\Theta DΘΔΘ被优化以朝向目标属性时,其编码器产生的上下文表示包含更丰富的与属性相关的信息,这有助于检索与目标属性匹配的文本。因此, r i ′ c r'^c_i ric在检索时与与目标属性更相关的项匹配,进而帮助生成下一个与期望属性更相关的词 x i + 1 ′ x'_{i+1} xi+1

在我们的框架中,我们首先训练判别器D(见3.1节)并建立检索仓库R(见3.2.1节)。在第i步生成时,我们遵循3.2.2节的检索步骤,并使用G生成一个新词(见3.3节)。之后,梯度引导的生成(见3.4节)通过迭代优化生成结果,这需要调用检索(见3.2.2节)和生成(见3.3节),直到满足属性要求。

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

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

相关文章

用python写网络爬虫:2.urllib库的基本用法

文章目录 urllib库抓取网页data参数timeout参数更灵活地配置参数登录代理Cookies 参考书籍 建议新入门的小伙伴先看我同一专栏的文章:用python写网络爬虫:1.基础知识 urllib库 urllib是python中一个最基础的HTTP库,一般是内置的,…

数字经济时代,数据清洗不是件小事

对于企业来说,数据无疑是当前时代业务增长和发展决策的核心要素,也是数字经济探索中的基础建设。不过随着数字化的加速普及,企业需要存储、处理的数据越来越多,海量的数据已经让企业难以理解,很难全面进行利用。尤其是…

数字化转型下的新质生产力:赋能未来发展新引擎

1. 引言:数字化转型与新质生产力的交融共生 在信息化、智能化的新时代,数字化转型已经成为推动经济社会发展的重要力量。而新质生产力,作为面向新兴领域和未来产业的先进生产力,正在数字化转型的浪潮中焕发出新的生机与活力。 数…

机器人路径规划:基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(提供Python代码)

一、深度优先搜索算法介绍 深度优先搜索算法(Depth-First-Search)的基本思想是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已…

PTA-练习3

目录 实验4-2-3 换硬币 实验4-2-4 输出三角形字符阵列 实验4-2-5 输出整数各位数字 实验4-2-6 梅森数 实验4-2-7 找完数 实验4-2-9 水仙花数 实验6-2 英文字母替换加密(大小写转换后移1位) 实验6-5 简单计算器 实验6-10 统计单词的长度 实验4-2…

财富池指标公式--通达信主力资金指标公式,主力资金流向怎么看?

今日分享的通达信主力资金指标公式,是一个分析主力资金进出的指标。 具体信号说明: 当紫色的起涨点主力资金线和红色的拉升资金同时上传0线,并且紫色的拉升线超过资金线,大盘进入派发阶段,后市看涨,是参考…

pinia 的选项式和组合式的不同写法和持久化的方法

pinia 是vue3推荐的状态管理插件,它对标的是vue2中使用的vuex pinia 的引入方法 npm 安装 pinia在 src/store/index.js 中 创建一个pinia 的实例,并导出 在项目中的 main.js 中引入 2 中的pinia 并且使用 app.use(pinia) main.js中 import pinia from…

100天精通Python(实用脚本篇)——第118天:基于selenium和ddddocr库实现反反爬策略之验证码识别

文章目录 专栏导读一、前言二、ddddocr库使用说明1. 介绍2. 算法步骤3. 安装4. 参数说明5. 纯数字验证码识别6. 纯英文验证码识别7. 英文数字验证码识别8. 带干扰的验证码识别 三、验证码识别登录代码实战1. 输入账号密码2. 下载验证码3. 识别验证码并登录 书籍推荐 专栏导读 …

第111讲:Mycat实践指南:固定Hash算法分片下的水平分表详解

文章目录 1.固定Hash算法分片的概念1.1.固定Hash算法的概念1.2.固定Hash算法是如何将数据路由到分片节点的 2.使用固定Hash算法分片对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现固定Hash算法分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分…

VMware虚拟机和主机之间无法复制粘贴,移动文件,重新安装vmware-tools变灰,VMware Tools继续运行脚本未能在虚拟机中成功运行。

起初,虚拟机只是无法和主机之间进行复制粘贴,移动文件。查询了很多资料,反反复复地安装卸载vmware-tools,但是都没有成功。通过这篇文章:虚拟机安装VMware Tools的两种方法_vmware tools有3种安装方式-CSDN博客 安装了vmware_too…

PCIE收发时序了解

文章目录 一、Pcie的发送时序1.1 不带数据的TLP包1.2 带数据的TLP包1.3 连续发送数据的TLP包 二、Pcie的接收时序2.1 不带数据的TLP包2.2 带数据的TLP包2.3 连续接收数据的TLP包 三、riffa框架和用户channel的接口3.1 RX接口波形:3.2 TX接口波形: 一、Pc…

用python写网络爬虫:3.urllib库进一步的使用方法

文章目录 异常处理URLErrorHTTPError设置超时时间 链接的解析、构造、合并urlparse方法urlsplit方法urljoin方法urlencode方法parse_qs方法quote方法 Robots 协议Robots 协议的结构解析协议 参考书籍 在上一篇文章:用python写网络爬虫:2.urllib库的基本用…

SpringBoot3整合Knife4j4.x版本(Swagger3、OpenApi3)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot3整合Knife4j4.x版本(Swagger3、OpenApi3) ⏱️ 创作时间&a…

【每日力扣】131.分割回文串与450.删除二叉搜索树中的节点

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。 131.分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的…

C#使用MiniExcel读取excel表格文件

使用MiniExcel读取excel表格文件 MiniExecl提供了几种读取方法。 准备测试数据 测试类: public class Person{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public double Value { get; set; }}测试数据…

伦敦数据科学与Scikit-learn:一次探索与实践的旅程

1.题目 Data Science London正在举办一场关于Scikit-learn的聚会。 这个比赛是尝试、分享和创建 sklearn 分类能力示例的练习场(如果这变成了有用的东西,我们可以跟进回归或更复杂的分类问题)。Scikit-learn(sklearn)…

Django项目不显示图片,路径找不到

1.问题 创建Django项目简单写一个网页,文字能显示,图片却无法加载,路径错误,找不到图片。 2.背景 我的项目结构 C:. ├─.idea │ └─inspectionProfiles ├─app01 │ ├─migrations │ ├─templates │ │ ├─app0…

postgres让别人连接自己本地的库

本地安装了postgres,一般只能自己连接,如果别人想要连接我们自己的库,需要修改postgres的配置。 找到pg.gba.conf,路径是:postgres安装路径/PostgreSQL/data 使用记事本打开这个文件,将别人的ip填入其中即…

Python数学建模-2.5Pandas库介绍

2.5.1Pandas基本操作 Pandas是一个强大的Python数据分析库,它提供了快速、灵活且富有表现力的数据结构,设计初衷是为了处理关系型或标记型数据。Pandas的基本操作涵盖了数据的读取、处理、筛选、排序、分组、合并以及可视化等多个方面。 以下是一些Pan…

CentOS7环境——yum安装nginx

目录 1.修改yum源为阿里云 2.下载wget 3.下载阿里云的 CentOS-Base.repo 到/etc/yum.repos.d/ 4.清空原本yum缓存 5.生成新的阿里云的yum缓存,加速下载预热数据 6.下载epel-release 7.下载nginx 8.启动并检查nginx状态 1.修改yum源为阿里云 cp /etc/yum.re…