dialogbot:開箱即用的對話機(jī)器人解決方案,涵蓋問答型對話、任務(wù)型對話和聊天型對話等多種場景,支持網(wǎng)絡(luò)檢索問答、領(lǐng)域知識問答、任務(wù)引導(dǎo)問答和閑聊問答,為您提供全方位的對話交互體驗(yàn)。
人機(jī)對話系統(tǒng)一直是AI的重要方向,圖靈測試以對話檢測機(jī)器是否擁有高度的智能。如何構(gòu)建人機(jī)對話系統(tǒng)或者對話機(jī)器人呢?
-
對話系統(tǒng)經(jīng)過三代的演變:
- 規(guī)則對話系統(tǒng):垂直領(lǐng)域可以利用模板匹配方法的匹配問句和相應(yīng)的答案。優(yōu)點(diǎn)是內(nèi)部邏輯透明,易于分析調(diào)試,缺點(diǎn)是高度依賴專家干預(yù),
缺少靈活性和可可拓展性。 - 統(tǒng)計(jì)對話系統(tǒng):基于部分可見馬爾科夫決策過程的統(tǒng)計(jì)對話系統(tǒng),先對問句進(jìn)行貝葉斯推斷,維護(hù)每輪對話狀態(tài),再跟進(jìn)對話狀態(tài)進(jìn)行對話策略的選擇,
從而生成自然語言回復(fù)?;拘纬涩F(xiàn)代的對話系統(tǒng)框架,它避免了對專家的高度依賴,缺點(diǎn)是模型難以維護(hù),可拓展性比較受限。 - 深度對話系統(tǒng):基本延續(xù)了統(tǒng)計(jì)對話系統(tǒng)的框架,但各個(gè)模型采用深度網(wǎng)絡(luò)模型。利用了深度模型強(qiáng)大的表征能力,語言分類和生成能力大幅提高,
缺點(diǎn)是需要大量標(biāo)注數(shù)據(jù)才能有效訓(xùn)練模型。
- 規(guī)則對話系統(tǒng):垂直領(lǐng)域可以利用模板匹配方法的匹配問句和相應(yīng)的答案。優(yōu)點(diǎn)是內(nèi)部邏輯透明,易于分析調(diào)試,缺點(diǎn)是高度依賴專家干預(yù),
-
對話系統(tǒng)分為三類:
- 問答型對話:多是一問一答,用戶提問,系統(tǒng)通過對問題解析和查找知識庫返回正確答案,如搜索。
- 任務(wù)型對話:指由任務(wù)驅(qū)動的多輪對話,機(jī)器需要通過理解、主動詢問、澄清等方式確定用戶目標(biāo),然后查找知識庫返回結(jié)果,完成用戶需求。
如:機(jī)器人售電影票。 - 聊天型對話:目標(biāo)是產(chǎn)生有趣且富有信息量的自然答復(fù)使人機(jī)對話持續(xù)下去,如小度音響。
1.問答型對話(Search Dialogue Bot)
1.1 本地檢索問答
計(jì)算用戶問句與問答庫中問句的相似度,選擇最相似的問句,給出其對應(yīng)的答復(fù)。
句子相似度計(jì)算包括以下方法:
- TFIDF
- BM25
- OneHot
- Query Vector
1.2 網(wǎng)絡(luò)檢索問答
對百度、Bing的搜索結(jié)果摘要進(jìn)行答案的檢索
- 百度搜索,包括百度知識圖譜、百度詩詞、百度萬年歷、百度計(jì)算器、百度知道
- 微軟Bing搜索,包括bing知識圖譜、bing網(wǎng)典
1.3 任務(wù)型對話(Task Oriented Dialogue Bot)
- End to End Memory Networks(memn2n)
- BABi dataset
1.4 聊天型對話(Generative Dialogue Bot)
- GPT2 Model
- Sequence To Sequence Model(seq2seq)
- Taobao dataset
2.Demo展示
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
3.應(yīng)用場景展示
3.1 問答型對話(Search Bot)
example: examples/bot_demo.py
from dialogbot import Bot
bot = Bot()
response = bot.answer('姚明多高呀?')
print(response)
output:
query: "姚明多高呀?"
answer: "226cm"
3.2 任務(wù)型對話(Task Bot)
example: examples/taskbot_demo.py
3.3 聊天型對話(Generative Bot)
3.3.1 GPT2模型使用
基于GPT2生成模型訓(xùn)練的聊天型對話模型。
模型已經(jīng) 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: "吃了"
3.3.2 GPT2模型fine-tune
- 數(shù)據(jù)預(yù)處理
在項(xiàng)目根目錄下創(chuàng)建data文件夾,將原始訓(xùn)練語料命名為train.txt,存放在該目錄下。train.txt的格式如下,每段閑聊之間間隔一行,格式如下:
真想找你一起去看電影
突然很想你
我也很想你
想看你的美照
親我一口就給你看
我親兩口
討厭人家拿小拳拳捶你胸口
今天好點(diǎn)了嗎?
一天比一天嚴(yán)重
吃藥不管用,去打一針。別拖著
運(yùn)行preprocess.py,對data/train.txt對話語料進(jìn)行tokenize,然后進(jìn)行序列化保存到data/train.pkl。train.pkl中序列化的對象的類型為List[List],記錄對話列表中,每個(gè)對話包含的token。
cd dialogbot/gpt/
python preprocess.py --train_path data/train.txt --save_path data/train.pkl
- 訓(xùn)練模型
運(yùn)行train.py,使用預(yù)處理后的數(shù)據(jù),對模型進(jìn)行自回歸訓(xùn)練,模型保存在根目錄下的model文件夾中。
在訓(xùn)練時(shí),可以通過指定patience參數(shù)進(jìn)行early stop。當(dāng)patience=n時(shí),若連續(xù)n個(gè)epoch,模型在驗(yàn)證集上的loss均沒有下降,則進(jìn)行early stop,停止訓(xùn)練。當(dāng)patience=0時(shí),不進(jìn)行early stop。
代碼中默認(rèn)關(guān)閉了early stop,因?yàn)樵趯?shí)踐中,early stop得到的模型的生成效果不一定會更好。
python train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl
更多的訓(xùn)練參數(shù)介紹,可直接看train.py中的set_args()函數(shù)中的參數(shù)說明
3.3.3 預(yù)測模型(人機(jī)交互)
運(yùn)行interact.py,使用訓(xùn)練好的模型,進(jìn)行人機(jī)交互,輸入q結(jié)束對話之后,聊天記錄將保存到sample.txt文件中。
python interact.py --no_cuda --model_dir path_to_your_model
執(zhí)行interact.py時(shí),可以嘗試通過調(diào)整topk、topp、repetition_penalty、max_history_len等參數(shù),調(diào)整生成的效果。更多的參數(shù)介紹,可直接看interact.py的set_args()函數(shù)中的參數(shù)說明
如果要使用GPU進(jìn)行生成,則不要調(diào)用–no_cuda參數(shù),并且通過–device gpu_id來指定使用哪塊GPU。
- 問答示例
- sample1
user :在干嘛
chatbot:睡覺
user :這么早就睡覺啦
chatbot:嗯啊你也早點(diǎn)睡啊
user :我再玩一會兒手機(jī)
chatbot:早點(diǎn)休息晚安
user :拜拜啦
chatbot:晚安晚安
user :多喝熱水
chatbot:哈哈哈
user :多喝熱水
chatbot:好的咯
- sample2
user :在嗎
chatbot:在
user :我不開心
chatbot:怎么啦
user :最近好累啊
chatbot:是挺累的
user :作業(yè)好多啊
chatbot:還好還好
user :我覺得我快要掛科了
chatbot:我也是啊,但是我覺得我快熬出頭了
user :不說了,我還有好多作業(yè)沒寫
chatbot:我也是啊好多啊
user :那先這樣,下次再聊,再見了
chatbot:好噠
4.數(shù)據(jù)集
- 閑聊語料分享
|中文閑聊語料 | 數(shù)據(jù)集地址 |語料描述|
|---------|--------|--------|
|常見中文閑聊|chinese_chatbot_corpus|包含小黃雞語料、豆瓣語料、電視劇對白語料、貼吧論壇回帖語料、微博語料、PTT八卦語料、青云語料等|
|50w中文閑聊語料 | 百度網(wǎng)盤【提取碼:4g5e】 或 GoogleDrive |包含50w個(gè)多輪對話的原始語料、預(yù)處理數(shù)據(jù)|
|100w中文閑聊語料 | 百度網(wǎng)盤【提取碼:s908】 或 GoogleDrive|包含100w個(gè)多輪對話的原始語料、預(yù)處理數(shù)據(jù)|
中文閑聊語料的內(nèi)容樣例如下:
謝謝你所做的一切
你開心就好
開心
嗯因?yàn)槟愕男睦镏挥袑W(xué)習(xí)
某某某,還有你
這個(gè)某某某用的好
你們宿舍都是這么厲害的人嗎
眼睛特別搞笑這土也不好捏但就是覺得挺可愛
特別可愛啊
今天好點(diǎn)了嗎?
一天比一天嚴(yán)重
吃藥不管用,去打一針。別拖著
- 模型分享
模型 | 共享地址 | 模型描述 |
---|---|---|
model_epoch40_50w | shibing624/gpt2-dialogbot-base-chinese 或 百度網(wǎng)盤(提取碼:taqh) 或 GoogleDrive | 使用50w多輪對話語料訓(xùn)練了40個(gè)epoch,loss降到2.0左右。 |
- Reference
- Wen T H, Vandyke D, Mrksic N, et al. A Network-based End-to-End Trainable Task-oriented Dialogue System[J]. 2016.
- How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation
- A. Bordes, Y. Boureau, J. Weston. Learning End-to-End Goal-Oriented Dialog 2016
- Zhao T, Eskenazi M. Towards End-to-End Learning for Dialog State Tracking and Management using Deep Reinforcement Learning [J]. arXiv preprint arXiv:1606.02560, 2016.
- Kulkarni T D, Narasimhan K R, Saeedi A, et al. Hierarchical deep reinforcement learning: Integrating temporal abstraction and intrinsic motivation [J]. arXiv preprint arXiv:1604.06057, 2016.
- BBQ-Networks: Efficient Exploration in Deep Reinforcement Learning for Task-Oriented Dialogue Systems
- Deep Reinforcement Learning with Double Q-Learning
- Deep Attention Recurrent Q-Network
- SimpleDS: A Simple Deep Reinforcement Learning Dialogue System
- Deep Reinforcement Learning with a Natural Language Action Space
- Integrating User and Agent Models: A Deep Task-Oriented Dialogue System
- The Curious Case of Neural Text Degeneration
- DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation
- vyraun/chatbot-MemN2N-tensorflow
- huggingface/transformers
- Morizeyao/GPT2-Chinese
- yangjianxin1/GPT2-chitchat
參考鏈接:https://github.com/shibing624/dialogbot文章來源:http://www.zghlxwxcb.cn/news/detail-654797.html
如果github進(jìn)入不了也可進(jìn)入 https://download.csdn.net/download/sinat_39620217/88205596 免費(fèi)下載相關(guān)資料文章來源地址http://www.zghlxwxcb.cn/news/detail-654797.html
到了這里,關(guān)于dialogbot:開箱即用的對話機(jī)器人解決方案,涵蓋問答型對話、任務(wù)型對話和聊天型對話等多種場景,為您提供全方位的對話交互體驗(yàn)。的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!