基于Conditional Layer Normalization的条件文本生成
作者丨蘇劍林
單位丨追一科技
研究方向丨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
點擊以下標題查看作者其他文章:?
當Bert遇上Keras:這可能是Bert最簡單的打開姿勢
玩轉Keras之Seq2Seq自動生成標題 | 附開源代碼
一文讀懂「Attention is All You Need」| 附代碼實現
基于CNN的閱讀理解式問答模型:DGCNN
基于DGCNN和概率圖的輕量級信息抽取模型
ICLR 2019最佳論文 | 用有序神經元表達層次結構
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
???? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結
以上是生活随笔為你收集整理的基于Conditional Layer Normalization的条件文本生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春运退票手续费怎么收
- 下一篇: 新加坡科技设计大学(SUTD)招收计算机