?利用有趣的中文語料庫qingyun,由@Doragd 同學編寫的中文聊天機器人:snowman:
儘管她不是那麼完善:muscle:,不是那麼出色:paw_prints:
但她是由我自己coding出來的:sparkling_heart: ,所以
希望大家能夠多多star支持這個NLP初學者?和他的朋友? 小智
這個專案實際上是軟體工程課程設計的子模組。我們的目標是開發一個智慧客服工單處理系統。
智慧客服工單系統實際的工作流程是:當人們向系統發出提問時,系統首先去知識庫中查找是否存在相關問題,如果有,則返回問題的答案,此時如何人不滿意,則可以直接提交工單。如果知識庫中不存在,則呼叫這個聊天機器人進行自動回覆。
此系統服務的場景類似騰訊雲的客服系統,客戶多是來諮詢相關問題的(雲端伺服器,網域等),所以知識庫也是有關雲端伺服器,網域名稱等的諮詢,故障處理的(問題,答案) 集合。
系統的前端介面和前後端訊息互動由另一位同學@adjlyadv 完成,主要採用React+Django方式。
@Doragd 同學負責的是知識庫的獲取和聊天機器人的編寫,訓練,測試。這個repo的內容也是關於這個的。
│ .gitignore
│ config.py #模型配置参数
│ corpus.pth #已经过处理的数据集
│ dataload.py #dataloader
│ datapreprocess.py #数据预处理
│ LICENSE
│ main.py
│ model.py
│ README.md
│ requirements.txt
│ train_eval.py #训练和验证,测试
│
├─checkpoints
│ chatbot_0509_1437 #已经训练好的模型
│
├─clean_chat_corpus
│ qingyun.tsv #语料库
│
├─QA_data
│ QA.db #知识库
│ QA_test.py #使用知识库时调用
│ stop_words.txt #停用词
│ __init__.py
│
└─utils
beamsearch.py #to do 未完工
greedysearch.py #贪婪搜索,用于测试
__init__.py
安裝依賴
$ pip install -r requirements.txt
$ python datapreprocess.py
對語料庫進行預處理,產生corpus.pth (這裡已經上傳好corpus.pth, 故此步可以省略)
可修改參數:
# datapreprocess.py
corpus_file = 'clean_chat_corpus/qingyun.tsv' #未处理的对话数据集
max_voc_length = 10000 #字典最大长度
min_word_appear = 10 #加入字典的词的词频最小值
max_sentence_length = 50 #最大句子长度
save_path = 'corpus.pth' #已处理的对话数据集保存路径
使用知識庫時, 需要傳入參數use_QA_first=True
此時,對於輸入的字串,首先在知識庫中匹配最佳的問題和答案,並返回。找不到時,才呼叫聊天機器人自動產生回應。
這裡的知識庫是爬取整理的騰訊雲官方文件中的常見問題和答案,100條,僅用於測試!
$ python main.py chat --use_QA_first=True
由於課程設計需要,加入了騰訊雲的問題答案對,但對於聊天機器人這個專案來說是無關緊要的,所以一般使用時, use_QA_first=False
,該參數預設為True
$ python main.py chat --use_QA_first=False
$ python main.py chat
exit
, quit
, q
均可在config.py
檔中說明
需要傳入新的參數時,只需要命令列傳入即可,形如
$ python main.py chat --model_ckpt= ' checkpoints/chatbot_0509_1437 ' --use_QA_first=False
上面的命令指出了載入已訓練模型的路徑和是否使用知識庫
語料名稱 | 語料數量 | 語料來源說明 | 語料特點 | 語料範例 | 是否已分詞 |
---|---|---|---|---|---|
qingyun(青雲語料) | 10W | 某聊天機器人交流群 | 相對不錯,生活化 | Q:看來你很愛錢A:噢是嗎?那你也差不多了 | 否 |
$ python train_eval.py train [--options]
定量評估部分暫時還沒寫好,應該採用困惑度來衡量,目前只能產生句子,人為評估品質
$ python train_eval.py eval [--options]