瞎扯机器人之语种不限 Paddlehub + Wechaty
瞎扯機器人之語種不限 WeChaty + PaddleHub
一、項目背景
基于百度翻譯API, PaddleHub 以及 WeChaty實現(xiàn)微信端不限語種的聊天機器人。聊天時,你說啥語言就回復(fù)你啥語言,并保持聊天環(huán)境上下文。目前是首個使用微信客戶端交互的多輪對話模型。
本項目是參加【AI ChatBot 創(chuàng)意賽】的作品,PaddleHub攜手開源聊天機器人框架WeChaty帶來 AI ChatBot創(chuàng)意賽,為AI算法工程師提供一個全新的應(yīng)用場景:Chatbot (Conversational AI),同時也為Chatbot 開發(fā)者提供一個全新的AI能力平臺,拓寬視野,為未來設(shè)計更加強大的 Chatbot 提供一扇門。
本項目主要難點是協(xié)調(diào)不同語言內(nèi)容在多輪對話中進行交互,展現(xiàn)plato2模型強大的能力。另一方面亮點,結(jié)合了百度翻譯開放API,無縫對接,最終通過Wechaty保證了用戶在終端絲滑般的切換語言聊天。用戶可以很方便的體驗聊天的樂趣,尋找聊天話題不冷場,還能將本應(yīng)用當(dāng)成外語學(xué)習(xí)的好工具。
b站鏈接:https://www.bilibili.com/video/BV1sK4y1d7ys/
二、安裝環(huán)境
import paddle.fluid##檢查飛槳安裝情況 paddle.fluid.install_check.run_check()!pip install paddlehub==1.8.2 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple # 安裝最新版本,使用清華源 !hub install plato2_en_base==1.0.0三、關(guān)于WeChaty和PaddleHub
wechaty(https://github.com/wechaty/wechaty)是一款開源的微信SDK,它基于微信公開的API,對接口進行了一系列的封裝,提供一系列簡單的接口,然后開發(fā)者可以在其之上進行微信機器人的開發(fā)。
PaddleHub 是基于 PaddlePaddle 開發(fā)的預(yù)訓(xùn)練模型管理工具,可以借助預(yù)訓(xùn)練模型更便捷地開展遷移學(xué)習(xí)工作,旨在讓 PaddlePaddle 生態(tài)下的開發(fā)者更便捷體驗到大規(guī)模預(yù)訓(xùn)練模型的價值。
關(guān)于二者的結(jié)合使用請參考我的另一個公開項目:
微信醫(yī)聊自動問答 WeChaty + PaddleHub
這里使用docker腳本可方便快速部署。請將your_token處替換成你的WeChaty token (puppet_padlocal_xxxxxxxxxxxxx)
export WECHATY_LOG="verbose" export WECHATY_PUPPET="wechaty-puppet-padlocal" export WECHATY_PUPPET_PADLOCAL_TOKEN="your_token"export WECHATY_PUPPET_SERVER_PORT="8080" export WECHATY_TOKEN="your_token"docker run -ti \--name wechaty_puppet_service_token_gateway \--rm \-e WECHATY_LOG \-e WECHATY_PUPPET \-e WECHATY_PUPPET_PADLOCAL_TOKEN \-e WECHATY_PUPPET_SERVER_PORT \-e WECHATY_TOKEN \-p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \wechaty/wechaty:latest ~運行成功后如下圖:
三、關(guān)于plato2
PLATO2是一個超大規(guī)模生成式對話系統(tǒng)模型。它承襲了PLATO隱變量進行回復(fù)多樣化生成的特性,能夠就開放域話題進行流暢深入的聊天。在paddlehub中已經(jīng)集成了兩個plato對話模型,分別是plato2_en_base和plato2_en_large。本文使用的是小模型plato2_en_base, 相比plato2_en_large會弱一些,本文使用的模型是plato2_en_base,有興趣的同學(xué)可以自己嘗試下plato2_en_large。
參考大佬的項目:“沒有對象就自己造”系列之 用paddlehub實現(xiàn)多輪對話
因考慮到訓(xùn)練時長和數(shù)據(jù)集,本相關(guān)目主要是為了體驗,所以沒像大佬(沒入門的研究生)那樣進行訓(xùn)練測試。
論文:PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning
代碼原址:github
Plato是百度推出的一個開放域?qū)υ捪到y(tǒng),經(jīng)過打磨,如今已經(jīng)放出了Plato-2版本,不過可能出于商業(yè)化考慮,并沒有放出很詳細(xì)的教程,也沒有放出中文的預(yù)訓(xùn)練模型,如果個人訓(xùn)練的話可能會有很大的困難(論文中用64塊V100訓(xùn)練了3周才得到的模型)。
相較于其他開放域?qū)υ捪到y(tǒng),Plato的優(yōu)勢在于一問多答情景下的處理,即一個問題對應(yīng)多個不同的答復(fù),找出合理的答復(fù)進行對話。這個模型包括兩個學(xué)習(xí)過程(如上圖),第一階段用當(dāng)前表現(xiàn)很好的一對一對話的模型進行初步訓(xùn)練;第二步進行微調(diào),學(xué)習(xí)不同情景的對話生成并進行評估。由于Plato采用了更好的策略應(yīng)付更加現(xiàn)實的場景,其在對話評估取得了目前最好的結(jié)果。
常用的參數(shù):
train.py --train_file 訓(xùn)練文件地址--valid_file 評估文件地址--model 用到的模型名稱:Plato:plato;NSPModel:next_sentence_prediction model--config_path 模型細(xì)節(jié)參數(shù)配置文件,如24L.json--task 模型應(yīng)用任務(wù) NextSentencePrediction;DialogGeneration;UnifiedTransformer--vocab_path 詞集路徑--spm_model_file sentencepiece model文件的路徑--num_epochs 訓(xùn)練周期數(shù)--log_steps 輸出訓(xùn)練詳情的間隔步數(shù)--validation_steps 評價間隔步數(shù)--save_steps 保存間隔步數(shù)infer.py --infer_file 需要推斷的文件--output_name 需要保存的對象,response;data_id;score--model 用到的模型名稱:Plato:plato;NSPModel:next_sentence_prediction model--config_path 模型細(xì)節(jié)參數(shù)配置文件,如24L.json--task 模型應(yīng)用任務(wù) NextSentencePrediction;DialogGeneration;UnifiedTransformer--vocab_path 詞集路徑--spm_model_file sentencepiece model文件的路徑四、關(guān)于百度翻譯API
PaddleNLP中已有三款性能不錯的機器翻譯模型, 分別是(seq2seq, text_simultaneous_translation, transformer), 但是都需要大量的數(shù)據(jù)和訓(xùn)練資源, 集成在項目里復(fù)雜度也較高,不太適合這篇新手體驗項目。而且經(jīng)過測試,百度翻譯API的效果要遠(yuǎn)比自己訓(xùn)練的要好,響應(yīng)和API設(shè)計都能達(dá)到要求。
使用百度翻譯API就極其簡單了, 就需要簡單的二三十行代碼,就能實現(xiàn)近實時的文本翻譯以及多語種交互翻譯。
準(zhǔn)備工作主要是兩步:
第一步:
注冊百度賬號(自行注冊)
第二步
申請百度翻譯api ,獲得appid以及securityKey
申請教程:https://jingyan.baidu.com/article/3f16e00305bb552591c10304.html
第三步
下載相應(yīng)的示例代碼,修改appid和securityKey就可以跑通了。 可參考我的代碼: baidu_translate.py
五、運行Plato2和百度翻譯
總體上效果還行, 雖然上下文環(huán)境的保持還是不夠優(yōu)秀,語言翻譯額時候也會有一些偏差,但是已經(jīng)能滿足瞎扯的需求了, 瞎扯的時候還能練練外語。
注意:要在GPU環(huán)境下運行
六、部署在wechaty和腳本任務(wù)上
實測效果還不錯~~~
七、總結(jié)
本項目嘗試了plato2, 并結(jié)合百度AI開放的機器翻譯API,打造了一個不限語種的聊天機器人,經(jīng)過測試效果還挺不錯。
后續(xù)我將手動訓(xùn)練機器翻譯模型以及plato2對話模型。
關(guān)于作者
PaddlePaddle開發(fā)愛好者
我在AI Studio上獲得黃金等級,點亮5個徽章,來互關(guān)呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/89442
請點擊此處查看本環(huán)境基本用法.
Please click here for more detailed instructions.
總結(jié)
以上是生活随笔為你收集整理的瞎扯机器人之语种不限 Paddlehub + Wechaty的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作为一名职场新人,入职四博公司十周年的感
- 下一篇: 2020 超分辨率技术发展趋势