基于Conditional Layer Normalization的条件文本生成
作者丨蘇劍林
單位丨追一科技
研究方向丨NLP,神經(jīng)網(wǎng)絡(luò)
個人主頁丨kexue.fm
從文章從語言模型到Seq2Seq:Transformer如戲,全靠Mask中我們可以知道,只要配合適當?shù)?Attention Mask,Bert(或者其他 Transformer 模型)就可以用來做無條件生成(Language Model)和序列翻譯(Seq2Seq)任務。?
可如果是有條件生成呢?比如控制文本的類別,按類別隨機生成文本,也就是 Conditional Language Model;又比如傳入一副圖像,來生成一段相關(guān)的文本描述,也就是 Image Caption。
相關(guān)工作
八月份的論文 Encoder-Agnostic Adaptation for Conditional Language Generation [1] 比較系統(tǒng)地分析了利用預訓練模型做條件生成的幾種方案;九月份有一篇論文 CTRL: A Conditional Transformer Language Model for Controllable Generation [2] 提供了一個基于條件生成來預訓練的模型,不過這本質(zhì)還是跟 GPT 一樣的語言模型,只能以文字輸入為條件;而最近的論文 Plug and Play Language Models: a Simple Approach to Controlled Text Generation [3] 將 p(x|y) 轉(zhuǎn)化為 p(x)p(y|x) 來探究基于預訓練模型的條件生成。?
不過這些經(jīng)典工作都不是本文要介紹的。本文關(guān)注的是以一個固定長度的向量作為條件的文本生成的場景,而方法是 Conditional Layer Normalization——把條件融合到 Layer Normalization 的 β 和 γ 中去。
模型細節(jié)
Conditional Layer Normalization 的想法來源于圖像中流行的條件 GAN 的思路——條件 BN(Conditional Batch Normalization),相關(guān)內(nèi)容可以參考從DCGAN到SELF-MOD:GAN的模型架構(gòu)發(fā)展一覽。條件 BN 還有一個變種,稱之為 AdaIN(Adaptive Instance Normalization)。條件 BN、AdaIN 都是將已有的 Normalization 方法中的 β 和 γ 變成輸入條件的函數(shù),從而可以通過條件來控制生成的行為。?
在 Bert 等 Transformer 模型中,主要的 Normalization 方法是 Layer Normalization,所以很自然就能想到將對應的 β 和 γ 變成輸入條件的函數(shù),來控制 Transformer 模型的生成行為,這就是 Conditional Layer Normalization 的線索思路。
▲?條件Normalization示意圖
對于已經(jīng)預訓練好的模型來說,已經(jīng)有現(xiàn)成的、無條件的 β 和 γ 了,它們都是長度固定的向量。我們可以通過兩個不同的變換矩陣,將輸入條件變換到跟 β,γ 一樣的維度,然后將兩個變換結(jié)果分別加到 β 和 γ 上去。為了防止擾亂原來的預訓練權(quán)重,兩個變換矩陣可以全零初始化(單層神經(jīng)網(wǎng)絡(luò)可以用全零初始化,連續(xù)的多層神經(jīng)網(wǎng)絡(luò)才不應當用全零初始化),這樣在初始狀態(tài),模型依然保持跟原來的預訓練模型一致。
代碼實現(xiàn)
直覺上,這種以文本生成為目的的 finetune 應該要用 GPT 等自回歸預訓練模型才能提升效果,但事實上,之前的文章從語言模型到Seq2Seq:Transformer如戲,全靠Mask已經(jīng)表明,哪怕你加載 Bert 的預訓練權(quán)重來做生成任務,表現(xiàn)依然良好。所以不管哪種 Transformer-based 的預訓練模型,都可以考慮用來 finetune 做文本生成模型來。而本文還是以預訓練 Bert 為基礎(chǔ)模型進行實驗。?
至于代碼,本文所描述的 Conditional Layer Normalization 技巧,也已經(jīng)被集成到筆者所開發(fā)的 bert4keras [4] 中了,現(xiàn)在基礎(chǔ)函數(shù) build_bert_model 新增了如下參數(shù):?
1. layer_norm_cond:如果該參數(shù)非 None,則意味著它是一個張量,shape=[batch_size, cond_size],用來作為 Layer Normalization 的條件;?
2. layer_norm_cond_size:如果該參數(shù)非 None 且 layer_norm_cond 為 None,則意味著它是一個整數(shù),自行構(gòu)建一個 shape=[batch_size, layer_norm_cond_size] 的輸入層作為 Layer Normalization 的條件;?
3. layer_norm_cond_hidden_size:如果該參數(shù)為 None,則意味著它是一個整數(shù),用于先將輸入條件投影到更低維空間,這是因為輸入的條件可能維度很高,直接投影到 hidden_size(比如 768)的話,參數(shù)可能過多,所以可以先投影到更低維空間,然后升維;?
4. layer_norm_cond_hidden_act:投影到更低維空間時的激活函數(shù),如果為 None,則不加激活函數(shù)(線性激活);?
5. additional_input_layers:額外的輸入層,如果外部傳入了張量作為條件,則需要把條件張量所依賴的所有輸入層都添加進來,作為輸入層,才能構(gòu)建最終的模型。
實驗效果
介紹再多,其實還不如看例子來得實際。筆者做了兩個實驗來驗證 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'我想這是一本能夠告訴讀者什么是壞的,而不是教你怎樣說話,告訴我什么是錯。這里我推薦了《我要講故事》,這本書是我很喜歡的一本書,我認為它的理由很多,但是,我相信我。如果你從中得到一些改進,或者你已經(jīng)有了一個明智的決定。', u'我們一家五口住的是標間,大床房,大床的床很舒服;而我們在攜程網(wǎng)上訂了兩套大床房,這個酒店的價格還是比較合理的;但是房間的隔音效果不太理想,有點響的聲音;酒店門口的地鐵在施工中,不方便;但是酒店的門口的出租車不知道是哪個車的,打車不是很方便;酒店外面的停']?
負面采樣:[u'不知道是不是因為電池不太好,不是我不喜歡。', u'看了評論才買的. 結(jié)果發(fā)現(xiàn)不是那么便宜, 價格也不便宜.', u'1、外殼不容易沾手印,不容易洗洗2、屏幕有點舊,不能下載鈴聲', u'我是7月6日訂購了《杜拉拉升職記》并已通過銀行付款,為什么訂單下了兩周多至今還未到貨?是收貨時間太快了,可能就這么過去了吧?', u'這本書我是在網(wǎng)上先看了一遍,后來我再看了一遍。感覺作者的文筆實在太爛了,特別是在寫他的博客時特別別扭,寫得很不專業(yè),特別是他寫股票時那個情緒調(diào)節(jié)的小男孩,簡直就是自作聰明的樣子,簡直就是自作聰明的一種表現(xiàn)!']?
Image Caption
Image Caption 以 COCO 數(shù)據(jù)集 [8] 為例,這個數(shù)據(jù)集的圖片場景比較豐富一些。另外 2017 年的 challenger.ai 也舉辦過一個圖像中文描述生成競賽 [9],里邊也包含了一個不錯的數(shù)據(jù)集(讀者自己自行想辦法收集),不過圖片的場景相對來說單調(diào)一些。部分輸出:
▲?模型預測: 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.']
文章小結(jié)
本文提出了利用 Conditional Layer Normalization 來將外部條件融入到預訓練模型中的思路,其直接應用就是條件文本生成,但其實也不單單可以用于生成模型,也可以用于分類模型等場景(外部條件可能是其他模態(tài)的信息,來輔助分類)。最后基于 bert4keras 給出了代碼實現(xiàn)以及兩個例子。
相關(guān)鏈接
[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
點擊以下標題查看作者其他文章:?
當Bert遇上Keras:這可能是Bert最簡單的打開姿勢
玩轉(zhuǎn)Keras之Seq2Seq自動生成標題 | 附開源代碼
一文讀懂「Attention is All You Need」| 附代碼實現(xiàn)
基于CNN的閱讀理解式問答模型:DGCNN
基于DGCNN和概率圖的輕量級信息抽取模型
ICLR 2019最佳論文 | 用有序神經(jīng)元表達層次結(jié)構(gòu)
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學習心得或技術(shù)干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創(chuàng)作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發(fā),請在投稿時提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認每篇文章都是首發(fā),均會添加“原創(chuàng)”標志
???? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發(fā)送?
? 請留下即時聯(lián)系方式(微信或手機),以便我們在編輯發(fā)布時和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結(jié)
以上是生活随笔為你收集整理的基于Conditional Layer Normalization的条件文本生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春运退票手续费怎么收
- 下一篇: 新加坡科技设计大学(SUTD)招收计算机