paper:https://arxiv.org/abs/1912.02164
code:
https://github.com/uber-research/PPLM (单独 PPLM)
https://github.com/huggingface/transformers/tree/master/examples/pplm (集成 Transformer)
一. NLP 研究人员们提出过各种各样的条件文本生成方式,包括,
从一个预训练语言模型开始,做精细调节,以便让它始终都能生成某种特定风格的句子;2. 从零开始训练一个大型条件生成模型;不改变这个大的语言模型,而是通过关键 n 元组替换的方式,调节已经生成的句子的风格。PPLM 的最大优点是不需要对语言模型做任何额外的改动(不需要重新训练或者精细调节),就能直接在预训练语言模型的基础上生成条件文本。简单的说就像我只需要一个模型的api,在不需要修改别人模型下就能根据我们自己算法提供的约束条件,控制文本生成;
二.作者通过用属性模型控制梯度达到控制预训练语言模型的方法,步骤:
给定句子开头词,计算log(p(x)) 、log(p(a|x)),以及两者关于语言模型的hidden层的梯度;只需要对训练好的小属性模型和语言模型都做一次计算的前馈传播和反馈传播,这几个值都可以计算出来;根据计算出来的梯度作为扰动添加到,无扰动的预训练模型的hidden中,反向传播后,使得值往log(p(a|x)) 和 log(p(x))移动;然后把以及加入扰动的hidden用于下一词的词分布计算中;使得词典中我们目标属性的词概率更大;
三.作者在文章举例了三种实验:
1. 词袋模型:计算方式是符合主题的似然度等于词袋中每个词单独的似然度的和,形象的说就是当含有越多目标领域词袋中的词,就认为句子符合属性的可能性越高;并且注意到,很多不在词袋中但是属于目标领域的词模型也会生成在其中;
2. 以情感极性为目的的判别器属性模型:是取出预训练模型的embedding,然后直接用一个分类进行类别预测训练;然后同样把分类器后累计的梯度返回给语言模型中;
3. 多个属性模型联合使用:这部分作者实验了多个词袋模型和情感极性的实验;效果还不错;
另外在避免语言模型生成有害文本方面,同样只需要训练一个恶意文本的分类器使用梯度更新的方式回传给语言模型,就能简单且有效的解决此类问题;作者做的实验,即使使用恶意文本开头,语言模型生成后续恶意文本的概率从百分之60降到了百分之4;这种效果已经很不错了;
paper note:
https://blog.csdn.net/weixin_42137700/article/details/103488694
https://blog.csdn.net/weixin_37947156/article/details/103528458
这篇PPLM文章控制文本生成,其实主要方法就是通过小的可微的属性模型,根据目标主题或者风格文本,更新梯度后,把梯度回传给语言模型,使得大的预训练模型也能够生成目标主题和风格文本;或者更抽象一点,通过一种能改变梯度的方法,影响大模型,这里改变梯度使用的是可微的属性模型;这种方法值得学习,比如现在的GPT3模型,1700亿的参数,普通机器即使微调也加载不了,但是可以用这种PPLM的方法进行测试?
