深入浅出对话系统——可控文本生成

news2024/12/28 3:58:01

引言

主要是介绍一篇引用800+的论文 CTRL: A Conditional Transformer Language Model for Controllable Generation

它的Pytorch源码在 https://huggingface.co/transformers/v3.1.0/_modules/transformers/modeling_ctrl.html

主要思想是通过加入控制代码(control code)来控制文本生成的风格/内容。

基于GPT的文本生成大家认为生成的内容是无用的废话,通常是基于prompt去生成的。那么如何控制文本生成的质量和内容是本篇论文思考的一个点。

这些控制代码可以代表领域、风格、主题、内容等。这些控制代码是预定好的,在训练的时候把控制代码和相关的文本放在一起进行训练。

LANGUAGE MODELING

先回顾下语言模型
p ( x ) = ∏ i = 1 n p ( x i ∣ x < i ) p(x) = \prod_{i=1}^n p(x_i|x_{<i}) p(x)=i=1np(xix<i)
当前SOTA模型(transformer-xl)通过训练一个神经网络 θ \theta θ去最小化一个数据集 D = { x 1 , ⋯   , x ∣ D ∣ } D=\{x^1,\cdots,x^{|D|}\} D={x1,,xD}负对数似然的方法:
L = − ∑ k = 1 ∣ D ∣ log ⁡ p θ ( x i k ∣ x < i k ) \mathcal{L} = -\sum_{k=1}^{|D|} \log p_\theta(x_i^k|x^k_{<i}) L=k=1Dlogpθ(xikx<ik)

基于语言模型学习的 p θ ( x i ∣ x < i ) p_\theta(x_i|x_{<i}) pθ(xix<i),一个新的长为 m m m的序列 x ~ \tilde x x~可以被依次生成: p θ ( x 0 ) , p θ ( x 1 ∣ x ~ 0 ) , ⋯   , p θ ( x m ∣ x ~ < m ) p_\theta(x_0),p_\theta(x_1|\tilde x_0),\cdots, p_\theta(x_m|\tilde x_{<m}) pθ(x0),pθ(x1x~0),,pθ(xmx~<m)

LANGUAGE MODELING WITH CTRL

CTRL是一个条件语言模型,引入了控制编码,基于一个控制编码 c c c学习分布 p ( x ∣ c ) p(x|c) p(xc)。该分布可以用链式法则来分解,同时用一个考了了控制代码的损失来训练:
p ( x ∣ c ) = ∏ i = 1 n p ( x i ∣ x < i , c ) L = − ∑ k = 1 ∣ D ∣ log ⁡ p θ ( x i k ∣ x < i k , c k ) p(x|c) = \prod_{i=1}^n p(x_i|x_{<i,c}) \quad \mathcal{L} = -\sum_{k=1}^{|D|} \log p_\theta(x_i^k|x^k_{<i},c^k) p(xc)=i=1np(xix<i,c)L=k=1Dlogpθ(xikx<ik,ck)

在Transformer中,第一个block的核心是有 k k k个头的多头注意力,使用一个causal mask来预测未来的token:
Attention ( X , Y , Z ) = softmax ( mask ( X Y T ) d ) Z MultiHead ( X , k ) = [ h 1 ; ⋯   ; h k ] W o \begin{aligned} \text{Attention}(X,Y,Z) &= \text{softmax} \left( \frac{\text{mask} (XY^T)}{\sqrt d} \right) Z \\ \text{MultiHead} (X,k) &= [h_1;\cdots;h_k]W_o \\ \end{aligned} Attention(X,Y,Z)MultiHead(X,k)=softmax(d mask(XYT))Z=[h1;;hk]Wo
其中 h j = Attention ( X W j 1 , X W j 2 , X X W j 3 ) h_j = \text{Attention}(XW_j^1,XW_j^2,XXW_j^3) hj=Attention(XWj1,XWj2,XXWj3)
第二个block的核心是一个ReLU激活函数的前馈网络:
F F ( X ) = max ⁡ ( 0 , X U ) V FF(X) =\max(0,XU)V FF(X)=max(0,XU)V
每个block都有一个层归一化和残差连接,它们一起生成 X i + 1 X_{i+1} Xi+1
在这里插入图片描述
每个token的得分通过最后一层的输出计算:
Scores ( X 0 ) = LayerNorm ( X l ) W v o c a b \text{Scores}(X_0) = \text{LayerNorm}(X_l)W_{vocab} Scores(X0)=LayerNorm(Xl)Wvocab

Data

在这里插入图片描述
数据集来源如上,来自每个数据集的数据都加上它的来源。比如来自维基百科的会加上Wikipedia,而有些数据集还会有它的子(控制)代码。比如Reviews还有一个Ratting的控制代码,代表从1到5的评分。

CONTROLLABLE GENERATION

SAMPLING

通常用语言模型生成文本的时候,会采用temperature-controlled方法。
即给定一个温度 T > 0 T > 0 T>0,和词表中每个token的分数 x i ∈ R d x_i \in \Bbb R^d xiRd,预测第 i i i个token的概率计算为:
p i = exp ⁡ ( x i / T ) ∑ j exp ⁡ ( x j / T ) p_i = \frac{\exp(x_i/T)}{\sum_j \exp(x_j/T)} pi=jexp(xj/T)exp(xi/T)
T → 0 T \rightarrow 0 T0接近一个贪心分布,增强概率分布上的峰值;而当 T → ∞ T \rightarrow \infty T拉平分布使得它更均匀,即其他低概率的token更有可能被选到。

然后这篇工作还限制了从top-k个候选中去生成,而不是从整个词表中生成。但这里并不是一个固定的 k k k值,而是通过设定一个概率阈值 p t p_t pt,然后 k k k个token满足 ∑ i sort ( p i ) > p t \sum_i \text{sort}(p_i) > p_t isort(pi)>pt。如果模型预测下一个词的置信度较高,那么 k k k就会小一点,反之亦然。

当面临有多个概率都较高的候选token时,一个直观的方式是贪婪地选择概率最大的那个,但这样的问题是可能会生成很多重复的token,为了解决这个问题,作者提出了一种新的策略。使得既能近似贪婪地选择得分最高的token,又能对重复token进行一个惩罚。对已经生成的token进行打折(discounting)。

同时在生成时加入了惩罚生成,给定一系列生成过的token g g g,判断下个token的概率分布 p i p_i pi为:

p i = exp ⁡ ( x i / ( T ⋅ I ( i ∈ g ) ) ∑ j exp ⁡ ( x j / ( T ⋅ I ( i ∈ g ) ) I ( c ) = θ    if c is True else 1 p_i = \frac{\exp(x_i/(T\cdot I(i\in g))}{ \sum_j \exp(x_j/(T\cdot I(i\in g))} \quad I(c) = \theta \,\, \text{if c is True else 1} pi=jexp(xj/(TI(ig))exp(xi/(TI(ig))I(c)=θif c is True else 1

变成了能对重复token进行惩罚的temperature controll。

作者实验 θ ≈ 1.2 \theta \approx 1.2 θ1.2可以从贪婪选择和重复惩罚中得到一个不错的折中。但注意这个惩罚只用于推理,不用于训练。

CONTROL CODES

Style by domain 大多数控制代码通过指定一个训练集特定的领域为我们模型设定生成的文本风格。

在这里插入图片描述
如上图所示,红色的单词表示控制代码,蓝色的单词表示文本生成中的提示词(prompt)。可以看到控制代码来自训练数据代表特定的领域,指定了生成文本的整体风格。

可以看到,对于同样的prompt,指定不同控制代码时,能生成与控制代码领域相关的风格文本。

More complex control codes 一些额外的控制代码可以加到领域代码中,为了对生成增加更多的约束。

在这里插入图片描述
如上图,首先没有蓝色的prompt,表示这个模型可以在没有prompt的情况下,生成特定领域的内容。同时可以看到这些控制代码更复杂一些,除了领域代码(Politics/Horror/Reviews)之外,还加了子控制代码,比如在Reviews中加了不同的评分,5分好评和1分差评,可以生成对应评分的内容。
在这里插入图片描述

上图给出了更加复杂的例子,它的领域控制代码是Links,后面还加了更加细粒度的由URL组成的子控制代码。从上面的同样关于president的例子可以看出,有两篇内容,URL中的日期不同,模型生成的文本有学到不同时期对应的president是谁。

Triggering specific tasks 一小部分控制代码与特定任务有关,像问答和翻译。

在这里插入图片描述
比如问答任务通过控制代码Questions指定问题,通过A:让模型回答。

SOURCE ATTRIBUTION

领域控制代码可以用于将训练集拆分到不同的互斥子集中。这可以作为检测给定一个序列模型认为属于哪个训练数据集的子集的简单方法。回顾下语言模型学会了一个分布 p θ ( x ∣ c ) p_\theta(x|c) pθ(xc)。通过指定一个控制代码的先验 p ( c ) p(c) p(c),可以直接计算领域的排名:
p θ ( c ∣ x ) ∝ p θ ( x ∣ c ) p ( c ) p_\theta(c|x) ∝ p_\theta(x|c)p(c) pθ(cx)pθ(xc)p(c)
在这里插入图片描述
可以一定程度上了解序列和领域之间的关联性,从上图可以看到模型对于prompt的微小变化非常敏感。比如是否有.、大小写、字符变化等。

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

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

相关文章

空中出租车运营公司【Flewber Global】申请纳斯达克IPO上市

猛兽财经获悉&#xff0c;总部位于美国纽约的空中出租车运营公司Flewber Global Inc&#xff0c;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;FLYF&#xff09;,Flewber Global计划通…

[语义分割] DeepLab v2(膨胀卷积、空洞卷积、多尺度信息融合、MSc、ASPP、空洞空间金字塔池化、Step学习率策略、Poly学习率策略)

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs 论文地址&#xff1a;DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs源码地址&…

大数据的兴起

目录 1.什么是大数据 2.大数据的具体应用 3.大数据的便利性 4.大数据的危害 1.什么是大数据 大数据是指规模庞大、复杂多样的数据集合&#xff0c;无法用传统的处理方法进行管理、处理和分析的一种数据类型。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格&am…

CEC2022代码(Matlab代码)及多种智能优化算法求解CEC2022

一、CEC2022测试函数 CEC2022测试集共有12个单目标测试函数&#xff0c;每个测试函数可选择的维度分别为10维、20维。该测试集合也是目前高质量论文应用最广泛的测试集&#xff0c;CEC2022测试集函数复杂&#xff0c;非常具有挑战力。 CEC2022测试函数与理论最优值 二、多种智…

Vcenter安全加固-防火墙-只允许特定的IP地址访问Vcenter

一、场景 1.只允许特定的IP地址访问Vcenter。 2、其余全部拒绝。 二、操作步骤 1、登录Vcenter管理界面 https://<Vcenter-ip>:5480 2、点击防火墙-添加 3、添加规则 1、先添加允许访问的IP地址和掩码。 1、先放你的Esxi主机管理地址&#xff0c;不然会托管。 2、…

CTF —— 网络安全大赛

前言 随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 \ ⚔科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失、网络诈骗、隐私泄露&#xff0c;种种迹象…

Redhat7/CentOS7 网络配置与管理(nmtui、nmcli、GNOME GUI、ifcfg文件、IP命令)

背景&#xff1a;作为系统管理员&#xff0c;需要经常处理主机网络问题&#xff0c;而配置与管理网络的方法和工具也有好几种&#xff0c;这里整理分享一下网络配置与管理的几种方式。 1、NetworkManager 概述 在 Red Hat Enterprise Linux 7 中&#xff0c;默认网络服务由 N…

LightGlue论文翻译

LightGlue:光速下的局部特征匹配 摘要 - 我们介绍 LightGlue&#xff0c;一个深度神经网络&#xff0c;学习匹配图像中的局部特征。我们重新审视 SuperGlue 的多重设计决策&#xff0c;稀疏匹配的最新技术&#xff0c;并得出简单而有效的改进。累积起来&#xff0c;它们使 Lig…

KafKa脚本操作

所有操作位于/usr/local/kafka_2.12-3.5.1/bin。 rootubuntu2203:/usr/local/kafka_2.12-3.5.1/bin# pwd /usr/local/kafka_2.12-3.5.1/bin rootubuntu2203:/usr/local/kafka_2.12-3.5.1/bin# ls connect-distributed.sh kafka-delegation-tokens.sh kafka-mirror-mak…

PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案

宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案 前言一、Redis安装部署1.安装Redis2.php安装Redis扩展3.启动Redis 二、避坑指南1.6379端口配置2.Redis服务启动&#xff08;1&#xff09;Redis服务启动失败&#xff08;2&#xff09;Redis启动日志排查&#xff08;3&a…

使用云服务器和Frp(快速反向代理)框架快速部署实现内网穿透

目录 一. 背景1.1 内网穿透1.2 Frp介绍1.3 Frp配置流程 二. 云服务器配置2.1 配置安全组2.2 编写frps.ini 三. 内网主机配置3.1 编辑frpc.ini文件3.2 启动服务并配置开机自启动 四. 参考文献 一. 背景 现在有一台ubuntu云服务器&#xff0c;我想通过内网穿透将一台内网的主机当…

PS软件打开闪退是什么原因?怎么处理闪退的问题?

Photoshop简称PS&#xff0c;它作为图像处理专家&#xff0c;具有相当强大的功能&#xff0c;但是有小伙伴说不好用&#xff0c;因为打开后会闪退&#xff0c;那该怎么办呢&#xff1f; PS软件闪退的处理方法&#xff1a; 1.下载并安装Adobe Creative Cloud&#xff0c;再登录…

专利背后的故事 | 一种安全访问控制方法

Part 01 专利发明的初衷 在互联网中&#xff0c;不可避免地存在一些具有风险或者异常的数据访问行为&#xff0c;会对企业管理系统、政府管理系统等系统的安全造成威胁。为了保障数据访问的安全&#xff0c;企业需要设置访问控制策略。访问控制策略通常是由一条或多条规则组成…

win10 查文件(夹)被占用

1、打开任务管理器-性能-打开资源监视器(左下角) 2、找到关联的句柄&#xff0c;输入文件(夹)地址 3、选择进程关闭

动态规划(组合总和+不同的二叉搜索树)

一)组合总和 377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 排列:所有情况是有序的 组合:所有情况是无序的 一)定义一个状态表示: 有限制条件下的组合问题: 1)dp[i][j]表示从前i个物品中进行挑选&#xff0c;总体积不超过j&#xff0c;所有的选法中&#xff0c;要的…

wxwidgets Ribbon使用简单实例

// RibbonSample.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <wx/wx.h> #include "wx/wxprec.h" #include "wx/app.h" #include "wx/frame.h" #include "wx/textctrl.h" #include "…

Linux中的pause函数

2023年7月29日&#xff0c;周六上午 函数原型 在Linux中&#xff0c;pause()函数用于使当前进程暂停执行&#xff0c;直到接收到一个信号。 #include <unistd.h>int pause(void);pause()函数不接受任何参数。 通常&#xff0c;pause()函数用于编写简单的信号处理程序&…

管理类联考——写作——实战篇——结构篇——不同角度

角度1——两种结构 人类面临的所有问题就是&#xff1a; 是什么? 为什么? 好不好(意义)? 怎么办? 结构引领思路&#xff1a; 想什么&#xff0c;比做什么更重要 怎么想&#xff0c;比想什么更重要 提纲挈领&#xff0c;纲举目张。先抓纲领&#xff0c;纲即结构&#xff…

SQL注入实操三(SQLi-labs 31-40)

文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-31 FUN with WAFa.注入点判断b.轮子测试c.获取数据库名称d.获取表信息e.获取列信息f.获取表内数据 3.Less-32 Bypass addslashes()a.注入点判断b.轮子测试c.获取数据库名称d.获取表信息e.获取列信息f.获取表内数据 4.Less-33a.…

openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符

文章目录 openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符24.1 LIKE24.2 SIMILAR TO24.3 POSIX正则表达式 openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符 数据库提供了三种独立的实现模式匹配的方法&#xff1a;SQL LIKE操作符、SIMILAR TO操作符…