作者丨苏剑林

单位丨追一科技

研究方向丨NLP,神经网络

个人主页丨kexue.fm

从文章从语言模型到Seq2Seq:Transformer如戏,全靠Mask中我们可以知道,只要配合适当的 Attention Mask,Bert(或者其他 Transformer 模型)就可以用来做无条件生成(Language Model)和序列翻译(Seq2Seq)任务。

可如果是有条件生成呢?比如控制文本的类别,按类别随机生成文本,也就是 Conditional Language Model;又比如传入一副图像,来生成一段相关的文本描述,也就是 Image Caption。

相关工作

八月份的论文 Encoder-Agnostic Adaptation for Conditional Language Generation [1] 比较系统地分析了利用预训练模型做条件生成的几种方案;九月份有一篇论文 CTRL: A Conditional Transformer Language Model for Controllable Generation [2] 提供了一个基于条件生成来预训练的模型,不过这本质还是跟 GPT 一样的语言模型,只能以文字输入为条件;而最近的论文 Plug and Play Language Models: a Simple Approach to Controlled Text Generation [3] 将 p(x|y) 转化为 p(x)p(y|x) 来探究基于预训练模型的条件生成。

不过这些经典工作都不是本文要介绍的。本文关注的是以一个固定长度的向量作为条件的文本生成的场景,而方法是 Conditional Layer Normalization——把条件融合到 Layer Normalization 的 β 和 γ 中去。

模型细节

Conditional Layer Normalization 的想法来源于图像中流行的条件 GAN 的思路——条件 BN(Conditional Batch Normalization),相关内容可以参考从DCGAN到SELF-MOD:GAN的模型架构发展一览。条件 BN 还有一个变种,称之为 AdaIN(Adaptive Instance Normalization)。条件 BN、AdaIN 都是将已有的 Normalization 方法中的 β 和 γ 变成输入条件的函数,从而可以通过条件来控制生成的行为。

在 Bert 等 Transformer 模型中,主要的 Normalization 方法是 Layer Normalization,所以很自然就能想到将对应的 β 和 γ 变成输入条件的函数,来控制 Transformer 模型的生成行为,这就是 Conditional Layer Normalization 的线索思路。

▲ 条件Normalization示意图

对于已经预训练好的模型来说,已经有现成的、无条件的 β 和 γ 了,它们都是长度固定的向量。我们可以通过两个不同的变换矩阵,将输入条件变换到跟 β,γ 一样的维度,然后将两个变换结果分别加到 β 和 γ 上去。为了防止扰乱原来的预训练权重,两个变换矩阵可以全零初始化(单层神经网络可以用全零初始化,连续的多层神经网络才不应当用全零初始化),这样在初始状态,模型依然保持跟原来的预训练模型一致。

代码实现

直觉上,这种以文本生成为目的的 finetune 应该要用 GPT 等自回归预训练模型才能提升效果,但事实上,之前的文章从语言模型到Seq2Seq:Transformer如戏,全靠Mask已经表明,哪怕你加载 Bert 的预训练权重来做生成任务,表现依然良好。所以不管哪种 Transformer-based 的预训练模型,都可以考虑用来 finetune 做文本生成模型来。而本文还是以预训练 Bert 为基础模型进行实验。

至于代码,本文所描述的 Conditional Layer Normalization 技巧,也已经被集成到笔者所开发的 bert4keras [4] 中了,现在基础函数 build_bert_model 新增了如下参数:

1. layer_norm_cond:如果该参数非 None,则意味着它是一个张量,shape=[batch_size, cond_size],用来作为 Layer Normalization 的条件;

2. layer_norm_cond_size:如果该参数非 None 且 layer_norm_cond 为 None,则意味着它是一个整数,自行构建一个 shape=[batch_size, layer_norm_cond_size] 的输入层作为 Layer Normalization 的条件;

3. layer_norm_cond_hidden_size:如果该参数为 None,则意味着它是一个整数,用于先将输入条件投影到更低维空间,这是因为输入的条件可能维度很高,直接投影到 hidden_size(比如 768)的话,参数可能过多,所以可以先投影到更低维空间,然后升维;

4. layer_norm_cond_hidden_act:投影到更低维空间时的激活函数,如果为 None,则不加激活函数(线性激活);

5. additional_input_layers:额外的输入层,如果外部传入了张量作为条件,则需要把条件张量所依赖的所有输入层都添加进来,作为输入层,才能构建最终的模型。

实验效果

介绍再多,其实还不如看例子来得实际。笔者做了两个实验来验证 Conditional Layer Normalization 的效果。一个是通过情感极性来控制文本生成,也就是情感分类的反问题,这直接通过类的 Embedding 来作为 Layer Normalization 的条件;另一个是图像描述生成(Image Caption),通过预训练的 imagenet 模型将图片编码为一个固定长度的向量作为 Layer Normalization 的条件。

这两个代码分别放在 task_conditional_language_model.py [5] 和 task_image_caption.py [6] 中。

情感文本生成

情感文本生成就是用的训练集是笔者之前收集整理的情感分类语料 [7],将输入文本和标签反过来用即可。最后生成的时候按概率随机采样,从而能生成不同的文本。

部分输出:

正面采样:[u'外观时尚、漂亮、性价比高。', u'外观漂亮,配置均衡,比较满意,性价比高,外观漂亮,性能较高。', u'我是在大学的时候看到这本书的,所以一直在买。书中的作者是林静蕾,她用自己的口吻写出了一个孩子成长中的心路历程,让我看到了她们成长中的不同之处,以及她们成长过程中的不同境界。让我很欣赏!', u'我想这是一本能够告诉读者什么是坏的,而不是教你怎样说话,告诉我什么是错。这里我推荐了《我要讲故事》,这本书是我很喜欢的一本书,我认为它的理由很多,但是,我相信我。如果你从中得到一些改进,或者你已经有了一个明智的决定。', u'我们一家五口住的是标间,大床房,大床的床很舒服;而我们在携程网上订了两套大床房,这个酒店的价格还是比较合理的;但是房间的隔音效果不太理想,有点响的声音;酒店门口的地铁在施工中,不方便;但是酒店的门口的出租车不知道是哪个车的,打车不是很方便;酒店外面的停']

负面采样:[u'不知道是不是因为电池不太好,不是我不喜欢。', u'看了评论才买的. 结果发现不是那么便宜, 价格也不便宜.', u'1、外壳不容易沾手印,不容易洗洗2、屏幕有点旧,不能下载铃声', u'我是7月6日订购了《杜拉拉升职记》并已通过银行付款,为什么订单下了两周多至今还未到货?是收货时间太快了,可能就这么过去了吧?', u'这本书我是在网上先看了一遍,后来我再看了一遍。感觉作者的文笔实在太烂了,特别是在写他的博客时特别别扭,写得很不专业,特别是他写股票时那个情绪调节的小男孩,简直就是自作聪明的样子,简直就是自作聪明的一种表现!']

Image Caption

Image Caption 以 COCO 数据集 [8] 为例,这个数据集的图片场景比较丰富一些。另外 2017 年的 challenger.ai 也举办过一个图像中文描述生成竞赛 [9],里边也包含了一个不错的数据集(读者自己自行想办法收集),不过图片的场景相对来说单调一些。部分输出:

▲ 模型预测: a baseball game in progress with the batter up to plate.

▲ 模型预测: a train that is sitting on the tracks.

image_id: COCO_val2014_000000524611.jpg

url: http://images.cocodataset.org/val2014/COCO_val2014_000000524611.jpg

predict: a train that is sitting on the tracks.

references: [u'A train carrying chemical tanks traveling past a water tower.', u'Dual train tracks with a train on one of them and a water tower in the background.', u'a train some trees and a water tower ', u'Train on tracks with water tower for Davis Junction in the rear.', u'A train on a train track going through a bunch of trees.']

image_id: COCO_val2014_000000202923.jpg

url: http://images.cocodataset.org/val2014/COCO_val2014_000000202923.jpg

predict: a baseball game in progress with the batter up to plate.

references: [u'Batter, catcher, and umpire anticipating the next pitch.', u'A baseball player holding a baseball bat in the game.', u'A baseball player stands ready at the plate.', u'Baseball players on the field ready for the pitch.', u'A view from behind a mesh fence of a baseball game.']

文章小结

本文提出了利用 Conditional Layer Normalization 来将外部条件融入到预训练模型中的思路,其直接应用就是条件文本生成,但其实也不单单可以用于生成模型,也可以用于分类模型等场景(外部条件可能是其他模态的信息,来辅助分类)。最后基于 bert4keras 给出了代码实现以及两个例子。

相关链接

[1] https://arxiv.org/abs/1908.06938

[2] https://arxiv.org/abs/1909.05858

[3] https://arxiv.org/abs/1912.02164

[4] https://github.com/bojone/bert4keras

[5] https://github.com/bojone/bert4keras/blob/master/examples/task_conditional_language_model.py

[6] https://github.com/bojone/bert4keras/blob/master/examples/task_image_caption.py

[7] https://github.com/bojone/bert4keras/blob/master/examples/datasets/sentiment.zip

[8] http://cocodataset.org/#download

[9] https://challenger.ai/dataset/caption?lan=zh

点击以下标题查看作者其他文章:

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

▽ 点击 | 阅读原文 | 查看作者博客

基于Conditional Layer Normalization的条件文本生成相关推荐

  1. conditional layer normalization

    一.Layer Normalization公式 1)计算各层的期望μ和标注差σ l表示第l个隐藏层,H表示该层的节点数,a表示某一个节点在激活前的值,即a=w*x. 2)标准化 g和b分别表示增益和偏 ...

  2. TensorFlow实现条件批归一化(Conditional Batch Normalization)

    TensorFlow实现条件批归一化(Conditional Batch Normalization) 条件批归一化(Conditional Batch Normalization) TensorFl ...

  3. ICBU可控文本生成技术详解

    简介: 文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务.顾名思义,文本生成任务的目的是生成近似 ...

  4. ICBU 可控文本生成技术详解

    可控文本生成技术大图 一 文本生成技术 文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务.顾名思 ...

  5. PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization

    PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...

  6. 可控文本生成研现状与技术

    提示:文本生成是nlp的重要领域,而可控文本生成的出现对于NLP研究具有重大意义.边学边总结不断更新,先把大框架搞好. 文章目录 前言 一.可控文本生成任务 通过关键字生成可控文本 通过知识图谱生成可 ...

  7. 【论文翻译】Auto-painter:基于条件Wasserstein生成性对抗网络的草图卡通形象生成

    Auto-painter: Cartoon image generation from sketch by using conditional Wasserstein generative adver ...

  8. 基于 transformers 的 generate() 方法实现多样化文本生成:参数含义和算法原理解读

    一.前言 最近在做文本生成,用到huggingface transformers库的文本生成 generate() 函数,是 GenerationMixin 类的实现(class transforme ...

  9. 用文本指导文本:基于文本的自监督可控文本生成模型

    论文标题: CoCon: A Self-Supervised Approach for Controlled Text Generation 论文作者: Alvin Chan, Yew-Soon On ...

最新文章

  1. asp.net core系列 59 Ocelot 构建基础项目示例
  2. 编译与解释实践(1)-flex and bison 配置安装
  3. 红黑树中nil结点_什么是红黑树?程序员面试必问!
  4. 记录一次Oracle注入绕waf
  5. 控制台应用和空项目有什么区别_在公司做的项目和自己在学校做的有什么区别?...
  6. 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
  7. 【ClickHouse】查看数据库容量和表大小的方法(system.parts各种操作方法)
  8. Spring Boot 2.0.3 修改 Servlet 容器(服务器)配置
  9. python包 —rdkit 安装
  10. 有没有一点像selina呢?
  11. 企业微信有什么用,介绍企业微信6个强大的功能
  12. 六十六条经典禅语名句
  13. 螺旋传动设计系统lisp_螺旋传动设计.doc
  14. 中兴网卡连不上网,解决方案如下
  15. 盘点2010年娱乐圈十大重磅事件
  16. 解决Win8为硬件保留了XXXg内存 问题
  17. 服务器用viroblast搭建blast
  18. 【空心杯四旋翼TinyLeaf】四旋翼基础
  19. 笔记本出现数字小键盘怎么解决,出现方形带斜杠123
  20. 浏览器缓存机制(强制缓存,协商缓存)

热门文章

  1. 里面怎么缓存图片_浏览器缓存原理总结
  2. django查询集-17
  3. SAP PP顾问面试题及资料
  4. flume-source
  5. CSS扩展“less和”sass“
  6. Hello Cnblog!
  7. Linux操作系统中内存buffer和cache的区别--从free命令说起(转)
  8. [詹兴致矩阵论习题参考解答]习题3.6
  9. pythin怎么根据月份获取月初和月末_数据统计丨7月份塑料市场明显回暖,8月份是否延续乐观行情?...
  10. easyexcel模板循环模板怎么循环_雅思大作文怎么熟练套模板