PPLM:使用即插即用语言模型控制文本生成

2023-11-14

Paper:https://arxiv.org/pdf/1912.02164.pdf

Code:https://github.com/uber-research/PPLM

 

本文讨论了一种受控文本生成的替代方法,称为即插即用语言模型(PPLM),该方法在Uber AI 的最新论文中得到介绍。PPLM允许用户将代表所需控制目标的一个或多个简单属性模型灵活地插入到大型无条件LM中。该方法的优点是它使用的LM作是关键特性-无培训或微调是必需的,这使得研究人员能够利用最佳的一流的,即使他们没有LMS的广泛的硬件要求来训练他们。

我们发布了本文附带代码,以及与Hugging Face使用Transformer编写代码Transformers存储库的创建者)合作开发的PPLM 在线演示。我们在演示中提供了十几个属性模型:亲自尝试一下!

Uber AI的即插即用语言模型使研究人员可以利用那里的一些经过预训练的模型:PPLM无需要求每个人都训练自己的猛ma象,而是让用户将小型属性模型与LM相结合来引导其生成。属性模型可以比LM小100,000倍,并且仍然可以有效地操纵它,就像将鼠标放在我们毛茸茸的庞然大物朋友上方并告诉其去向一样(图1)

A bit of math

为了了解PPLM的工作原理,我们首先考虑一些分布和模型。

首先,存在无条件LM p(x),即所有文本上的概率分布。这是由无条件LM(如上图1中的庞然大物GPT-2)建模的分布。它是通用的,可以生成有关广泛主题的流利文本。

其次,有p(x | a),这是我们要创建的条件LM。这是一个假设的模型,可以给定属性a来生成具有这些属性的句子(例如上述积极情绪示例)。

第三,有一个属性模型p(a | x),它接受句子x并输出拥有属性a的概率。这种模式可能会判断一个句子中有10%的人具有积极的情绪,或者有85%的人与政治有关。这些模型可能很小,而且易于训练,因为从直观上讲,认识到积极性要比积极积极起来容易,而认识政治言论要比编写政治讲话容易得多。正如在Radford等人的研究中所证明的那样,当在预训练的LM所提供的表示之上学习识别时,情况尤其如此。(2019)。如下所示,只有一个包含4,000个参数的单层的属性模型在识别属性和指导生成方面表现良好。

幸运的是,使用贝叶斯规则,我们可以根据第一个模型和第三个模型编写第二个模型:

                                                     

要获得所需基于属性 a 生成文本的 p(x|a)。我们已有一个语言模型 p(x) 能够很好地生成符合自然语言的文本,那么一个非常简单的方法就是用一个分类器(也能是人)来判断语言模型生成的文本 x 是否具有 a 属性,也就是 p(a|x),于是就能获得 p(x|a). 这其实就是文中提到的 rerank 法

指导生成:升序log p(a|x)

PPLM算法需要三个简单的步骤来生成样本:

  • 给定部分生成的句子,请计算log(p(x))log(p(a | x))以及它们相对于基础语言模型的隐藏表示的梯度。使用两个模型的有效正向和反向传递都可以使用这些数量。
  • 使用渐变将语言模型的隐藏表示形式朝log(p(a | x))增大和log(p(x))增大的方向移动一小步。
  • 根据获得的新输出概率分布,采样生成一个新的词。  

 步骤1中,使用语言模型进行前向传递,以使用预测p(a | x)的属性模型来计算所需属性的可能性。在步骤2中,后退遍历基于属性模型中的梯度来更新LM的内部潜在表示,以便增加所生成的遍历具有所需属性的可能性。潜在更新之后,在 步骤3中,根据更新后的潜在产生的分布生成词汇表上的新分布,并对单个标记或单词进行采样。

直观地讲,当PPLM一次生成一个token时,它会继续朝着更可能具有所需属性(高log(p(a | x)))的方向引导文本表示,同时仍保持流利性在原始语言模型下-high log(p(x))

在演示PPLM时,我们要注意一些细节。首先,PPLM控制方案是可调的:可以增加或减小更新的强度,并且在零强度的限制下,可以恢复原始LM。其次,PPLM假定基本语言模型是自回归的,许多现代LM就是这种情况。

上面描述的PPLM采样算法需要通过一个由两个子网(基本LM和属性模型)组成的网络进行正向和反向传递,如下面的图2所示:

补充一些关于历史 H,还有其梯度更新的其他信息。

  • 论文中因为用的是 GPT2 语言模型,所以模型基本组件是 Transformer,所以历史 H 用的是每层 K 和 V 的值。而如果要用其他模型,也可以根据模型不同改变具体 H 实现。
  • 还有实际 H 更新梯度计算时,会有数次迭代过程,其中还包括一些 normalization 和 scaling 的操作,以及很重要的强度参数 α (可调节属性影响强度),建议去读源码,更好理解。

           

确保流畅性:升序log p(x)

虽然上面赋予属性的操作很巧妙,也能保证让文本生成方向朝着属性判别器满意的方向生成,但判别器 p(a|x) 满意并不代表我们会满意。如果只用上面技巧,会导致生成一些有问题的句子,比如说要生成正面的话,那么说不定会疯狂重复,“好好好好好”,这当然不是我们想要的。

我们还是希望能够生成更多样性,并且符合语言模型的句子。因此文中采取了两个保证生成句子的语言模型尽量与原语言模型接近的方法

  • Kullback–Leibler(KL) 散度:在计算历史 H 更新值时,向其中加入一个 KL 散度损失,最小化改变前语言模型和改变后的预测概率分布的 KL 散度
  • Post-norm Geometric Mean Fusion(后范数几何平均融合?):其实就在上面训练时改变的同时,加入一个类似输出后处理的过程,直接让实际预测从下面式子中采样,让生成分布和语言模型直接绑定起来

我们通过两种方式做到这一点:首先,通过采取措施使Kullback-Leibler(KL)差异最小化在修改后的和未修改的语言模型的输出分布之间,第二步是在修改后的和未修改的下一个单词分布之间执行规范后融合。通过这两个因素,生成的文本被保存在较高的p(x)区域中,相当于完成了一个下图中的过程(先通过 p(a|x) 让生成结果具有属性,之后让它生成接近自然语言的流畅 p(x).)

属性模型

关于具体的属性判别器 p(a|x),文中用了两种不同的方法。

第一种是BOW(词袋) 属性模型,没有额外参数。针对每个主题先总结一批有代表性的词,之后具体实现时只用在每个时间步上对输出概率分布取出对应词袋中词的位置,计算 loss,加和起来反向传播就行。方法虽然简单却意外有效,可以看些例子。

该方法和 weighted decoding 思想有些类似,论文中也有详细对比。

第二种是简单属性分类器,非常少参数。就是在 freeze 住大模型的情况下,拿已有的标注数据,先预训练一个分类器出来。比如文中就用感情分类数据集 SST-5,之后输入GPT2模型,最后一层向量取平均,接着输入分类器分类,训练分类器。

当然除了上面两种方法其实还能用其他分类器,毕竟 PPLM 只是提出一个大概的框架,判别器无论是什么,只要能回传梯度就行

 

参考文献

1、PPLM: 四两拨千斤,Uber 可控语言生成框架

2、Controlling Text Generation with Plug and Play Language Models

3、即插即用(Plug and Play)的受限文本生成方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PPLM:使用即插即用语言模型控制文本生成 的相关文章

  • Nvidia显卡硬件编解码能力表 官方链接

    记录用 便于快速查找 从表中得知 1070支持 H265 10bit 硬件编码 似乎不错 官方链接 https developer nvidia com video encode and decode gpu support matrix
  • C++虚函数表地址偏移

    include
  • 架构图以及vue的简介

    架构图 前后端分离总架构图 前端架构设计图 MVVM 架构模式 MVVM 的简介 MVVM 由 Model View ViewModel 三部分构成 Model 层代表数据模型 也可以在Model中定义数据修改和操作的业务逻辑 View 代
  • 公务员和事业单位的差别有多大?

    公务员和事业单位是两种不同的就业形式和组织类型 它们在以下几个方面存在一些差别 1 归属关系 公务员属于政府部门的编制人员 直接依附于政府机构 而事业单位是独立法人实体 独立承担法人责任 不隶属于政府机构 2 支付方式 公务员工资由政府财政
  • 算法训练 P0505

    标题 include
  • 基于GBDT+LR模型的深度学习推荐算法

    GBDT LR算法最早是由Facebook在2014年提出的一个推荐算法 该算法分两部分构成 第一部分是GBDT 另一部分是LR 下面先介绍GBDT算法 然后介绍如何将GBDT和LR算法融合 1 1 GBDT算法 GBDT的全称是 Grad
  • flutter GridView和Wrap

    GridView有2种gridDelegate 记录小嵌套冲突的问题 SingleChildScrollView ListView GrilView嵌套问题解决 子布局添加属性 physics NeverScrollableScrollPh
  • Windows 10 Office文件图标异常处理(Word

    1 我们经常会遇到office重新安装完成后 或者换了版本后 前期做好的excel ppt word文件可以正常打开 但图标显示为白色或者异常 备注 如果不能正常打开 则是office程序没有关联到 只需要选中需打开文件 右键 更改 里面找
  • MODBUS TCP协议实例数据帧详细分析

    MODBUS TCP协议实例数据帧详细分析 1 简介 2 ModbusTCP数据帧 2 1 报文头MBAP 2 2 帧结构PDU 3 ADU详细结构 3 1 0x01 读线圈 3 2 0x02 读离散量输入 3 3 0x03 读保持寄存器
  • 达梦数据库,大小写敏感这个参数怎么设置

    达梦数据库 大小写敏感这个参数怎么设置 1 1 现象描述 达梦在安装完软件后 需要初始化数据库实例 其他大部分数据库 也是同样的操作 但是 达梦在初始化数据库实例前 有几个需要特别注意的参数 这几个参数一定要特别关注 因为如果设置错了 是不
  • pytorch学习之Condition GAN与代码的部分解析

    1 首先 GAN网络是有生成器和判别器 比如可以生成新的图像 而CGAN则是添加了条件 生成有限制的图像 比如生成带微笑的人脸 CGAN的架构如下 2 主要部分的代码 定义判别器 class Discriminator nn Module
  • IMX6学习记录(8)-更换linux配置,加速启动

    上面是我的微信和QQ群 欢迎新朋友的加入 之前启动的时候将近是1分钟 这个时间太浪费了 更新一下内核的配置 让启动速度更快一些 更新之后 启动时间大概10秒左右 一共三个内容 来源是板子附带源码里面的文件 1 配置文件 2 设备树文件 3
  • 一种使用TCP自定义加密通信的APT样本分

    概述 为了确保通信安全和隐私以及应对各种窃听和中间人攻击 越来越多的网络流量被加密 然而 攻击者也可以通过这种方式来隐藏自己的信息和行踪 近期我们捕获了一个样本 此样本就是使用了加密通信 为了深入研究此样本的加密通信机制 接下来我们来逐层剖
  • 剑指OfferII019 最多删除一个字符得到回文

    文章目录 题目 思路 代码 优化 思路 代码 题目 思路 暴力破解 因为只让替换一个字符 我们双指针扫描的时候如果发现对不上 就先跳过让count 1 下次如果对不上并且count 1的时候 就返回false 但是 代码 class Sol
  • 【满分】【华为OD机试真题2023 JAVA&JS】机器人活动区域

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 机器人活动区域 知识点深搜广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 现有一个机器人 可放置于 M N的网格中任意位置 每个网格包含一个非负整数编号 当
  • (实战)sklearn----多元线性回归&sklearn----多项式回归

    import numpy as np from numpy import genfromtxt from sklearn import linear model import matplotlib pyplot as plt from mp
  • 微信小程序怎么设置服务器上,如何为微信小程序设置服务器地址?-微信小程序服务器诗...

    腾讯要求微信小程序使用到的域名都需要在公众平台中进行设置 可以说是一种备案 那么如何为微信小程序设置服务器域名地址呢 工具 原料 1 电脑互联网 方法 步骤 2 首先用小程序账号登陆微信公众平台 然后点击左下角的 设置 之后点击右侧上部的
  • 深度学习-环境搭建(安装Pytorch)

    文章目录 前言 一 安装Anaconda 二 查看电脑显卡支持的CUDA版本 三 更新CUDA版本 四 创建并激活Anaconda虚拟环境 需要创建虚拟环境而最好不在base下载的原因 五 安装pytorch PS 注意事项 六 下载其他库
  • Vue Router 跳转404,路由守卫及配置(登录篇)

    在这个前端技术迭代迅速的时代 单页面应用开发中 路由守卫已经是非常常见也是必备的需求 为了控制使用者在各种状态下的路由页面跳转 例如 是否登录 是否有路由权限等等 今天就记录一下在各种登录状态下路由配置和路由守卫 Vue Router官方文
  • GitBash基本操作

    git的一些基本命令用法可以用git help命令获取 MINGW64 d GitProject Git1 master git config global user name userName 登陆全局用户名 注意可以在官网下载windo

随机推荐

  • Linux 下 grep 常用过滤命令讲解

    导读 这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令 需要的朋友可以参考下 使用grep筛选多个条件 cat log txt grep 条件 cat log txt grep 条件一 grep 条件二 cat
  • 冒险游戏:假期冒险公园巡游者 15 parkRanger15 CE mac中文

    Vacation Adventures Park Ranger 15 Collector s Edition 假期冒险 公园巡游者 mac是一款冒险游戏 让玩家扮演公园管理员 开展刺激的公园管护冒险 作为游戏中的公园管理员 你将被派往各种美
  • HTML CSS属性overflow、white-space、text-overflow

    li width 20 float left 文本或图像会移至父元素中的左侧 overflow hidden 不显示超过对象尺寸的内容 white space nowrap 默认处理方式 文本自动处理换行 假如抵达容器边界内容会转到下一行
  • 数组排序sort()方法详解

    sort 方法用原地算法对数组的元素进行排序 并返回数组 默认排序顺序是在将元素转换为字符串 然后比较它们的UTF 16代码单元值序列时构建的 一 sort 方法基本介绍 1 语法 arr sort compareFunction 2 参数
  • [机缘参悟-84]:读《心若菩提 - 曹德旺》有感

    目录 第1章 心若菩提 简介 1 1 心若菩提 的主要内容 1 2 作者简介 第2章 心若菩提 有感 2 1 首要因素 创业意识 长远目标 正确的方向 2 2 顺势而为的创新 2 3 愿景与专注 2 4 人脉 2 5 政 府关系 2 6 大
  • linux-shell-批量查看多个目录下多个csv文件的行数

    批量查看多个文件的行数 文件目录如下 2020 2020 202008 csv 2020 202009 csv 2020 202002 csv 2020 202011 csv 2020 202005 csv 2020 202001 csv
  • 内核态编程规范

    内核态的编程规范包括以下几点 安全性 内核态的编程需要确保代码的安全性 避免出现缓冲区溢出 越权操作等安全漏洞 可靠性 内核态的代码需要保证高可靠性 避免因为程序的不可预期的异常中断导致系统崩溃或者损坏 性能 内核态的代码需要具有很高的性能
  • 常见异常报错

    一 401错误 Unauthorized 客户试图未经授权访问受密码保护的页面 应答中会包含一个WWW Authenticate头 浏览器据此显 示用户名字 密码对话框 然后在填写合适的Authorization头后再次发出请求 二 403
  • Day 36: 关系型数据库和MySQL概述

    关系型数据库和MySQL概述 关系型数据库概述 数据持久化 将数据保存到能够长久保存数据的存储介质中 在掉电的情况下数据也不会丢失 数据库发展史 网状数据库 层次数据库 关系数据库 NoSQL 数据库 NewSQL 数据库 1970年 IB
  • 预测变量的不确定性

    https www toutiao com a6646320437884092936 2019 01 14 19 57 45 在本文中 我们考虑的情况是预测变量的值不可信 而不是目标变量的值可信 为了简单起见 我们考虑一个带有一个数值预测器
  • 弃用Dubbo!这个新一代框架阿里都用疯了!

    哪个Java框架火 要说几年前 那你大可能会说是Spring Cloud Dubbo 但是现在 你还会说是它们吗 微服务当道 阿里巴巴开源一个Spring Cloud的子项目Spring Cloud Alibaba 它用两年的时间在众多架构
  • pointnet C++推理部署--onnxruntime框架

    classification 以分10类 gpu版本为例 先将pytorch训练出的pth权重文件转为onnx文件 import torch import pointnet cls point num 1024 class num 10 n
  • 沸腾过程气泡成核OVITO渲染

    关注 M r m a t e r
  • 保留两位小数,不要四舍五入,截取前两位

    我的主要思路是把我的数据变成字符串数组 整数部分和小数部分分开 然后对小数部分判断有没有小数 没有直接添加两个0 有一位往后边添加一个0 如果有多位小数直接截取前两位即可 实现过程 const baoliuNumber num gt 封装了
  • Android studio卡顿问题

    使用Android studio版本是2 3 3 最近在使用Android studio时候遇到一件事情 项目开始到中期Android studio好好的 流畅得一批 但是某天快要收尾了 使用Android studio打开项目后 鼠标开始
  • VMware卡在命令行/dev/sda1 clean... 界面不动

    网上说进入 alt ctl F2 进入tty不一定能进得去 此时 可以先进入虚拟机设置 对磁盘进行扩容 比如我就从 20GB 扩充到了 60GB 但此时 扩充的40GB属于未格式化的区域 无法被利用 需要格式化 此时 可以用ubuntu的安
  • 【Python爬虫】requests库

    文章目录 1 requests库的介绍 2 requests库的基本用法 2 1request访问请求 2 1 2对豆瓣等网址发送请求的问题 2 2robots协议 2 3查看和修改爬虫的头部信息 2 2 response响应对象 2 3r
  • mysql with语句_sql 中的with 语句使用

    一直以来都很少使用sql中的with语句 但是看到了一篇文章中关于with的使用 它的确蛮好用 希望以后记得使用这个语句 一 with 的用法 With alias name as select1 alias namen as select
  • 【Python游戏】咱就说Python实现一个蔡徐坤大战篮球的小游戏,可还行?

    相关文件 想学Python的小伙伴可以关注小编的公众号 Python日志 有很多的资源可以白嫖的哈 不定时会更新一下Python的小知识的哈 需要源码的小伙伴可以在公众号回复蔡徐坤大战篮球 Python源码 问题解答学习交流群 773162
  • PPLM:使用即插即用语言模型控制文本生成

    Paper https arxiv org pdf 1912 02164 pdf Code https github com uber research PPLM 本文讨论了一种受控文本生成的替代方法 称为即插即用语言模型 PPLM 该方法