Seq2Seq有哪些不為人知的有趣應用?
引言
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 模型上提出一些改進方案。
▲ 圖1:典型的 Seq2Seq 模型圖
上圖是典型的 Seq2Seq 模型圖,輸入序列是 ABC<EOS>,這裡的 ABC 可以是字元、單詞和短語,<EOS>表示句子結尾符;目標序列是 WXYZ<EOS>,模型分為兩部分,一部分是 encoder,將輸入序列進行編碼表示,另一部分是 decoder,以 encoder 的表示作為 condition,將目標序列解碼出來。由於文本通常是一個變長的序列,所以通常用 RNN、LSTM、GRU 以及他們的變種模型對文本進行建模。
▲ 圖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 來說非常小,而中文的效果不會那麼明顯,因為畢竟漢字的數量也非常多。
▲ 圖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,結果可參考下圖。
▲ 圖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 模型,用來生成寫作大綱。
▲ 圖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上。
▲ 圖6:左邊是參考信息,右邊是演算法生成信息生成代碼補全
寫代碼需要有兩個利器,一個是機械鍵盤,一個就是 IDE,好的 IDE 可以幫助我們省去很多的工作。2016 年底發表在 arXiv 上的一篇 paper「Learning Python Code Suggestion with a Sparse Pointer Network」,研究的問題非常有意思,就是大家常見的 IDE 代碼補全功能。現有的 IDE 對靜態編程語言支持的比較好,對於動態編程語言支持的一般,而且一般都是補全某個函數或者方法之類的,而不能給出更複雜的代碼。本文針對這個問題,構造了一個大型的 Python code 數據集,並且用了比較流行的 Pointer Network 模型來做端到端的訓練,取得了不錯的效果。
▲ 圖7 Seq2Seq 生成代碼提示的模型圖代碼補全在實際應用中非常有用,但想做到很複雜、很智能的補全還有很長的路。不過這個 topic 還是一個非常有意思的東西。
從 web 頁面圖片中生成對應 html 代碼和從公式圖片中生成 latex 代碼
Harvard NLP 組一個非常有意思的工作「What You Get Is What You See: A Visual Markup Decompiler」,研究的問題是如何從 web 頁面圖片中生成對應 html 代碼,以及如何從公式圖片中生成 latex 代碼,為此作者構造了兩個相關的大型數據集,採用了 Seq2Seq 模型來解決這個問題。第一個問題如圖8:
▲ 圖8:從 web 頁面圖片中生成 html 代碼第二個問題如圖9:
第二個問題有一定的實際意義,公式和文本不同,通過 OCR 識別之後,並不太方便顯示在文本編輯工具中,本文的工作將其進一步映射為 latex 代碼,可以非常好地解決 pdf 文本化的問題。
本項目源碼:包括開源的數據、代碼和 demo 演示。
故事風格改寫
利用 Seq2Seq 模型還可以做一些類似故事風格改寫的應用,比如 2016 年的這篇工作「A Theme-Rewriting Approach for Generating Algebra Word Problems」,給定一個簡單的數學應用題,然後給定一種故事風格(比如:星際爭霸),生成該種風格下的應用題描述,如圖10所示:
▲ 圖10:一道應用題被改寫為三種故事背景下的應用題描述對於很多孩子來說,在作業中看到熟悉的動畫片或者漫畫人物會增加他們學習的興趣,這個應用可以非常好地將已有的文本改寫為另外一種故事風格。本項目的數據集和代碼都已開源,地址如下:
Rik Koncel-Kedziorski / Rewriter
總結
本文列舉了幾種 Seq2Seq應用場景,包括了經典的機器翻譯、文本摘要和對話生成等,也包括了一些非常有趣的應用,比如:根據公式圖片生成 latex 代碼,生成 commit message 等。自然語言生成(NLG)是一個非常有意思,也非常有前途的研究領域,簡單地說,就是解決一個條件概率 p(output| context)的建模問題,即根據 context 來生成 output,這裡的 context 可以非常零活多樣,大家都是利用深度學習模型對這個條件概率進行建模,同時加上大量的訓練數據和豐富的想像力,可以實現很多有趣的工作。Seq2Seq 是一個簡單易用的框架,開源的實現也非常多,但並不意味著直接生搬硬套就可以了,需要具體問題具體分析。另外,RNN 系的模型非常難訓練,尤其是多層 RNN 模型,如何優化 RNN 訓練過程也是一個非常值得研究的方向,比如最近的一篇工作「Learning to Skim Text」就是通過一種策略來做 RNN 優化。此外,對於生成內容的控制,即 decoding 部分的研究也是一個非常有意思的方向,比如:如何控制生成文本的長度,控制生成文本的多樣性,控制生成文本的信息量大小,控制生成文本的情感等等。
本文對 Seq2Seq 的一些應用進行了簡單的介紹,希望可以拋磚引玉,看到更多好玩的工作被推薦出來。
關於PaperWeekly
PaperWeekly是一個推薦、解讀、討論、報道人工智慧前沿論文成果的學術平台。如果你研究或從事AI領域,歡迎在公眾號後台點擊「交流群」,小助手將把你帶入PaperWeekly的交流群里。
微信公眾號:PaperWeekly
新浪微博:@PaperWeekly
推薦閱讀:
※機器學習成就人工智慧,還是人工智慧成就機器學習?
※AI研究院 | 法律一視同仁 人工智慧犯罪不能逍遙法外!
※專訪吳恩達:AI幫員工拿更高薪資 而不是讓他們失業
※只要太陽夠大 這個智能窗戶就能用玻璃發電