admin
08-27 20:39
93次瀏覽
鼠年春節臨近,來試試新的基于 GPT2-Chinese 自動對聯系統:自動寫對聯(輸入開頭進行對聯自動生成)和自動對對聯(輸入上聯自動寫下聯)。老的自動對聯功能是去年基于深度學習機器翻譯模型上線的一個自動對對聯的對話模塊:風云三尺劍,花鳥一床書---對聯數據集和自動對聯機器人。
這一年來,以BERT為代表的預訓練模型不斷推陳出新,席卷整個自然語言處理(NLP)領域,這其中NLP的難題之一自然語言生成(NLG)也得到了很大的助力,特別是去年上半年 OpenAI 的 GPT-2 的推出,非常驚艷,不過 GPT-2 的模型主要是基于英文領域的語料訓練的,雖然到目前為止已經發布了含有15億參數的完整模型,對于英文領域的自動文本生成非常有幫助,但是對于中文領域的NLG來說還是很受限。
回到中文領域,我們之前推薦過AINLP技術交流群瀟灑的盼望同學的開源項目 GPT2-Chinese:GPT2-Chinese:《【Github】GPT2-Chinese:中文的GPT2訓練代碼》,這個項目可以針對中文數據進行GPT-2模型的訓練,可以寫詩,新聞,小說,或是訓練通用語言模型。所以對于自動對聯生成來說,我能想到的就是基于GPT2-Chinese和對聯數據訓練一份對聯領域的GPT2模型,用于對聯自動生成:寫對聯和對對聯。幸運的是,對聯數據已經有了,依然是我們去年使用過 couplet-dataset ,特別感謝提供這份數據的同學,這份對聯數據包含70多萬條對聯,唯一可惜的是沒有橫批,要是有橫批,就可以造更完整的自動寫對聯和對對聯系統了。
特別需要說明的是,這里并不是基于一個大的中文 GPT-2 模型進行特定領域 finetune 的,雖然目前已經有了大型的中文 GPT-2 預訓練模型:gpt2-ml ,但是和 GPT2-Chinese 是兩個體系,而 GPT2-Chinese 目前還不支持這個大模型的遷移。關于如何使用 GPT2-Chinese 進行對聯數據的 GPT2 模型訓練,這個項目的代碼和文檔都寫得非常清楚,直接參考即可,如果有問題,可以查看一下issue,我遇到的問題基本上就是通過文檔和issue解決的,這里提幾個注意的點:
1)訓練數據可以按 GPT2-Chinese 訓練數據的格式要求寫個腳本進行轉換,可以加一些標記符,譬如開頭,結尾以及上聯下聯之間的分隔符,這樣在生成的時候可以基于這些標記符做trick;
2)訓練時請將參數 min-length 設置為一個較小的數字,默認為128,由于對聯數據長度比較短,按默認的設置訓練后只會得到亂碼,我直接設置為1;
3)根據自己GPU顯存的大小調整 batch_size 和配置參數, 這里 batch_size 默認為8,訓練時在1080TI的機器上會出現OOM,將其設置為4就可以完全跑通了,其他參數不用動;
對聯 GPT-2 模型訓練完成后,可以直接基于 GPT2-Chinese 里面的 generate.py 腳本進行測試,很方便,我基于 generate.py 和 flask-restful 寫了一個 server 版本,對接到AINLP公眾號后臺了,感興趣的同學可以關注AINLP公眾號,直接進行測試:
關鍵詞“寫對聯”觸發對聯自動生成,例如輸入“寫對聯鼠年”,對聯模型會基于“鼠年”進行自動續寫,會給出以“鼠年”開頭大概3個對聯:
關鍵詞“對對聯”觸發基于上聯對下聯,例如輸入“對對聯 一帆風順年年好”,會給出大概3個候選對聯:
當然你可以用“上聯”觸發老的對聯版本進行對比:
至于兩個版本的效果,歡迎多做對比,如果遇到了很棒的機器對聯,也歡迎在評論里分享。最后,歡迎關注AINLP公眾號,測試自動生成對聯和自動對對聯功能:
關于AINLP對話功能模塊,感興趣的同學可以參考:
如果對AINLP公眾號感興趣,也歡迎參考我們的年度閱讀清單:AINLP年度閱讀收藏清單
對象存儲 常見問題
US3
seq2seq模型,seq2seq lstm
encoder decoder結構,adobe media encoder