NewBeeNLP公眾號原創出品
公眾號專欄作者@山竹小果
風格遷移是自然語言生成領域一個非常火的主題,對於文本風格遷移,先舉個例子:
Input:謝謝
Output(金庸):多謝之至
Input:再見
Output(金庸):別過!
Input:請問您貴性?
Output(金庸):請教閣下尊姓大名?
再潑個冷水:
目前自然語言生成(NLG)領域的研究還不太實用,所以希望像人一樣先理解句子,再改寫句子是不太現實的。
那麼能否用機器翻譯的方法,不理解句子也能實現句子的轉換?這也是挺有局限的。機器翻譯需要使用使用大量的對齊語料進行監督學習,應該是不會有人專門標註這樣的語料的。
不過在某些特定領域,可以通過一些巧妙的數據挖掘方式來獲取語料。例如根據新聞報導自動生成評論或摘要等,這樣的題目現在很多人在做。假如把新聞語料和新聞評論的關係也當做「風格轉換」的話,那麼答案還是存在的。
相關工作接下來我們看一些文本風格遷移的工作,我們關心的:
論文 LISTUnpaired Sentiment-to-Sentiment Translation: A Cycled Reinforcement Learning ApproachDelete, Retrieve, Generate: A Simple Approach to Sentiment and Style TransferGenerating Sentences by Editing PrototypesStyle Transfer from Non-Parallel Text by Cross-AlignmentStyle Transfer Through Back-TranslationA Dual Reinforcement Learning Framework for Unsupervised Text Style TransferA Hierarchical Reinforced Sequence Operation Method for Unsupervised Text Style Transfer下面簡單看下前三篇:
Unpaired Sentiment-to-Sentiment Translation: A Cycled Reinforcement Learning Approach第一篇工作,從題目來看就很吸引人,unpaired 對應 cycle,很自然聯想到 reconstruction。而 reinforcement learning 主要是為了解決訓練過程中離散文本不可求導的問題。
雖然過去也有一些 text style transfer 的問題,但是因為缺少對於非 stylish 或者說「普通文本」的語義信息的顯式保留,導致很容易出現下面這種情況:當把「The food is delicious」這句話從正向情感遷移到負向情感時,會得到「What a bad movie」——雖然情感被正確轉化了,但是內容的主體也跟著變了。這顯然是不好的。
為了解決這個問題,這篇工作使用了兩個 module,一個 neutralization module 用於提取 non-emotional content,另一個 emotionalization module 用於生成或者說融入 sentiment words。
如上圖所示,下面的 neutralization module 其實是通過直接刪除emotional words 來實現 non-emotional content 的保留。這一步中,作者通過使用 self-attention 得到的注意力權重作為分類器特徵,從而自動找出 emotional words。
從實驗結果來看,這個方法的分類準確率也可以達到 90% 左右(不過 sentiment classification 本身也不是很難,稍微複雜一點的模型都可以達到95%甚至更高)。
接下來就是 emotionalization module,可以看到,一個 encoder 和兩個 decoder。兩個 decoder 對應 sentiment classification 的兩個類別(positive or negative),並且分別用於訓練時的 reconstruction 和測試時的 generation(emotionalization)。
由於文本的離散性,作者採用了 RL 的方法來訓練這兩個 module。RL 成功與否嚴重依賴於獎勵函數的設計。在這篇論文中,作者提出了兩個 reward:sentiment confidence 和 BLEU。尤其是 BLEU,主要是針對作者想解決的問題——non-emotional content perserving。最終的獎勵函數如下:
插播:BLEU(Bilingual Evaluation Understudy)
其中,
這裡的BLEU值是針對一條翻譯(一個樣本)來說的。例子:
候選譯文(Predicted):It is a guide to action which ensures that the military always obeys the commands of the party
參考譯文(Gold Standard)1:It is a guide to action that ensures that the military will forever heed Party commands
2:It is the guiding principle which guarantees the military forces always being under the command of the Party
3:It is the practical guide for the army always to heed the directions of the party
Modified n-gram Precision計算也即Pn):
這裡n取值為4,也就是從1-gram計算到4-gram。
首先統計候選譯文裡每個詞出現的次數,然後統計每個詞在參考譯文中出現的次數,Max表示3個參考譯文中的最大值,Min表示候選譯文和參考譯文中的最大值的最小值。例如,詞"the":然後將每個詞的Min值相加,將候選譯文每個詞出現的次數相加,然後兩值相除即得
類似得到2-gram 3-gram 4-gram的Pn,例如"ensures that":然後我們取𝑤1=𝑤2=𝑤3=𝑤4=0.25,也就是Uniform Weights。得到:
下面計算BP(Brevity Penalty),翻譯過來就是「過短懲罰」。由BP的公式可知取值範圍是(0,1],候選句子越短,越接近0。
候選翻譯句子長度為18,參考翻譯分別為:16,18,16。所以𝑐=18(候選翻譯句子長度),𝑟=18(參考翻譯中選取長度最接近候選翻譯的作為r)
所以
整合:
𝐵𝐿𝐸𝑈=1⋅𝑒𝑥𝑝(−0.684055269517)=0.504566684006
BLEU的取值範圍是[0,1],0最差,1最好。通過計算過程,我們可以看到,BLEU值其實也就是「改進版的n-gram」加上「過短懲罰因子」。
從實驗結果來看,過去的工作主要都只考慮了 style transfer 的成功與否(sentiment accuracy),而沒有顯性地考慮 content perserving,所以確實在 BLEU 指標下表現很差。
但是也可以看到,這篇工作提出的方法在大幅提高 BLEU 的情況下,ACC 也有一定損失。可以從這個結果看到,想要非常自然地融入 sentiment words 並且不破壞語義和語法,是很困難的事情。看一些直觀的轉換結果:
2. Delete, Retrieve, Generate: A Simple Approach to Sentiment and Style Transfer第二篇論文,幾乎也是一樣的思路。但是在具體實現上要更直接一點。第二篇論文在進行 style transfer 的時候,基於的是這樣的假設:文本的一些屬性(attribute),比如文本傳達出來的情感信息等,可以體現在文本中的某些特定詞彙上。通過改變這些詞彙,就可能直接改變整句文本的性質屬性(value)。
由上面的示意圖可以看出,作者將那些具有指示功能的特定詞稱為 attribute marker,通過(主要)改變這些 marker,進行 attribute transfer。文章進一步提出了4種具體的方法來改變 marker。
這4種具體的方式也由上圖很清晰地展示了出來。值得一提的是 DeleteOnly 和 DeleteAndRetrieve。在刪除了具體的 marker 後,作者提出再去根據這個沒有情感特定性的句子去從數據中檢索出一句最相似但是 attribute 的數值相反(target attribute)的話。檢索出的這句話主要用於提取新的 target attribute marker,作為「重寫」 RNN 的輸入之一。
很明顯,這樣的工作可能有一定局限性,但在一些簡化場景中,卻是更可控的。其實驗結果也印證了這點。
3. Generating Sentences by Editing Prototypes上面兩篇工作都是進行風格轉換,而在進行文本改寫的時候,還有一類常見的場景就是進行非情感類改寫,比如擴寫句子,改寫語法錯誤等。在進行這樣的工作時,其實也可以採用類似的思路。先找到一個「中立」的、「簡單」的「模板」,再在這個基礎上加入希望增加的信息,如情感、一些複雜修飾詞等等。今天要分享的最後一篇工作就是這樣一個思路。
從上面的示意圖中可以看到,修改後的句子增加了「modiocre」和「ridiculous」這兩個形容詞,變得更複雜了。而重中之重就是在學習 edit vector 上。
可以看到,此時的 edit vector 不再是 sentiment words,而是一種 semantic operation。如果讓 edit vector 作為一種隱變量,也遵循某種分布,那麼同樣的 edit vector 應該符合同一種 edit operation,並且對於句子的改寫是一種微小的可控的操作。
基於這樣的假設和期望,作者用 VAE 來建模 z,目標函數如下:
關鍵就是如何保證學到好的 p 和 q。這篇論文使用的方式和過去很多 VAE 的文本應用都不太一樣,有興趣的同學請一定去查閱原文。值得一提的是,這篇工作中的 edit vector z 是直接拼接在給 decoder 的每一個時刻的輸入上的,並沒有額外的 gate 或者 transform。這也是和上面兩篇工作的區別之一。
最後從結果來看,作者提出的方法確實能更自然地改寫句子。這點從 case studies 還有句子的平滑度方面可以看出:
Summary目前的方法大概就是深度學習在外加使用policy gradient的方法,對於文本的生成的損失函數隻論詞的生成概率,可添加語言規則的損失項,類似詞性,情感等之類,可以提升,而後在beam search階段也可添加語言規則,而不是以只關注概率。
另則,現在的文本風格遷移在人類的角度來看過於easy,離我們想像中的文本風格遷移還有很大一段距離。