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分享者。笔芯。