兩種開源聊天機器人的性能測試(二)——基於tensorflow的chatbot
http://blog.csdn.net/hfutdog/article/details/78155676
開源項目鏈接:https://github.com/dennybritz/chatbot-retrieval/
它實現一個檢索式的機器人。采用檢索式架構,有預定好的語料答復庫。檢索式模型的輸入是上下文潛在的答復。模型輸出對這些答復的打分,選擇最高分的答案作為回復。
下面進入正題。
1.環境配置
首先此項目需要的基本條件是使用Python3(我用的是Python3.4),tensorflow版本為0.11.0。關於Python這裏不多說,網上很多修改Python默認值的文章。後續內容我都將采用python3或者pip3指令,在Python3下進行操作。tensorflow在我測試時,過低版本或者新版本都會出現一些問題,所以建議和我采用一樣的版本(因為我的電腦是AMD的顯卡,所以我沒有選擇GPU版本的tensorflow,有條件的可以選擇)。如果不是可以采用以下命令修改:
sudo pip3 uninstall tensorflow
sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp34-cp34m-linux_x86_64.whl
好了,最基本的條件準備好了。
下面我們將安裝一系列的依賴包,因為裏面依賴關系比較復雜,所以需要註意一下先後順序。我們在命令行中依次輸入以下指令:
sudo apt-get upgrade python3-pip
sudo pip3 install numpy scipy scikit-learn pandas pillow jupyter
sudo pip3 install backports.weakref==1.0rc1
sudo apt-get build-dep Python-imaging
sudo pip3 install tflearn
到這裏,我們的環境基本配置好了,但是因為我是在配置過程中一個一個去解決的這些問題,中間碰到的問題也比較多,這是重新整理過的,每個人的環境也都有所差異,我也不能確保這樣就完全正確。一般這裏面碰到問題無非就是兩種,一是缺包,二是tensorflow版本的問題,往這兩方面考慮就可以解決。
最後,檢查一下這些工具是否都安裝,我們開始導入數據。
首先執行git clone https://github.com/dennybritz/chatbot-retrieval/
然後到此鏈接https://drive.google.com/file/d/0B_bZck-ksdkpVEtVc1R6Y01HMWM/view(需要fanqiang)去下載數據,頁面如果顯示“糟糕,出現預覽問題,正在重新加載”,不要管它,點擊下載即可。將下載到的數據解壓到剛才clone的文件夾chatbot-retrieval的data中,如圖所示:
2.訓練與測試
在chatbot-retrieval文件夾中打開終端,或者cd到該文件夾下,執行以下指令:
python3 udc_train.py
即可開始訓練,我采用CPU訓練了三個多小時,這個視個人情況而定,可以按Ctrl+Z提前結束。在GPU上訓練2萬次大約一個多小時。正常訓練過程中如圖所示:
訓練完後仍然在剛才的路徑下可以執行以下命令對模型進行評估(可以跳過):
python3 udc_test.py –model_dir=./runs/1504264339/
其中後面的數字名稱的文件夾名因人而異,不同的訓練批次名稱也不一樣。這個名稱在訓練的那張截圖裏也可以發現。
最後,進入我們的測試環節。
找到chatbot-retrieval文件夾下的udc_predict.py文件,將30行INPUT_CONTEXT =後的內容改成自己想要問的內容,將31行POTENTIAL_RESPONSES = []中的內容替換成機器人的候選答案。因為這個項目沒有實現一問一答的模式,每次只是給不同的答案進行打分,分數最高的那個是它的期望回答,所以下面我們都將以其回答中打分最高的回答作為標準判斷正確率。仍然在chatbot-retrieval文件夾路徑下執行python3udc_predict.py --model_dir=./runs/1504221361/指令進行測試。
下面是測試情況:
- 中文閑聊型:
(1)INPUT_CONTEXT = "你好"
POTENTIAL_RESPONSES = ["你好", "早上好","中午好","晚上好","好啊","好久不見","很高興認識你","初次見面請多多指教","我不好","你是誰",]
測試效果如圖,我們將每個結果的打分篩選出來。
Context: 你好
你好: 0.501835
早上好: 0.501835
中午好: 0.501835
晚上好: 0.501835
好啊: 0.501835
好久不見: 0.501835
很高興認識你: 0.501835
初次見面請多多指教: 0.501835
我不好: 0.501835
你是誰: 0.501835
可以看到所有回答的打分都是一樣的,這其實是因為語料庫采用了Ubuntu對話數據集,無法處理中文。我們再測一組中文進行驗證。
(2)INPUT_CONTEXT = "明天上午啥課?"
POTENTIAL_RESPONSES = ["明天上午沒課", "計算機圖形學和形式與政策","明天上午有課嗎","還沒開學好不好","包子和稀飯","超市沒開門","明天下雨","那一年你正年輕","時間是讓人猝不及防的東西","瞎扯",]
測試結果:
兩種開源聊天機器人的性能測試(二)——基於tensorflow的chatbot