如何用百度深度學習框架PaddlePaddle實現智慧春聯

pythontab發表於2019-01-30

引言:

不知不覺春節假期馬上到來,在今年的春節話題中,不難發現,除了七大姑八大姨親切問候這些常規話題,人工智慧的蹤跡也是隨處可見。AI在以全新的面貌向我們展示值得期待的未來,比如今天,我們可以用PaddlePaddle來嘗試寫副智慧春聯。過年貼春聯已經成為一個傳統習俗,而商場裡可選的內容不多,很多人想親自出馬,可惜又不大懂平仄對仗。能不能用人工智慧幫我們寫春聯呢?今年春節,百度、網易和央視網推出了“智慧春聯H5”,只要給出2-4個漢字,它就能據此“寫”出一副非常具有觀賞性的藏頭春聯。

是什麼讓機器擁有對春聯這項技能?通過智慧春聯H5,“刷臉”對春聯只需幾秒就能實現,而這背後是一系列“不可描述”的高深技術。視覺方面,主要應用了人臉檢測、屬性分析、人臉融合等技術,可對圖片中的人臉進行檢測,分析人臉對應的年齡、性別、顏值、微笑指數、是否佩戴眼鏡等資訊,並通過一個詞語概括人臉的特性;進而將圖片中的人臉,與指定模板圖中的人臉進行融合,得到新的圖片。這些技術的難度在於,需要對各種角度的人臉進行檢測,並且能夠提取人臉的五官特徵,以便能夠生成與原始人臉相似,但也和模板人臉神似,且毫無違和感的新圖片。

其次是自然語言處理(NLP)方面,基於百度深度學習框架PaddlePaddle先進的神經網路機器翻譯技術,可以將春聯創作轉化為“翻譯”的過程,所不同的是,翻譯是在兩種語言之間建立聯絡,而春聯是在同一種語言中建立聯絡。當然,有些人可能會中招“彩蛋”,這些不是AI寫的春聯。比如你刷臉得出“戲精”這個關鍵詞,就會獲得一副“流量體質天生有戲,主角光環蓋不住你”,橫批“過足戲癮”的春聯,這麼霸氣十足可是由人工專門為你埋的梗哦!這樣的春聯出現在朋友圈裡,毫無疑問,點贊人數會瘋狂UpUpUp……

讓我們嘗試體驗一下吧!PaddlePaddle作為深度學習框架,不僅支援深度學習演算法的開發和調研,而且官方釋出的模型庫裡面彙集了各種領先的影像分類、自然語言處理演算法。通過這些演算法,我們可以很方便地實現各種好玩有趣的功能,比如:智慧春聯。

智慧春聯有各種玩法,可以根據使用者輸入的關鍵詞,生成一副對聯,實現定製化的專屬春聯,比如:使用者輸入“好運”,百度的人工智慧春聯生成程式就會創作出上下聯為“一年好運滿園錦繡,萬眾同心遍地輝煌”、橫批為“春光滿園”的春聯;使用者輸入自己的名字,智慧春聯生成程式可以把自己的名字藏在生成的春聯中,形成個性化非常強的春聯,用來傳送給自己的朋友;甚至使用者不需要輸入關鍵詞,只需要拍一張照片,然後就可以根據這張照片生成圖文並茂的春聯。那這些功能都是怎麼做到的呢?這裡我們給大家介紹一下如何用PaddlePaddle開發一套專屬的智慧春聯生成系統。

一、我們的系統需要先做到能理解影像的內容,比如:使用者輸入的到底是什麼?     這是一個典型影像分類的問題,影像分類是根據影像的語義資訊對不同類別影像進行區分,是計算機視覺中重要的基礎問題,是物體檢測、影像分割、物體跟蹤、行為分析、人臉識別等其他高層視覺任務的基礎,在許多領域都有著廣泛的應用。在深度學習時代,影像分類的準確率大幅度提升,PaddlePaddle在經典的資料集ImageNet上,開放了常用的模型,包括AlexNet、VGG、GoogLeNet、ResNet、Inception-v4、MobileNet、DPN(Dual Path Network)、SE-ResNeXt模型,同時也開源了訓練的模型方便使用者下載使用。基於這些影像分類演算法,可以知道使用者輸入的類別,用類似的技術,還可以知道一些更具體的屬性,比如:對於一張人臉的照片,可以知道性別、年齡這些屬性。有了圖片的這些特徵和屬性之後,我們可以進行關鍵詞擴充套件。比如:對於年輕的女性可以聯想出一些關鍵詞“風華絕代”、“秀麗”、“端莊”等等,對於小孩可以聯想出關鍵詞“活潑可愛”、“機智”、“勇敢”等等。

圖1. 智慧春聯絡統結構圖

二、拿到這些關鍵詞之後,接下來的任務是什麼?

根據一個關鍵詞,自動生成一副相關的春聯。春聯的生成過程可以分成2個步驟,第一個步驟是從關鍵詞生成一副上聯。然後再根據上聯生成一副下聯。那麼如何實現這2個生成步驟呢?我們發現這個任務跟機器翻譯很相似,可以用類似的技術來實現。機器翻譯(Machine Translation, MT)是用計算機來實現不同語言之間翻譯的技術。被翻譯的語言通常稱為源語言(Source Language),翻譯成的結果語言稱為目標語言(Target Language)。機器翻譯即實現從源語言到目標語言轉換的過程,是自然語言處理的重要研究領域之一。PaddlePaddle的模型庫(PaddlePaddle/models)裡面,提供了兩個機器翻譯演算法的實現,一個是經典的基於LSTM的Seq2Seq模型,另一個是最新的基於Attention的Transformer模型。 類比於機器翻譯任務,可以把智慧春聯輸入的關鍵詞看作是機器翻譯裡的源語言句子,然後把根據關鍵詞生成的上聯,看作是機器翻譯裡的目標語言譯文。相較於此前 Seq2Seq 模型中廣泛使用的迴圈神經網路(Recurrent Neural Network, RNN),使用(Self)Attention 進行輸入序列到輸出序列的變換主要具有以下優勢:計算複雜度更小、計算併發度更高、更容易學到長距離的依賴關係。我們推薦使用翻譯效果更好的Transformer模型,通常Transfomer可以得到比Seq2Seq更好的翻譯效果。

圖2. Transformer模型核心元件Multi-Head Attention

圖3. Scaled Dot-Product Attention的PaddlePaddle程式碼實現

三、選定了使用的生成演算法之後,如何讓機器能夠學會寫春聯呢?

接下來就需要給系統準備訓練資料了,所謂“熟讀唐詩三百首”,對於機器來說,需要見到大量的春聯,才能夠學會春聯裡用詞和用字的規律。我們可以去網際網路上找到大量的春聯資料,比如:“爆竹傳吉語”“臘梅報新春”等等,然後把它們作為訓練資料,通常需要幾萬條。有了這些資料後,我們從上聯裡抽取出關鍵詞,“爆竹”-> “爆竹傳吉語”,訓練一個從關鍵詞到上聯的生成模型;然後我們再用“爆竹傳吉語”“臘梅報新春”訓練一個從上聯到下聯的生成模型。

準備好訓練資料後,就可以啟動Transformer模型的訓練了,可以參考PaddlePaddle/models/neural_machine_translation/transformer裡的命令。這個是英德翻譯的例子,在做關鍵詞到上聯的生成時,需要把訓練資料替換成“關鍵詞”到對應“春聯上聯”的資料;在做上聯到下聯生成時,需要把訓練資料替換成“春聯上聯”到對應“春聯下聯”的資料。

訓練完成後就可以得到一個關鍵詞到上聯的生成模型,還有一個從上聯到下聯的生成模型。注意生成過程,需要執行2次Transformer的預測過程,先輸入一個關鍵詞,生成上聯;然後輸入生成的上聯,再生成一個下聯。具體生成參考以下命令。

根據以上PaddlePaddle官方模型庫提供的一些技術,就可以實現一個好玩的智慧春聯絡統了。當然還可以做很多有意思的擴充套件,比如,可以增加一些古詩詞作為訓練語料,使得生成的春聯內容更為豐富;藏頭春聯,把關鍵詞按字分開,通過Grid Beam Search的技術,保證生成的關鍵詞會在春聯特定的位置出現。

有興趣的朋友們可以訪問百度深度學習框架PaddePaddle官方釋出的模型庫來體驗一下實現智慧春聯的技術吧~


相關文章