【NLP】NLP文本風格遷移,秒變金庸風

2021-01-18 機器學習初學者

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,離我們想像中的文本風格遷移還有很大一段距離。

相關焦點

  • 基於Bert和通用句子編碼的Spark-NLP文本分類
    文本分類問題中使用了幾個基準數據集,可以在nlpprogress.com上跟蹤最新的基準。以下是關於這些數據集的基本統計數據。簡單的文本分類應用程式通常遵循以下步驟:文本預處理和清理特徵工程(手動從文本創建特徵)特徵向量化(TfIDF、頻數、編碼)或嵌入(word2vec、doc2vec、Bert、Elmo、句子嵌入等)用ML和DL算法訓練模型。
  • 斯坦福發布重磅NLP工具包StanfordNLP,支持中文等53種語言
    新智元報導 來源:stanfordnlp.github.io編輯:肖琴【新智元導讀】斯坦福團隊最新發布一個NLP任務的軟體包StanfordNLP,通過Python接口為53種語言提供標記、依存句法分析等NLP任務的重要工具
  • NLP 新手必看!這是一份覆蓋全面的基於 PyTorch 和 keras 的 NLP...
    項目的 GitHub 地址為:https://github.com/lyeoni/nlp-tutorial。這是一個教你逐步實現和適應簡單的實詞 NLP 任務的教程:項目裡面有 4 個資源:神經機器翻譯、問答匹配、新聞分類和電影分級。這些資源都提供了源碼,對初學者來說,極為友好。初學者可以學會建立自己的模型。
  • 國內自然語言處理(NLP)研究組
    中國大陸地區:微軟亞研自然語言計算組 Natural Language Computing (NLC) Grouphttps://www.microsoft.com/en-us/research/group/natural-language-computing/www.microsoft.com百度自然語言處理百度自然語言處理 - 理解語言,擁有智能,改變世界nlp.baidu.com
  • NLP中的預處理:使用python進行文本歸一化
    我們在有關詞幹的文章中討論了文本歸一化。 但是,詞幹並不是文本歸一化中最重要(甚至使用)的任務。 我們還進行了其他一些歸一化技術的研究,例如Tokenization,Sentencizing和Lemmatization。 但是,還有其他一些用於執行此重要預處理步驟的小方法,將在本文中進行討論。
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    NLP常用於文本數據的分類。文本分類是指根據文本數據內容對其進行分類的問題。我們有多種技術從原始文本數據中提取信息,並用它來訓練分類模型。本教程比較了傳統的詞袋法(與簡單的機器學習算法一起使用)、流行的詞嵌入模型(與深度學習神經網絡一起使用)和最先進的語言模型(和基於attention的transformers模型中的遷移學習一起使用),語言模型徹底改變了NLP的格局。
  • 資源| 史丹福大學NLP組開放神經機器翻譯代碼庫(附論文)
    發布地址:http://nlp.stanford.edu/projects/nmt/參與成員:Christopher D.):vocab.1K.en:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.1K.envocab.1K.cs:http://nlp.stanford.edu/projects/nmt/data/wmt15.en-cs/vocab.1K.csvocab.10K.en:http://nlp.stanford.edu
  • NLP入門+實戰必讀:一文教會你最常見的10種自然語言處理技術
    (https://www.analyticsvidhya.com/blog/2017/10/essential-nlp-guide-data-scientists-top-10-nlp-tasks/)相關工具:這是個基於瀏覽器的詞向量可視化工具。
  • NLP領域中的遷移學習現狀
    在當前的自然語言處理領域中,普遍存在著不同類型的遷移學習。它們可以按照三個維度進行分類:1、源設定和目標設定是否處理相同的任務;2、源域和目標域的性質;3、學習任務的順序。這樣就可以把各種遷移學習分為圖中的幾類。
  • NLP 與 NLU:從語言理解到語言處理
    NLU: from Understanding a Language to Its Processing作者 | Sciforce翻譯 | 蘿蔔菜在種樹     編輯 | 王立魚原文連結:https://medium.com/sciforce/nlp-vs-nlu-from-understanding-a-language-to-its-processing
  • PTMs|2020最新NLP預訓練模型綜述
    如何將PTMs學到的知識遷移到下遊的任務中。4. 收集了目前關於PTMs的學習資料。5. 指明PTMs未來的研究方向,如:局限、挑戰、建議。「nlp領域的發展比cv領域相對緩慢的原因是什麼呢」?相比於cv領域,「nlp領域的劣勢在於有監督數據集大小非常小」(除了機器翻譯),導致深度學習模型容易過擬合,不能很好地泛化。
  • 深度學習在NLP中的運用?從分詞、詞性到機器翻譯、對話系統
    深度學習模型可以將文本中的詞高效地表示為分布式連續向量(word2vec),將詞語、文本由詞空間映射到語義空間,這樣的語義表示可以捕獲重要的句法和語義信息,一定程度上緩解了詞面不匹配、數據稀疏、語義鴻溝等問題。Word2vec 的應用可以使許多自然語言處理任務取得突出的表現。
  • nlp領域發生了新的技術突破,用attention機制研究nlp領域
    近期,nlp領域發生了一系列的技術突破。包括:attention機制,cnn,adaptive attention network(an),兩層cnn相比較,an表現優於一層的cn。今天我們將從這兩種attention機制開始研究nlp領域突破性技術!
  • 181個NLP教程合集,Colab一鍵直達,無需環境配置,此外還有481個文本...
    △數據集還有,他們還開發了一款名為RABBIT的文本分類器,可以實時對媒體報導進行分類,幫助我們更好分辨媒體報導的傾向性。△文本分類器RABBIT媽媽再也不用擔心我被「FAKE NEWS」騙了。⚠️使用教程和下載數據集都要大路暢通喲~僅僅教程收藏是沒用的,一定要自己上手試試喲~參考連結:https://www.reddit.com/r/MachineLearning/comments/gvsh51/p_181_nlp_colab_notebooks_found_here/
  • 想快速入門NLP?我們測評了15門最火課程,幫你找到最適合的
    代碼至上的網課們A Code-First Introduction to NLP course課程連結:https://github.com/fastai/course-nlp授課人:Fast AI專業評分:8/10工具和庫:IPython notebooks, PyTorch, Fast.AI, spacy
  • 這套1600贊的NLP課程已開放,面向實戰,視頻代碼都有丨資源
    3、深度學習:NLP中的遷移學習NLP中的遷移學習涉及到在大型語料庫上訓練語言模型,並且對不同的小語料庫進行微調等。這項工作已經被BERT、GPT-2和XLNet等模型採用,在這一節中,主要分享了構建英語以外其他語言模型的技巧,包括用ULMFit建立越南語和土耳其語語言模型的技巧。
  • Cython 助力 Python NLP 實現百倍加速
    所以除非你在代碼中使用 cdef 聲明對象,否則這些對象都會被解釋器當做 Python 對象(這會導致訪問速度變慢)。使用 Cython 和 spaCy 加速自然語言處理這一切看起來都很好,但是......我們到現在都還沒開始涉及優化自然語言處理任務!沒有字符串操作,沒有 unicode 編碼,也沒有我們在自然語言處理中所使用的妙招。
  • CMU 2020年「神經網絡NLP」課程開課啦
    具體安排如下:2020 年 1 月 14 日:課程簡介、Bag-of-words 模型、多層感知器     2020 年 1 月 16 日:序列標記和語言建模2020 年 1 月 21 日:用於文本的卷積神經網絡 2020 年 1 月 23 日:用於句子或語言建模的遞歸網絡
  • 2019 年 NLP 領域都發生了哪些大事件?
    2019 年初,英偉達的研究人員發表了一篇著名的論文「StyleGAN」,它基於風格遷移方法,提出了一種可選的 GAN 生成架構。接著,他們在論文《Analyzing and Improving the Image Quality of StyleGAN》中對 StyleGAN 進行了改進,重新設計了生成器的歸一化過程。
  • 【超全資源】自然語言處理(NLP)入門學習資源清單(部分資料下載)
    自然語言工具包(NLTK)(網站,圖書)[Python; NLP實用編程介紹,主要用於教學目的]網站網址:http://www.nltk.org圖書網址: http://www.nltk.org/book/ •  斯坦福CoreNLP(網站)[由Java開發的高質量的自然語言分析工具包]網站網址: https://stanfordnlp.github.io