首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

基于Conditional

2020-01-12

从文章 《从言语模型到Seq2Seq:Transformer如戏,全赖Mask》 中咱们能够知道,只需合作恰当的Attention Mask,Bert就能够用来做无条件生成和序列翻译使命。

可假如是有条件生成呢?比方操控文本的类别,按类别随机生成文本,也便是Conditional Language Model;又比方传入一副图画,来生成一段相关的文本描绘,也便是Image Caption。

八月份的论文 《Encoder-Agnostic Adaptation for Conditional Language Generation》 比较体系地剖析了使用预练习模型做条件生成的几种计划;九月份有一篇论文 《CTRL: A Conditional Transformer Language Model for Controllable Generation》 供给了一个根据条件生成来预练习的模型,不过这实质仍是跟GPT相同的言语模型,只能以文字输入为条件;而最近的论文 《Plug and Play Language Models: a Simple Approach to Controlled Text Generation》 将$p$转化为$pp$来探求根据预练习模型的条件生成。

不过这些经典作业都不是本文要介绍的。本文重视的是以一个固定长度的向量作为条件的文本生成的场景,而办法是 Conditional Layer Normalization ——把条件融合到Layer Normalization的$\beta$和$\gamma$中去。

Conditional Layer Normalization的主意来源于图画中盛行的条件GAN的思路——条件BN,相关内容能够参阅 《从DCGAN到SELF-MOD:GAN的模型架构开展一览》 。条件BN还有一个变种,称之为AdaIN。条件BN、AdaIN都是将已有的Normalization办法中的$\beta$和$\gamma$变成输入条件的函数,然后能够经过条件来操控生成的行为。

在Bert等Transformer模型中,首要的Normalization办法是Layer Normalization,所以很天然就能想到将对应的$\beta$和$\gamma$变成输入条件的函数,来操控Transformer模型的生成行为,这便是Conditional Layer Normalization的头绪思路。

条件Normalization示意图

关于现已预练习好的模型来说,现已有现成的、无条件的$\beta$和$\gamma$了,它们都是长度固定的向量。咱们能够经过两个不同的改换矩阵,将输入条件改换到跟$\beta,\gamma$相同的维度,然后将两个改换成果别离加到$\beta$和$\gamma$上去。为了避免打乱本来的预练习权重,两个改换矩阵能够全零初始化,这样在初始状况,模型仍然坚持跟本来的预练习模型共同。

直觉上,这种以文本生成为意图的finetune应该要用GPT等自回归预练习模型才干提高作用,但事实上,之前的文章 《从言语模型到Seq2Seq:Transformer如戏,全赖Mask》 现已标明,哪怕你加载Bert的预练习权重来做生成使命,体现仍然杰出。所以不论哪种Transformer-based的预练习模型,都能够考虑用于finetune出生成模型来。而本文仍是以预练习Bert为根底模型进行试验。

至于代码,本文所描绘的Conditional Layer Normalization技巧,也现已被集成到笔者所开发的 bert4keras 中了,现在根底函数 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的话,参数或许过多,所以能够先投影到更低维空间,然后升维;
4、layer_norm_cond_hidden_act:投影到更低维空间时的激活函数,假如为None,则不加激活函数;
5、additional_input_layers:额定的输入层,假如外部传入了张量作为条件,则需要把条件张量所依靠的一切输入层都增加进来,作为输入层,才干构建终究的模型。

介绍再多,其实还不如看比如来得实践。笔者做了两个试验来验证Conditional Layer Normalization的作用。一个是经过情感极性来操控文本生成,也便是情感分类的反问题,这直接经过类的Embedding来作为Layer Normalization的条件;另一个是图画描绘生成,经过预练习的imagenet模型将图片编码为一个固定长度的向量作为Layer Normalization的条件。

这两个代码别离放在 task_conditional_language_model.py 和 task_image_caption.py 中。

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

部分输出:

正面采样:

[u'外观时髦、美丽、性价比高。', u'外观美丽,装备均衡,比较满意,性价比高,外观美丽,功能较高。', u'我是在大学的时分看到这本书的,所以一直在买。书中的作者是林静蕾,她用自己的口吻写出了一个孩子生长中的心路历程,让我看到了她们生长中的不同之处,以及她们生长过程中的不同境地。让我很赏识!', u'我想这是一本能够告知读者什么是坏的,而不是教你怎样说话,告知我什么是错。这儿我引荐了《我要讲故事》,这本书是我很喜欢的一本书,我以为它的理由许多,可是,我信任我。假如你从中得到一些改善,或许你现已有了一个正确的决议。', u'咱们一家五口住的是标间,大床房,大床的床很舒畅;而咱们在携程网上订了两套大床房,这个酒店的价格仍是比较合理的;可是房间的隔音作用不太抱负,有点响的声响;酒店门口的地铁在施工中,不便利;可是酒店的门口的出租车不知道是哪个车的,打车不是很便利;酒店外面的停']

负面采样:

[u'不知道是不是由于电池不太好,不是我不喜欢。', u'看了谈论才买的. 成果发现不是那么廉价, 价格也不廉价.', u'1、外壳不容易沾手印,不容易洗洗2、屏幕有点旧,不能下载铃声', u'我是7月6日订货了《杜拉拉升职记》并现已过银行付款,为什么订单下了两周多至今还未到货?是收货时刻太快了,或许就这么曩昔了吧?', u'这本书我是在网上先看了一遍,后来我再看了一遍。感觉作者的文笔实在太烂了,特别是在写他的博客时特别别扭,写得很不专业,特别是他写股票时那个心情调理的小男孩,几乎便是自作聪明的姿态,几乎便是自作聪明的一种体现!']

Image Caption以 COCO数据集 为例,这个数据集的图片场景比较丰富一些。别的2017年的challenger.ai也举行过一个 图画中文描绘生成比赛 ,里面也包含了一个不错的数据集,不过图片的场景相对来说单调一些。

部分输出:

模型猜测: 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给出了代码完成以及两个比如。

转载到请包含本文地址: https://kexue.fm/archives/7124

更具体的转载事宜请参阅: 《科学空间FAQ》

假如您觉得本文还不错,欢迎/本文。打赏并非要从中取得收益,而是期望知道科学空间取得了多少读者的诚心重视。当然,假如你无视它,也不会影响你的阅览。再次表明欢迎和感谢!

热门文章

随机推荐

推荐文章