by 超神經微信
----app
盼望着,盼望着,春節就要來了,今年春節有什麼值得期待的事情麼?不如趁着爸媽還沒來得及催婚催生以前,先好好在家裏表現一番。框架
好比給家裏寫寫春聯,或者再原創定製幾個送給親友,那我這裏有三個機器人,可以幫你對對聯,瞭解一下。工具
這都 9012 年了,忽然腦子一熱打算找個 AI 來寫個對聯,藉助萬能的互聯網,還真找到了三個 AI 工具。學習
微軟的對聯 AI ,是微軟亞洲研究院的一個網頁產品。 它最先要追溯到 2004 年關於自動對聯的設想。測試
通過了這些年的變動,最新的版本由 15 年推出,它能快速的完成對對聯的任務。ui
並且會提供多個選項,若是還不滿意,會在每一個對應的字上給你幾種選擇 。最人性化的在於能夠按須要嵌入你喜歡的字。編碼
這是一個簡潔的網頁對聯繫統,聽說這是一位深藏不露的工程師的「練手項目」。人工智能
它於 2017 年 10 月發佈,面世後意外的受到了廣大吃瓜羣衆的喜好,由於聽說能夠是一天的快樂源泉,還有網友專門錄製了測試視頻,上傳到 bilibili 上。.net
而它使用的方式也很簡單,給上聯,立馬回覆你下聯,毫無商量的餘地,乾淨利落。
做者在網上抓取了幾百萬組對聯數據,用 seq2seq 模型懸鏈除了如今的工具,完成後也將本身的數據集和模型都開源在了 Github 上。
它算是 AI 對聯界的一位萌新,於一周前誕生,是一個接入公衆號的 AI 模型。做者是在看到了一份對聯的語料庫以後,技癢難耐創做出來的。
使用的方法是在公衆號的後臺回覆「上聯 輸入上聯內容」,會獲得下聯,固然也有它對不出來的時候。
若是你忘記了輸入上聯,那後臺就是一個聊天機器人。
爲了比較一下這三個 AI 工具的效果,咱們進行了幾輪測試,輸出的順序依次是微軟對聯、王斌對對聯、AINLP 對聯的結果。
這一輪,除了微信機器人有些讀不懂以外,另外兩位選手都還算正常
對於校長這個行爲, AINIP 的機器人沒法給出結果,直接開始賣萌了,哈哈哈哈,看來果真 AI 不知思聰富。
這一輪三者各有特點,微軟給出的「三叉神經」是要笑死我麼,AINLP 的「鬼斧神工」也是有些莫名,第二位「自由自在」顯得平淡了幾分。
對於這個經典的句子,王斌對對聯給的結果也太調皮了吧。(事實上微軟在選項裏也提供了標準答案)
言歸正傳,仍是要寫春聯。
可最後這一輪,結果上來看,均可以拿來掛門前了哇。
看完了這些小工具,基本上能看出中國傳統文化裏,不只古詩詞、對子、對聯,這些語言單元之間有着極強的規律性,很是適合經過機器來學習並容易自動化完成的事情。
Encoder-Decoder 框架能夠看做是一種文本處理領域的研究模式,應用場景異常普遍。
Encoder-Decoder 框架能夠這麼直觀地去理解:能夠把它看做適合處理由一個句子(或篇章)生成另一個句子(或篇章)的通用處理模型。對於句子對,目標是給定輸入句子 X,期待經過 Encoder-Decoder 框架來生成目標句子 Y。X 和 Y 能夠是同一種語言,也能夠是兩種不一樣的語言。而 X 和 Y 分別由各自的單詞序列構成:
Encoder 顧名思義就是對輸入句子 X 進行編碼,將輸入句子經過非線性變換轉化爲中間語義表示 C:
對於解碼器 Decoder 來講,其任務是根據句子 X 的中間語義表示 C 和以前已經生成的歷史信息 y1,y2….yi-1 來生成i時刻要生成的單詞 yi
每一個 yi 都依次這麼產生,那麼看起來就是整個系統根據輸入句子 X 生成了目標句子 Y。
這種場景是典型的 Encoder-Decoder 框架應用問題。所須要作的就是配置好 Encoder-Decoder 框架的具體模型,好比 Encoder 和 Decoder 都採用RNN模型來作。
只須要找到大量的對聯數據對這個模型進行訓練,那麼便可利用這個模型,輸入上聯,機器就能夠自動產生下聯了。
Encoder-Decoder 框架加上 Attention 應該會顯著提高產生下聯的質量,緣由仍是由於它是要求嚴格對仗的,因此在生成下聯某個字的時候,找到對應上聯相應字做爲生成的重點參考信息無疑是很是重要的。
好比看到上聯的「三」字,Attention 模型使得下聯產生對應字「一」的時候重點參考上聯的「三」這個字,應該知道對應的應該是一個數字型漢字。
使用 Encoder-Decoder 來作這個事情,漢字之間的對仗關係應該可以很好地被學會,可是如何保證生成下聯語義可以一致其實並不必定可以很好地解決。這是什麼意思呢?意思是可能機器看到上聯「風雲三尺劍」,極有可能對出下面的內容:「雨風萬丈刀」,單看每一個字對仗的都很工整,可是做爲一個總體,語義看上去不那麼協調。(注:其實若是真對出這個下聯,想一想其實仍是挺豪情萬丈的,是吧?這其實跟人在乎識上會把連續出現的字經過想象組合出一種合理語境有關。)
本質上 Encoder-Decoder 在解碼階段是可以學會語言模型的,而很明顯語言模型的引入對於生成下聯的可讀性和語言一致性是頗有幫助的。
可是若是訓練數據不是那麼大,相信經過使用大量古詩來訓練一個詩詞語言模型,在 Decoder 生成階段,每一個時間節點 t 生成不少可能的候選漢字,而後利用這個語言模型+Beam Search 應該可以使得生成的對聯保證必定的語義一致性。
做爲對聯生成其實還有上下聯對應漢字的平仄問題,也能夠相似語言模型同樣做爲後處理的步驟進行篩選過濾。
使用 RNN 構建一個古詩詞的語言模型,而後上聯經過這個 RNN 語言模型自動生成。
圖徹底自動生成對聯
此外,對於對聯來講,還遺留一個小問題,就是對聯的橫批如何生成的問題。由於通常對聯還須要配上一個橫批來概括上下聯的主旨。
這個其實思路也是相似的,能夠把上下聯看作一個總體做爲 Encoder 的輸入,Decoder 用來生成橫批便可,這個相似於用 Encoder-Decoder+Attention 作摘要的思路。