ParlAI 學習記錄(一)
1、parl.ai簡介
網站地址: https://parl.ai/
github: https://github.com/facebookresearch/ParlAI
doc: https://parl.ai/docs/index.html
相關中文介紹:機器之心新聞報道
ParlAI是 Facebook 開源的一個可用於在多種開放可用的對話數據集上訓練和評估人工智能模型的框架。一個統一的分享、訓練和評估對話模型的平臺,支持各種對話任務。
特色:
- 包含所有主流的對話數據集,從開放域閒聊到可視化問答應有盡有;
- 一系列現成的模型供你參考使用,從抽取式基線模型到Transformer系列;
- 無縫集成了亞馬遜的Amazon Mechanical Turk平臺,用於數據收集、模型訓練和人工評估。
2、快速上手
2.1 安裝
parlai使用python3開發的,Linux 環境,安裝過程超級簡單。
step 1: 將parlai克隆到你的主目錄下;
git clone https://github.com/facebookresearch/ParlAI.git ~/ParlAI
step 2: 進入parlai目錄,執行安裝腳本,需要等待幾分鐘;
cd ~/ParlAI; python setup.py develop
安裝過程就搞定了,so easy 吧。
注意:一些模型需要額外的依賴包,比如說pytorch,需要自行安裝。
2.2 跑跑demo熟悉一下
demo1 : 展示 bAbi任務1的一些例子。不要問bAbi任務是什麼,幹就完事了。
# display examples from bAbI 10k task 1
python examples/display_data.py -t babi:task10k:1
解釋:parlai框架都是用這種帶參數的命令行方式來訓練模型的。-t
表示指定task
。
結果:輸出的數據也很簡單,就是兩個陳述句,A去哪裏了,B去哪裏了。最後問A或者B在哪。考察機器的記憶能力。
demo2 : train一個模型試試。MemNN
即 Memory Network,記憶網絡。
# train MemNN using batch size 1 and 4 threads for 5 epochs
python examples/train_model.py -t babi:task10k:1 -mf /tmp/babi_memnn -bs 1 -nt 4 -eps 5 -m memnn --no-cuda
解釋:parlai框架都是用這種帶參數的命令行方式來訓練模型的。-t
表示指定task
,-mf
表示model_file
,-bs
表示batch_size
,-nt
表示numthreads
,-eps
表示num-epochs
,-m
表示model
,這個參數的值是memnn
表示memory network,記憶網絡。
結果:訓練完成後,出現一堆數據,表示模型在測試集上的性能,我這裏的accuracy
很低,才0.1990。
demo3 : 用剛纔訓練好的模型預測一個試試,看看管不管用。
# display predictions for model save at specified file on bAbI task 1
python examples/display_model.py -t babi:task10k:1 -mf /tmp/babi_memnn -ecands vocab
解釋:-t
、-mf
意思和之前一樣,-ecands
表示eval-candidates
,即候選詞的形式,這個參數也幾種選項,分別是’batch’, ‘inline’, ‘fixed’, ‘vocab’, ‘batch-all-cands’。vocab
表示從詞彙表裏選。
結果:由於之前訓練得到的模型訓練效果比較差,所以預測時也是牛頭不對馬嘴。eval_labels給的答案是hallway,模型 的預測結果是to,我醉了。如果模型訓的好,[eval_labels] 和 [Memnn] 的結果應該是一致的纔對。
[babi:task10k:1]: John went to the bedroom.
John travelled to the office.
Where is Daniel?
[label_candidates]: kitchen|office|bedroom|garden|bathroom|... (5 of 6 shown)
[eval_labels]: hallway
[Memnn]: to
demo4 : 我們自己弄一個句子問問模型,看看它能不能答上來。
# interact with saved model
python examples/interactive.py -mf /tmp/babi_memnn -ecands vocab
...
Enter your message: John went to the hallway.\n Where is John?
[Memnn]: bathroom
解釋:這裏執行的是交互式問答。
結果:不出所料,模型還是猜錯了,應該是hallway,卻回答的是bathroom。
Tips: 其實上面訓練模型時,epoch的參數是5,如果多訓幾輪,比如10,accuracy就能達到0.9,效果就會好很多了,不過需要先把tmp目錄下的兩個模型文件(/tmp/babi_memnn、/tmp/babi_memnn.dict)刪除纔行。
小夥伴可以自己試一下,下期見。
獲取更多深度學習乾貨,歡迎關注我的公衆號:AI分享者。筆芯。