Dialogbot, provide complete dialogue model technology. Combining search-based dialogue model , task-based dialogue model and generative dialogue model , output the optimal dialogue response.
dialogbot實現了問答型對話,任務型對話,聊天型對話等多種對話機器人方案,支援網路檢索問答,領域知識問答,任務引導問答,閒聊問答,開箱即用。
Guide
人機對話系統一直是AI的重要方向,圖靈測試以對話來偵測機器是否擁有高度的智慧。
如何建構人機對話系統或對話機器人呢?
對話系統經過三代的演變:
對話系統分為三類:
計算使用者問句與問答庫中問句的相似度,選出最相似的問句,給出其對應的答案。
句子相似度計算包括以下方法:
對百度、Bing的搜尋結果摘要進行答案的檢索
Official Demo: https://www.mulanai.com/product/dialogbot/
The project is based on transformers 4.4.2+, torch 1.6.0+ and Python 3.6+. Then, simply do:
pip3 install torch # conda install pytorch
pip3 install -U dialogbot
or
pip3 install torch # conda install pytorch
git clone https://github.com/shibing624/dialogbot.git
cd dialogbot
python3 setup.py install
example: examples/bot_demo.py
from dialogbot import Bot
bot = Bot ()
response = bot . answer ( '姚明多高呀?' )
print ( response )
output:
query: "姚明多高呀?"
answer: "226cm"
example: examples/taskbot_demo.py
基於GPT2生成模型訓練的聊天型對話模型。
模型已經release 到huggingface models:shibing624/gpt2-dialogbot-base-chinese
example: examples/genbot_demo.py
from dialogbot import GPTBot
bot = GPTBot ()
r = bot . answer ( '亲 你吃了吗?' , use_history = False )
print ( 'gpt2' , r )
output:
query: "亲 吃了吗?"
answer: "吃了"
在專案根目錄下建立data資料夾,將原始訓練語料命名為train.txt,存放在該目錄下。 train.txt的格式如下,每段閒聊之間間隔一行,格式如下:
真想找你一起去看电影
突然很想你
我也很想你
想看你的美照
亲我一口就给你看
我亲两口
讨厌人家拿小拳拳捶你胸口
今天好点了吗?
一天比一天严重
吃药不管用,去打一针。别拖着
執行preprocess.py,對data/train.txt對話語料進行tokenize,然後進行序列化儲存至data/train.pkl。 train.pkl中序列化的物件的類型為List[List],記錄對話清單中,每個對話包含的token。
cd dialogbot/gpt/
python preprocess.py --train_path data/train.txt --save_path data/train.pkl
運行train.py,使用預處理後的數據,對模型進行自回歸訓練,模型保存在根目錄下的model資料夾中。
在訓練時,可以透過指定patience參數進行early stop。當patience=n時,若連續n個epoch,模型在驗證集上的loss均沒有下降,則進行early stop,停止訓練。當patience=0時,不進行early stop。
程式碼中預設關閉了early stop,因為在實作中,early stop得到的模型的產生效果不一定會更好。
python train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl
更多的訓練參數介紹,可直接看train.py中的set_args()函數中的參數說明
運行interact.py,使用訓練好的模型,進行人機交互,輸入q結束對話之後,聊天記錄將保存到sample.txt檔案中。
python interact.py --no_cuda --model_dir path_to_your_model
執行interact.py時,可以嘗試透過調整topk、topp、repetition_penalty、max_history_len等參數,調整產生的效果。更多的參數介紹,可直接看interact.py的set_args()函數中的參數說明如果要使用GPU進行生成,則不要呼叫--no_cuda參數,並且透過--device gpu_id來指定使用哪塊GPU。
user :在干嘛
chatbot:睡觉
user :这么早就睡觉啦
chatbot:嗯啊你也早点睡啊
user :我再玩一会儿手机
chatbot:早点休息晚安
user :拜拜啦
chatbot:晚安晚安
user :多喝热水
chatbot:哈哈哈
user :多喝热水
chatbot:好的咯
user :在吗
chatbot:在
user :我不开心
chatbot:怎么啦
user :最近好累啊
chatbot:是挺累的
user :作业好多啊
chatbot:还好还好
user :我觉得我快要挂科了
chatbot:我也是啊,但是我觉得我快熬出头了
user :不说了,我还有好多作业没写
chatbot:我也是啊好多啊
user :那先这样,下次再聊,再见了
chatbot:好哒
中文閒聊語料 | 資料集位址 | 語料描述 |
---|---|---|
常見中文閒聊 | chinese_chatbot_corpus | 包含小黃雞語料、豆瓣語料、電視劇對白語料、貼吧論壇回帖語料、微博語料、PTT八卦語料、青雲語料等 |
50w中文閒聊語料 | 百度網盤【擷取碼:4g5e】 或GoogleDrive | 包含50w個多輪對話的原始語料、預處理數據 |
100w中文閒聊語料 | 百度網盤【擷取碼:s908】 或GoogleDrive | 包含100w個多輪對話的原始語料、預處理數據 |
中文閒聊語料的內容樣例如下:
谢谢你所做的一切
你开心就好
开心
嗯因为你的心里只有学习
某某某,还有你
这个某某某用的好
你们宿舍都是这么厉害的人吗
眼睛特别搞笑这土也不好捏但就是觉得挺可爱
特别可爱啊
今天好点了吗?
一天比一天严重
吃药不管用,去打一针。别拖着
模型 | 共享地址 | 模型描述 |
---|---|---|
model_epoch40_50w | shibing624/gpt2-dialogbot-base-chinese 或百度網盤(擷取碼:taqh) 或GoogleDrive | 使用50w多輪對話語料訓練了40個epoch,loss降到2.0左右。 |
如果你在研究中使用了dialogbot,請按以下格式引用:
@misc{dialogbot,
title={dialogbot: Dialogue Model Technology Tool},
author={Xu Ming},
year={2021},
howpublished={ url {https://github.com/shibing624/dialogbot}},
}
授權協議為The Apache License 2.0,可免費用做商業用途。請在產品說明中附加dialogbot的連結和授權協議。
項目代碼還很粗糙,如果大家對程式碼有所改進,歡迎提交回本項目,在提交之前,請注意以下兩點:
tests
中加入對應的單元測試python -m pytest
來運行所有單元測試,確保所有單測都是通過的之後即可提交PR。