本篇教程的目标:
使用keras,快速搭建属于自己的聊天机器人。
好啦,话不多说,第一代机器人,走起~~
让机器人开口讲话,总共需要三步:
1. 准备对话数据
2. 搭建seq2seq模型
3. 训练模型,并预测聊天效果
需要的工具有3样:
下面,我们就按照步骤,逐一来学习。
第一步:准备对话数据。
A: 复习了一晚上的机器学习。 B: 看懂了? A: 看开了…… B: ……
上面一段对话,如果让机器能“听”懂,又学会“说”,首先,我们需要将它转换为“机器语言”。
什么是“机器语言”?
不是文字,而是一串一串的数字。
打个比方,
如果你跟机器人讲“复习”这个词语,她是蒙圈的。
但如果你跟她讲
“[ 0.006 -0.054 -0.101 ]”
此时,她就能收到指令并随时准备去干活…… 尽管有可能,这时换你蒙圈了。
其实,像这样“一个词,对应一串数字 ”,专业术语被称为“词向量”:
复习 → [ 0.006 -0.054 -0.101 ]
它们都被统一放在一个“字典”里
翻开字典,里面记录着每个词语(或字),所对应的向量:
有了这部字典,你就能将每一个词语(或汉字),替换为一串数字,喂给你的机器人。
注意:在上例中,每个词(或字),由3个数字组成,即维数为3。实际工作中,维数通常会达到几十到上百不等,维数越多,词与词之间所表述的关系越准确。此处为了便于理解,将问题进行了简化。
我们可以这样使用“语料”和“字典”:
先将“语料”,切分成“一个一个的词(或字)”,
之后,从字典中,去寻找对应的词向量,
如下图(点击可查看大图):
当我们完成从“文本”到“词向量”的转换,并将每一组“A-B”对话,分别放进变量X和Y中,例如,
那么,我们“第一步,准备数据”的工作,就完成了。
下面,来看代码。
我们使用的Python以及各种包:
Python 3.5.2
jieba 0.38
gensim 2.3.0
numpy 1.13.1
re 2.2.1
首先,导入库和模块。
接下来,我们需要准备“字典”和“语料”。
下载地址:
https://pan.baidu.com/s/1dE2xOJ3
密码: mqu9
(微信无法添加外链,请自行复制到浏览器)
【文件截图】
注意:word_vector中的3个文件,都要下载到本地,并放置在同一个文件夹下。
有了“字典”和“语料”,接下来,我们就要准备所需的训练数据了。
首先,对“语料”进行分词。
接着,将分词后的问-答语句,分别输入X和Y中。
然后,将X和Y中的词语,转换为词向量,并将问答句的长度统一。
至此,数据的准备工作,就完成了。
我们来看下生成的X_vector、Y_vector,它们长什么样子:
打印结果:
由于篇幅有限,这里仅展示出问答句中,第1个句子的第1个词语。
因为,我们使用的字典,其词向量的维数是60,所以,从结果中我们能够看到,每一个词语,都是由60个数字组成。
温馨提示:
在本教程中,我们使用的“字典”,即“词向量”,是已经被训练好的、可以直接拿来用的词向量。
当然,你也可以自己训练一套属于自己的“词向量”。
想要详细了解相关知识的同学,可以在后台留言,我会根据大家的需求,酌情展开此部分内容。
恭喜你!
学到这里,
构建聊天机器人最繁琐的部分,
我们已经全部处理完了。
下次课,我们将会搭建算法模型,这部分很重要,但是放宽心,使用keras搭建的速度非常快,代码也简单得令人“发指”!!
好啦,不跟你们多唠了,我要回去给我的robot喂数据了,下次见~~
如果在本文中,有任何疑问,可以关注微信公众号:AI传送门,留言给我们,我们会定期为同学进行答疑。
长按上方二维码,关注我们