查看原文
其他

【源头活水】CTRL,定向生成模型

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—DengBoCong
地址:https://zhuanlan.zhihu.com/p/405493225
https://arxiv.org/pdf/1909.05858.pdf

nlp-paper:https://github.com/DengBoCong/nlp-paper

nlp-dialogue:https://github.com/DengBoCong/nlp-dialogue

text-similarity:https://github.com/DengBoCong/text-similarity

说明:阅读原文时进行相关思想、结构、优缺点,内容进行提炼和记录,原文和相关引用会标明出处,引用之处如有侵权,烦请告知删除。

2019年推出GPT-3,和它以往的风格一样,模型巨大参数超多,在生成文本能力上表现惊人,不过GPT模型生成的文本风格往往由模型自身决定(和训练语料有关,有着一定的随机性)。而本篇所要提的模型CTRL(Conditional Transformer Language Model),对标GPT-2,可以更好的控制文章的内容,生成有价值的文本,且无需进一步训练就可以解决特定领域的具体问题。CTRL模型的最大优势是在生成文本时可指定文章的类型,同一模型可以写作不同风格的文章,可以指定文章的领域、风格、主题、时间、实体,实体间的关系,以及任务相关的行为等等。模型使用的Control Code和sub-reddit data如下:
不同的角度,有不同的答案。换言之,CTRL关注了语料在不同场景中的不同含义。模型更符合实际应用的场景:使用者在同一时间,只可能生成某一特定类型,同时又希望单个模型支持生成各种类型的文章,CTRL可视为多任务学习。使用 CTRL,只要提供control code,control code可以是 URL、问题和语言,也可以组合(评论、评级和价值)以提供更细粒度的控制,源码见:

01

模型细节
CTRL底层同样也基于Transformer,使用了其中Encoder部分,模型底层改动不大。之前的模型是根据词序列中的前    个词计算下一个词    是哪个词的可能性。例如给定序列为    ,数据集    ,参数  , 即

CTRL又加入了条件    ,即文章的控制信息如类型,在计算概率的同时考虑条件    。具体操作是在每一个序列的具体内容前加了入类型描述,使得在计算Attention过程中,类型与序列中的所有元素建立联系,即:

说白了就是在预先考虑控制代码的基础上进行训练,在Encoder block中,还有一个小区别是对点击进行mask:

模型的特点就是Controllable Generation,分为Sampling和Control Codes。


02

Sampling
从语言模型生成文本时一般会用到 temperature-controlled stochastic sampling 方法,同时,每次生成 token 时在 top-k(而不是所有词表)中随机取,如下:

T -> 0 近似贪婪分布,放大了峰值
T ->  使得分布更加平坦
其中,   是启发式的(自适应),    是每个 token 的 score,如果下个词的 confidence 比较高,    就小一些。在有多个非零的高概率候选 token 时,不采用模型,而是 “贪婪” 地选择下一个 token。对可能会产生的重复 token,文章提出一种新的 sample 方法,既能够近似贪婪 sampling,又能够对重复进行惩罚。惩罚的方法是对已产生的 tokens 进行打折(不在训练中使用),给定一列生成的 tokens g:

其中, 能够取得不错的平衡。


03

Control Codes

Style by domain:Wiki,Books,Reviews,Horror,Relationships,Legal

More complex control codes:Science Title, Politics Title, Running Text, Horror Text, Reviews Rating;不同的 Link 代表不同的特征(domain, subdomain, entities, entity relations, and even dates)
Triggering specific tasks:问答、翻译
Zero-shot code-mixing


04

总结

CTRL不仅是一个自然语言处理问题的解决方案,同样也可应用到其它的序列处理问题之中。使用 control code 控制文本生成,控制代码可以是主题、实体、关系、特定任务等等。其实它的本质与之前的 Bert 类似:多任务 + 语言模型;这里的多任务可以看作是一个多分类任务。不过本文的切入角度是 “控制文本生成”,虽然是以类别标签的方式,但不得不说这是一个不错的创新点。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存