日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Conditional Layer Normalization的条件文本生成

發布時間:2024/10/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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的条件文本生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。