1. 程式人生 > >Seq2Seq Chatbot 聊天機器人:基於Torch的一個Demo搭建 手札

Seq2Seq Chatbot 聊天機器人:基於Torch的一個Demo搭建 手札

說明

@MebiuW
之前在微博愛可可那裡看見一個用Seq2Seq做的聊天機器人,正好下來跑一下程式碼研究研究。。所以有了這篇手札

這篇手札相對完整,即便你環境沒什麼也能跑

特別說明:我不用Torch了,程式碼也不是我的,僅僅只是記錄,如果有問題也不用問我,我不瞭解了,我隨後應該會來一個基於Tensorflow的,大家請期待吧。。這個有問題,問了我也真的不知道。。sorry,不用留言或者微博私信了

Torch安裝

安裝Torch,安裝官方的說法,使用git克隆程式碼後進行安裝。
預設安裝在了主目錄的torch檔案下,大家可以根據自己的需求進行更改,安裝需要聯網下載依賴,還是需要耐心等待下的。

git clone https://github.com/torch/distro.git ~/torch --recursive
cd ~/torch; bash install-deps;
./install.sh

安裝完成後,需要將torch新增進入自己的bash目錄,挑選下面一個命令執行就好

# 如果使用Linux和Bash執行這個
source ~/.bashrc
# 如果是Linux和Zsh
source ~/.zshrc
# ****然後再執行這個
source ~/.profile

如果安裝成功,那麼在命令列終端輸入

th

就可以看到如下的介面,也就證明已經下載成功
這裡寫圖片描述

安裝依賴和語料

注意這裡直接使用了torch的安裝地址,如果你之前安裝的地址不一樣,那麼記得修改一下luarocks前面的地址

sudo ~/torch/install/bin/luarocks install nn
sudo ~/torch/install/bin/luarocks install rnn
sudo ~/torch/install/bin/luarocks install async

接下來克隆原始碼和語料,注意自己提前選擇好目錄

git clone --recursive https://github.com/rustcbf/chatbot-zh-torch7 #程式碼
git clone --recursive https://github.com
/rustcbf/dgk_lost_conv #語料 git clone --recursive https://github.com/chenb67/neuralconvo #以上兩個在此原始碼進行改進,可作為參考

同時根據我執行原始碼,有一些python依賴是之前的人沒有寫到的,可能需要執行如下的程式碼:

sudo pip install --upgrade chardet

執行

在語料dgk那個目錄,將語料解壓縮

unzip dgk_shooter_min.conv.zip 

然後進入到程式碼目錄(chatbot-zh-torch7)
修改如下的檔案

 vi cornell_movie_dialogs.lua

將第18行 xx.conv那個地址,改成剛剛解壓的那個conv地址,這個是語料
然後還是在程式碼那個目錄執行

th train.lua

然後就會開始運行了
這裡寫圖片描述

我使用虛擬機器跑的,還是要等一下的,有一次跑了8分鐘提示記憶體不足(1.8G),然後加到3GB去跑了也失敗了,然後就換了一個物理機(這個就高配了 64G記憶體)重新配置了一下,也是提示記憶體不足就掛了。。我驚呆了。

所以請用如下的引數訓練(如果你只是用CPU 做一個Demo):

th train.lua --dataset 20000 --hiddenSize 100 &

訓練一共30輪,耗時非常長,我給的那個引數應該1個小時多能跑完,如果是按照原文的引數,我這裡要400個小時附近(50000 dataset 1000 hiddensize)

這裡寫圖片描述

執行

首先驗證是否成功

th eval.lua

如果沒有什麼提示,那麼就是成功了,那麼接下來我們來看下執行效果

修改eval.lua 在末尾增加如下的程式碼

print("\nType a sentence and hit enter to submit.")
print("CTRL+C then enter to quit.\n")
while true do
  io.write("you> ")
  io.flush()
  io.write(say(io.read()))
end

然後執行這個檔案就可以
這裡寫圖片描述

因為我的訓練引數給的很少,只是為了看一個Demo,所以比較傻。。。有條件的人可以用cuda加速看看,看看完整訓練出來是什麼樣子?

結語

特別說明:我不用Torch了,程式碼也不是我的,僅僅只是記錄,如果有問題也不用問我,我不瞭解了,我隨後應該會來一個基於Tensorflow的,大家請期待吧。。這個有問題,問了我也真的不知道。。sorry,不用留言或者微博私信了

附錄