赞
踩
前言:这篇博客主要是依赖网上开源的DeepQA项目,详细介绍其使用的方法,以及需要注意的地方,并没有做较多的改进。这个项目实现简单,操作方便,对于想了解如何实现聊天机器人的伙伴们,是个不错的入门之选,其后也附有我的效果展示和源码。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
环境配置:笔者是使用python3.5,IDE是pycharm的windows环境,ubuntu的Linux环境还未亲测,还望海涵。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
话不多说,先附上——DeepQA源码GitHub地址。下载源码、解压、并在pycharm下建立工程。
这篇博客只讲解DeepQA项目的demo,不涉及website
版,有兴趣的伙伴可以自己研究chatbot_website
下的文件——记得也教一下大家。
建立工程后可得到如下图示:下左图里红色标注的是我们主要用到的几个文件或文件夹,详细说明如下:
data
文件夹:**是用来保存语料数据的,在DeepQA源码GitHub地址中对这个文件夹有详细说明。简单介绍如下:打开data
文件夹,是右上图所示:①、红框cornell
下是康奈尔电影对话语料库,也是默认的语料数据,.txt
格式;②、**而如果你自己想使用自己的语料库,则需要将自己准备的语料存入lightweight
文件夹中(下面针对自己的语料库会有更详细的操作介绍);**③、samples
文件夹存储由语料库.txt
格式转化而来的.pkl
文件,.pkl
文件才是程序读取的语料格式;④、test
文件夹下有一个同名不同格式的samples.txt
文件,用来存储测试语料;save
文件夹:**是用来保存由训练得到的model
模型参数,主要是里面的.ckpt
文件存储模型参数;model_predictions.txt
保存内测输出(下有详细介绍);main.py
是主函数:**是训练train
、测试test
的入口;chatbot.py
是主要参数程序:里面包括各种参数调整的接口(下有详细介绍);
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
1、下载解压DeepQA源码,新建pycharm工程后,直接运行main.py
,即可开始训练。运行窗口如下所示:
2、请注意chatbot.py
程序130行–135行的模型参数调整,分别是训练批次numEpochs
、保存参数的步长saveEvery
、批量batchsize
、学习率lr
、dropout
参数:(这里根据大家需求,自行调参)
3、语料读取完毕后,就可以在data/samples
文件夹下查看由语料库中的.txt
文件生成的.pkl
文件:
4、最后就是开始漫长的训练,笔者的配置既没有GPU也没有服务器,真的训练了好久,哭——训练完成后,可以在save/model
文件夹下查看生成的model
参数文件:(此时应该是没有model_predictions.txt
文件,内测测试后才会生成model_predictions.txt
文件,下有介绍)
2.2.1:内测——生成model_predictions.txt
文件
先打开data/cornell
文件夹,查看到其下有两个.txt
文件,这就是康奈尔训练语料集,再打开data/test
文件夹,查看到其下samples.txt
文件就是测试语料集,最后打开main.py
文件,依次点击:run
、Edit Configuration
,得到如下窗口:
在Parameters
中填入下面的内容:
--test
确定后再点击运行main.py
文件,在对话窗口得到成功信息后,就可以在save/model
文件夹下看到生成的model_predictions.txt
文件;
打开model_predictions.txt
文件——这个文件是由训练语料集得到的model来预测data/test/samples.txt
文件得到的预测回答内容,如下所示:
2.2.2:外测——进入人机对话模式
外测的操作步骤如内测一致,依次点击:run
、Edit Configuration
,最后在Parameters
中填入的内容改成如下:
--test interactive
cornell
语料库是英文语料库,不可能出现下图中文形式的回答——因为cornell
语料库训练时间太久了,我就用自己的语料库做了外测。使用自己的语料库做chatbot其实也很简单——就是准备一些语料,修改一些参数。
需要在data/lightweight
文件夹下制作自己的训练语料库,在data/test/samples.txt
制作自己的测试语料库
以下方法只是简单制作方法,制作详细方法请参考——DeepQA项目如何制作自己的语料库
**3.1.1:训练语料制作:**在data/lightweight
文件夹下新建<name>.txt
文本文件,注意<name>
需要使用自己的文件名。在文本文件中输入自己的语料:不同语境间用===
分割,上下即为问答对形式;
**3.1.2:测试语料:**在data/test
文件夹下的samples.txt
中重新输入测试语料,测试语料只在内测时候生成model_predictions.txt
文件用到;也是上下问答对形式,但不必用===
区分语境;
**重要提醒:**每一次重新训练之前,都要先查看data/samples
文件夹下之前生成的两个.pkl
文件是否已经删除——我并没有对这一点进行过深究,只是发现程序具有检查.pkl
格式文件的能力?如果不提早删除,程序会先读取已存在的.pkl
文件,如果这样就意味着新语料并没有参与新的训练(可能这也是唯结果论的分析吧,我并没有深究于此)
训练自己的语料库的步骤我们也已经做过多次轻车熟路了——先打开main.py
文件,依次点击:run
、Edit Configuration
,在Parameters
中填入下面的内容,再点击运行main.py
文件;请注意<name>
要与你的文件名一致;
--corpus lightweight --datasetTag <name>
成功读取语料集后,就可以在data/samples
查看到新生成的.pkl
文件,同样训练结束后可以在save/model
文件夹下查看新生成的model
参数文件;
内测与外测的步骤都与上述内/外测的步骤一模一样:
**内测:**依次点击:run
、Edit Configuration
,在Parameters
中填入下面的内容后,点击运行main.py
文件,就可以在得到成功信息后,在save/model
文件夹下看到生成的model_predictions.txt
文件
--test
**外测:**依次点击:run
、Edit Configuration
,在Parameters
中填入的内容改成如下,最后点击运行main.py
文件
--test interactive
我在使用自己的语料库做外测时发现了一个问题:
训练2W次的模型,外测进入交互窗口后,如果输入的问题是data/lightweight
文件夹下自己语料库中的问题(问题+符号都需要一字不差,问题不区分语种),这时候百分百答出问题正确答案,但如果不是自己语料库内的问题、或者不是百分百自己语料库内的中文问题,总会重复出错
对于这个问题,我的猜想是:
1、由于我的语料集包含的场景过少,问题覆盖面小,训练过拟合导致正确答案只能由完整问题才能答出;
2、因为DeepQA项目面对的语种是英语,对英语有模糊回答处理,所以回答英语问题置信度尚可,但如果我们将训练集改成全中文形式,DeepQA并没有像jieba分词一样类似的操作,所以得到的回答预测总是差强人意。
介于第2点猜想,我又参考做了新的小demo——【聊天机器人】2:使用自己的数据集,实现中文聊天机器人,这次加入中文jieba分词得到的在特定语境下的预测结果还是可以的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。