【Chatbot】1:DeepQA使用自己的数据集做聊天机器人

更新时间:2023-07-04 18:05:27 阅读: 评论:0

【Chatbot】1:DeepQA使⽤⾃⼰的数据集做聊天机器⼈
前⾔:这篇博客主要是依赖⽹上开源的DeepQA项⽬,详细介绍其使⽤的⽅法,以及需要注意的地⽅,并没有做较多的改进。这个项⽬实现简单,操作⽅便,对于想了解如何实现聊天机器⼈的伙伴们,是个不错的⼊门之选,其后也附有我的效果展⽰和源码。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
迁客是什么意思–-----------------------------------------------------------------------------—--------------------------------------------------------—----
环境配置:笔者是使⽤python3.5,IDE是pycharm的windows环境,ubuntu的Linux环境还未亲测,还望海涵。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
⼀、DeepQA项⽬简单介绍
话不多说,先附上——。下载源码、解压、并在pycharm下建⽴⼯程。形容柳树
这篇博客只讲解DeepQA项⽬的demo,不涉及website版,有兴趣的伙伴可以⾃⼰研究chatbot_website下的⽂件——记得也教⼀下⼤家。建⽴⼯程后可得到如下图⽰:下左图⾥红⾊标注的是我们主要⽤到的⼏个⽂件或⽂件夹,详细说明如下:
1. **data⽂件夹:**是⽤来保存语料数据的,在中对这个⽂件夹有详细说明。简单介绍如下:打开data⽂件夹,是右上图所⽰:①、红
框cornell下是康奈尔电影对话语料库,也是默认的语料数据,.txt格式;②、**⽽如果你⾃⼰想使⽤⾃⼰的语料库,则需要将⾃⼰准备的语料存⼊lightweight⽂件夹中(下⾯针对⾃⼰的语料库会有更详细的操作介绍);**③、samples⽂件夹存储由语料库.txt格式转化⽽来的.pkl⽂件,.pkl⽂件才是程序读取的语料格式;④、test⽂件夹下有⼀个同名不同格式的⽂件,⽤来存储测试语料;
2. **save⽂件夹:**是⽤来保存由训练得到的model模型参数,主要是⾥⾯的.ckpt⽂件存储模型参数;保存内测输
出(下有详细介绍);
3. **main.py是主函数:**是训练train、测试test的⼊⼝;
4. chatbot.py是主要参数程序:⾥⾯包括各种参数调整的接⼝(下有详细介绍);
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
⼆、使⽤默认康奈尔(cornell)电影对话语料库做chatbot
2.1、模型训练
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参数⽂件:(此时应该是没有⽂件,内测测试后才会⽣成⽂件,下有介绍)
2.2、模型测试
2.2.1:内测——⽣成⽂件
先打开data/cornell⽂件夹,查看到其下有两个.txt⽂件,这就是康奈尔训练语料集,再打开data/test⽂件夹,查看到其下⽂件就是测试语料集,最后打开main.py⽂件,依次点击:run、Edit Configuration,得到如下窗⼝:
小孩子反复发烧
在Parameters中填⼊下⾯的内容:
--test
确定后再点击运⾏main.py⽂件,在对话窗⼝得到成功信息后,就可以在save/model⽂件夹下看到⽣成的⽂件;
打开⽂件——这个⽂件是由训练语料集得到的model来预测data/⽂件得到的预测回答内容,如下所⽰:
2.2.2:外测——进⼊⼈机对话模式
p开头的英文外测的操作步骤如内测⼀致,依次点击:run、Edit Configuration,最后在Parameters中填⼊的内容改成如下:
--test interactive
就可以在对话窗⼝中进⼊⼈机交互模式,注意cornell语料库是英⽂语料库,不可能出现下图中⽂形式的回答——因为cornell语料库训练时间太久了,我就⽤⾃⼰的语料库做了外测。
小银鱼怎么做好吃
到这⾥⼀个简单的chatbot聊天机器⼈就完成了。训练次数与语料库质量直接影响模型效果,⽹上前辈都是训练20W+次,我这电脑配置望尘莫及了,伙伴们得到的⾼训练次数的模型也可以发出来与我们共享。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
三、使⽤⾃⼰的语料库做chatbot
暖的近义词
使⽤⾃⼰的语料库做chatbot其实也很简单——就是准备⼀些语料,修改⼀些参数。
3.1、如何制作⾃⼰的语料库
需要在data/lightweight⽂件夹下制作⾃⼰的训练语料库,在data/制作⾃⼰的测试语料库
以下⽅法只是简单制作⽅法,制作详细⽅法请参考——
**3.1.1:训练语料制作:**在data/lightweight⽂件夹下新建<name>.txt⽂本⽂件,注意<name>需要使⽤⾃⼰的⽂件名。在⽂本⽂件中输⼊⾃⼰的语料:不同语境间⽤===分割,上下即为问答对形式;
**3.1.2:测试语料:**在data/test⽂件夹下的中重新输⼊测试语料,测试语料只在内测时候⽣成⽂件⽤到;也是上下问答对形式,但不必⽤===区分语境;
3.2、训练⾃⼰的语料库
**重要提醒:**每⼀次重新训练之前,都要先查看data/samples⽂件夹下之前⽣成的两个.pkl⽂件是否已经删除——我并没有对这⼀点进⾏过深究,只是发现程序具有检查.pkl格式⽂件的能⼒?如果不提早删除,程序会先读取已存在的.pkl⽂件,如果这样就意味着新语料并没有参与新的训练(可能这也是唯结果论的分析吧,我并没有深究于此)
训练⾃⼰的语料库的步骤我们也已经做过多次轻车熟路了——先打开main.py⽂件,依次点击:run、Edit Configuration,在Parameters中填⼊下⾯的内容,再点击运⾏main.py⽂件;请注意<name>要与你的⽂件名⼀致;
--corpus lightweight --datatTag <name>
成功读取语料集后,就可以在data/samples查看到新⽣成的.pkl⽂件,同样训练结束后可以在save/model⽂件夹下查看新⽣成的model参数⽂件;
3.3、测试⾃⼰的语料库结果
内测与外测的步骤都与上述内/外测的步骤⼀模⼀样:
遵守的意思
**内测:**依次点击:run、Edit Configuration,在Parameters中填⼊下⾯的内容后,点击运⾏main.py⽂件,就可以在得到成功信息后,
在save/model⽂件夹下看到⽣成的⽂件
--test
**外测:**依次点击:run、Edit Configuration,在Parameters中填⼊的内容改成如下,最后点击运⾏main.py⽂件
--test interactive
就可以在对话窗⼝中进⼊⼈机交互模式。语料库质量差、语料库对话数据少、训练次数过低都会导致交互预测结果差的状况产⽣。
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
–-----------------------------------------------------------------------------—--------------------------------------------------------—----
问题求教:
我在使⽤⾃⼰的语料库做外测时发现了⼀个问题:
训练2W次的模型,外测进⼊交互窗⼝后,如果输⼊的问题是data/lightweight⽂件夹下⾃⼰语料库中的问题(问题+符号都需要⼀字不差,问题不区分语种),这时候百分百答出问题正确答案,但如果不是⾃⼰语料库内的问题、或者不是百分百⾃⼰语料库内的中⽂问题,总会重复出错
胎儿肾积水
对于这个问题,我的猜想是:
1、由于我的语料集包含的场景过少,问题覆盖⾯⼩,训练过拟合导致正确答案只能由完整问题才能答出;
2、因为DeepQA项⽬⾯对的语种是英语,对英语有模糊回答处理,所以回答英语问题置信度尚可,但如果我们将训练集改成全中⽂形
式,DeepQA并没有像jieba分词⼀样类似的操作,所以得到的回答预测总是差强⼈意。
介于第2点猜想,我⼜参考做了新的⼩demo——,这次加⼊中⽂jieba分词得到的在特定语境下的预测结果还是可以的。

本文发布于:2023-07-04 18:05:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1067760.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   语料库   语料   问题   得到   件夹   程序
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图