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)
为了了解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 法。
PPLM算法需要三个简单的步骤来生成样本:
在 步骤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,还有其梯度更新的其他信息。
虽然上面赋予属性的操作很巧妙,也能保证让文本生成方向朝着属性判别器满意的方向生成,但判别器 p(a|x) 满意并不代表我们会满意。如果只用上面技巧,会导致生成一些有问题的句子,比如说要生成正面的话,那么说不定会疯狂重复,“好好好好好”,这当然不是我们想要的。
我们还是希望能够生成更多样性,并且符合语言模型的句子。因此文中采取了两个保证生成句子的语言模型尽量与原语言模型接近的方法:
我们通过两种方式做到这一点:首先,通过采取措施使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)的受限文本生成方法