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