Seq2Seq有哪些不為人知的有趣應用?

PaperWeekly發表於2017-05-06

引言


Seq2Seq 於 2013年、2014 年被多位學者共同提出,在機器翻譯任務中取得了非常顯著的效果,隨後提出的 attention 模型更是將 Seq2Seq 推上了神壇,Seq2Seq+attention 的組合橫掃了非常多的任務,只需要給定足夠數量的 input-output pairs,通過設計兩端的 sequence 模型和 attention 模型,就可以訓練出一個不錯的模型。除了應用在機器翻譯任務中,其他很多的文字生成任務都可以基於 Seq2Seq 模型來做,比如:文字摘要生成、對話生成等,由於 Seq2Seq 模型中 sequence 的靈活性,很多有意思的應用也隨之誕生。本文將會帶著大家一起來看看 Seq2Seq 好玩的應用。


熱門應用

機器翻譯

神經機器翻譯(Neural Machine Translation)是 NLP 中最經典的任務,也是最活躍的研究領域之一,Seq2Seq 提出之後,最早應用於 nmt 任務。當前,主流的線上翻譯系統都是基於深度學習模型來構建的,包括 Google、百度等,整體效果取得了非常顯著的進步(當然,在剛剛推出的時候還是有很多槽點的)。每年都有特別多的 paper 在 Seq2Seq 模型上提出一些改進方案。


Seq2Seq有哪些不為人知的有趣應用?


▲ 圖1:典型的 Seq2Seq 模型圖

 

上圖是典型的 Seq2Seq 模型圖,輸入序列是 ABC<EOS>,這裡的 ABC 可以是字元、單詞和短語,<EOS>表示句子結尾符;目標序列是 WXYZ<EOS>,模型分為兩部分,一部分是 encoder,將輸入序列進行編碼表示,另一部分是 decoder,以 encoder 的表示作為 condition,將目標序列解碼出來。由於文字通常是一個變長的序列,所以通常用 RNN、LSTM、GRU 以及他們的變種模型對文字進行建模。

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖2:attention 模型圖


attention 模型在 Seq2Seq 提出一年之後被提出,這裡的 attention 和人的一些行為特徵有一定相似之處,人在看一段話的時候,通常只會重點注意具有資訊量的詞,而非全部詞,即人會賦予每個詞的注意力權重不同。attention 模型雖然增加了模型的訓練難度,但提升了文字生成的效果。attention 模型非常的靈活,變種很多,回頭有空一起來總結下 attention 和它的各種變種模型,這裡就不再贅述了。

文字摘要

文字摘要也是一個非常經典的 NLP 任務,應用場景非常廣泛。我們通常將文字摘要方法分為兩類,extractive 抽取式摘要和 abstractive 生成式摘要。前者是從一篇文件或者多篇文件中通過排序找出最有資訊量的句子,組合成摘要;後者類似人類編輯一樣,通過理解全文的內容,然後用簡練的話將全文概括出來。在應用中,extractive 摘要方法更加實用一些,也被廣泛使用,但在連貫性、一致性上存在一定的問題,需要進行一些後處理;abstractive 摘要方法可以很好地解決這些問題,但研究起來非常困難。

 

也是基於 Seq2Seq+attention 模型在 nmt 任務中的成功,2016 年有很多的工作都是套用Seq2Seq+attention 來做 abstractive 摘要任務,取得了一定的突破,但做的任務比較簡單,輸入是一句比較長的話(比如新聞的開頭部分),目標是生成一個標題(比如新聞的標題)。直接套用Seq2Seq  模型可以得到不錯的效果,但 OOV(未登入詞)問題是一個棘手的問題,在這個領域提出了 Pointer、CopyNet 等優秀的工作,這類模型的思路也是模仿人類的行為,即人在閱讀一些內容時,很多的詞(比如一些實體詞,地名、人名等)並不能理解,只能進行“死記硬背”,也就是模型中的 pointer 或 copy,在生成每一個 token 時,判斷一下是否需要從輸入序列中進行 copy,不需要的話直接生成。當然很多工作在解決這個問題時,採用了一種“降維”的思路,即將最小單元從 word 降為 char,尤其對於英語摘要問題,char 的規模比如 word 來說非常小,而中文的效果不會那麼明顯,因為畢竟漢字的數量也非常多。

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖3:模型生成的摘要結果


 

上圖給出了「Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond 」一文中模型生成的摘要結果,S 為輸入序列,即待摘要的內容,T 為目標序列,即給定的摘要內容,O 為輸出序列,即演算法生成的摘要內容。

 

利用 Seq2Seq 模型來解決文字摘要問題現在仍然停留在輸入序列比較簡短的情況,即 sentence-level abstractive summarization 問題,對於 document-level 和 multi document-level 的問題相關工作還很少,而解決這類更加真實的摘要問題,往往還是需要依賴 extractive 的方法,藉助深度學習的優勢做一些 ranking model。

 

關於文字摘要這塊,去年我寫了個系列部落格(點選“閱讀原文”進行訪問),大家感興趣的可以讀一讀,內容都是 2016 年的相關工作。文字摘要在去年火了一陣子然後沉寂了,最近 arXiv 上又不斷地更新出一些不錯的工作,大家可以關注 PaperWeekly官方微博(@PaperWeekly)和公眾號的【每週值得讀】欄目,我們會第一時間為大家推薦本週最新的高質量工作。

對話生成

Chatbot 是當前最火的創業領域,是投資的焦點,客觀地講,但真正特別好用的 Chatbot 幾乎沒有。C 端的 Chatbot 產品比較少,微軟小冰算是其中最傑出的代表,小冰的定位並非幫助使用者解決什麼具體的實際問題,而是情感陪伴,做一個更像人的 bot,從這個角度來看,小冰是非常成功的。做一個有情感的 bot 其實比做一個所謂“有用”(比如:查天氣、訂機票等)的 bot 更難,上週 PaperWeekly 報導了一篇清華大學計算機系朱小燕、黃民烈老師團隊的工作:PaperWeekly 第35期 | 如何讓聊天機器人懂情感,他們的工作做了一件有趣的事情,給定 context 和情感選項(比如:開心、憂傷等)來生成具有指定情緒的 response,結果可參考下圖。

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖4:根據情感選項生成對應情緒的回覆


目前大多數 Chatbot 公司都在做 B 端,主要以客服業務為主。B 端之所以更容易接受現在大家不成熟的技術,是因為從某個角度上說,Chatbot 提高了生產效率,節約了成本,但這並不意味著 B 端所對應的 C 端的使用者可以接受。Chatbot 的答非所問常常可見,對於 context 的理解也很差,做到“千人千面”的個性化就更加困難了。

 

Seq2Seq 模型提出之後,就有很多的工作將其應用在 Chatbot 任務上,希望可以通過海量的資料來訓練模型,做出一個智慧體,可以回答任何開放性的問題;而另外一撥人,研究如何將 Seq2Seq 模型配合當前的知識庫來做面向具體任務的 Chatbot,在一個非常垂直的領域(比如:購買電影票等)也取得了一定的進展。但整體看來,這種生成式的方法在實際應用中問題頗多,首先是訓練資料的問題,大家都知道方法是怎樣的,但沒有資料,再好的模型也沒有意義。另外,Seq2Seq 做文字生成本身仍有很大的空間可以做,有很多的問題還沒解決好,所以在工程應用中效果一般,業界的通用做法仍是幾年前的做法,基於模板、基於規則和基於檢索的方法來做,只是說利用了一些深度學習模型改進了傳統的模板、規則和檢索方法而已。

 

Chatbot 是個泡沫極大的領域,創業公司宣傳的 Chatbot、投資人理解的 Chatbot、媒體鼓吹的 Chatbot 和使用者期望的 Chatbot 其實都是不同的。Chatbot 是個綜合性的工程問題,需要很多技術成熟了才能真正的解決好。回頭有空了,可以好好對比一下現有的產品,檢驗下大家的產品是不是和宣傳的一致。

趣味應用

詩詞生成

讓機器為你寫詩並不是一個遙遠的夢,Seq2Seq 模型一個非常有趣的應用正是詩詞生成,即給定詩詞的上一句來生成下一句。PaperWeekly 第23期 | 機器寫詩,來自中科大的王哲同學為大家 survey 了這個領域的一些工作,他的 paper「Chinese Poetry Generation with Planning based Neural Network」也提出了一種詩詞生成模型,為了保證後面幾句詩詞在生成的時候與詩詞主題的相關性,在 Seq2Seq 基礎上提出了一個 planning 模型,用來生成寫作大綱。

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖5:左邊是機器生成的詩詞,右邊是一首宋代詩詞

生成 commit message

今年 ACL 錄用一篇非常有趣的 paper「A Neural Architecture for Generating Natural Language Descriptions from Source Code Changes」,輸入 code 的修改資訊,輸出用自然語言生成的 code commit message,大家在用程式碼版本控制器 commit code 時,通常需要寫個 commit message 來標記改動的記錄。本文的工作利用 Seq2Seq 模型,幫助大家在 commit 程式碼的時候直接用演算法生成 commit message。作者將程式碼開源在了 GitHub 上(https://github.com/epochx/commitgen)

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖6:左邊是參考資訊,右邊是演算法生成資訊

生成程式碼補全

寫程式碼需要有兩個利器,一個是機械鍵盤,一個就是 IDE,好的 IDE 可以幫助我們省去很多的工作。2016 年底發表在 arXiv 上的一篇 paper「Learning Python Code Suggestion with a Sparse Pointer Network」,研究的問題非常有意思,就是大家常見的 IDE 程式碼補全功能。現有的 IDE 對靜態程式語言支援的比較好,對於動態程式語言支援的一般,而且一般都是補全某個函式或者方法之類的,而不能給出更復雜的程式碼。本文針對這個問題,構造了一個大型的 Python code 資料集,並且用了比較流行的 Pointer Network 模型來做端到端的訓練,取得了不錯的效果。

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖7 Seq2Seq 生成程式碼提示的模型圖

 

程式碼補全在實際應用中非常有用,但想做到很複雜、很智慧的補全還有很長的路。不過這個 topic 還是一個非常有意思的東西。

 

從web頁面圖片中生成對應html程式碼和從公式圖片中生成latex程式碼

Harvard NLP 組一個非常有意思的工作「What You Get Is What You See: A Visual Markup Decompiler」,研究的問題是如何從 web 頁面圖片中生成對應 html 程式碼,以及如何從公式圖片中生成 latex 程式碼,為此作者構造了兩個相關的大型資料集,採用了 Seq2Seq 模型來解決這個問題。第一個問題如圖8:

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖8:從 web 頁面圖片中生成 html 程式碼


第二個問題如圖9:

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖9:從公式圖片中生成 latex 程式碼

 

第二個問題有一定的實際意義,公式和文字不同,通過 OCR 識別之後,並不太方便顯示在文字編輯工具中,本文的工作將其進一步對映為 latex 程式碼,可以非常好地解決 pdf 文字化的問題。

 

本專案主頁地址:http://lstm.seas.harvard.edu/latex/,包括開源的資料、程式碼和 demo 演示。

 

故事風格改寫

利用 Seq2Seq 模型還可以做一些類似故事風格改寫的應用,比如 2016 年的這篇工作「A Theme-Rewriting Approach for Generating Algebra Word Problems」,給定一個簡單的數學應用題,然後給定一種故事風格(比如:星際爭霸),生成該種風格下的應用題描述,如圖10所示:

Seq2Seq有哪些不為人知的有趣應用?

▲ 圖10:一道應用題被改寫為三種故事背景下的應用題描述

 

對於很多孩子來說,在作業中看到熟悉的動畫片或者漫畫人物會增加他們學習的興趣,這個應用可以非常好地將已有的文字改寫為另外一種故事風格。本專案的資料集和程式碼都已開源,地址如下:


https://gitlab.cs.washington.edu/kedzior/Rewriter/

 

總結


本文列舉了幾種 Seq2Seq應用場景,包括了經典的機器翻譯、文字摘要和對話生成等,也包括了一些非常有趣的應用,比如:根據公式圖片生成 latex 程式碼,生成 commit message 等。自然語言生成(NLG)是一個非常有意思,也非常有前途的研究領域,簡單地說,就是解決一個條件概率 p(output| context)的建模問題,即根據 context 來生成 output,這裡的 context 可以非常零活多樣,大家都是利用深度學習模型對這個條件概率進行建模,同時加上大量的訓練資料和豐富的想象力,可以實現很多有趣的工作。Seq2Seq 是一個簡單易用的框架,開源的實現也非常多,但並不意味著直接生搬硬套就可以了,需要具體問題具體分析。另外,RNN 系的模型非常難訓練,尤其是多層 RNN 模型,如何優化 RNN 訓練過程也是一個非常值得研究的方向,比如最近的一篇工作「Learning to Skim Text」就是通過一種策略來做 RNN 優化。此外,對於生成內容的控制,即 decoding 部分的研究也是一個非常有意思的方向,比如:如何控制生成文字的長度,控制生成文字的多樣性,控制生成文字的資訊量大小,控制生成文字的情感等等。

 

本文對 Seq2Seq 的一些應用進行了簡單的介紹,希望可以拋磚引玉,看到更多好玩的工作被推薦出來。


相關文章