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

2024-03-17 18:04

本文主要是介绍GRACE:梯度引导的可控检索增强基于属性的生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在本文中,我们提出通过梯度引导的可控检索(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节),直到满足属性要求。

这篇关于GRACE:梯度引导的可控检索增强基于属性的生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 3723 kruscal,反边取最大生成树。

题意: 需要征募女兵N人,男兵M人。 每征募一个人需要花费10000美元,但是如果已经招募的人中有一些关系亲密的人,那么可以少花一些钱。 给出若干的男女之间的1~9999之间的亲密关系度,征募某个人的费用是10000 - (已经征募的人中和自己的亲密度的最大值)。 要求通过适当的招募顺序使得征募所有人的费用最小。 解析: 先设想无向图,在征募某个人a时,如果使用了a和b之间的关系

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip