聊天机器人(Chatbot)是一种人工智能软件,利用它你能够经过网站、手机App或电话等途径和用户进行天然语言对话。聊天机器人能够在不一样的行业中应用于不一样的场景。NLTK是进行天然语言处理(NLP)的领先的Python开发包 — 另外一个经常使用的NLP开发包是Spacy — 在这个教程中,咱们将使用NLTK开发库建立一个简单的聊天机器人。git
首先导入必要的开发包:github
而后将数据集导入Pandas数据帧:算法
上面的数据包含1592个样本,每一个样本为两个字段,分别表示查询及响应文本。能够看到数据集里有空值,是由于样本数据是分组的,每组的不一样查询文本都对应相同的相应文本。咱们可使用ffill()
进行处理:函数
首先执行第一步,文本规范化处理。咱们将全部的数据转化为小写,删除特殊符号,提取词干。这部分代码咱们使用函数
step1
进行封装:网站
能够看到文本已经干净多了。分词指的是将文本字符串切分为词条:人工智能
pos_tag
函数返回每一个词条在文本中的做用:spa
咱们如今将建立一个函数来整合上面这些环节的代码:3d
让咱们用这个函数处理数据集:code
下一步是单词嵌入表示,两次词义相近的词,其嵌入表示的距离也相近。有两种模型能够用于这个处理环节:词袋模型和tf-idf模型。blog
词袋模型是描述文本中出现的单词的一种表示方法。例如,假设咱们的词典中包含单词{Playing, is, love},咱们但愿矢量化文本“Playing football is love”,那么获得的矢量就是: (1, 0, 1, 1)。
上图表格中的第一行,显示了数据集的第一个样本的BOW模型,只有1和0。
中止词指的是那些常常出现的单词,所以这些单词对于特定的文原本说意义就不大,咱们能够把这些单词从词典中排除出去。下面是预约义的中止词:
考虑下面的示例,咱们尝试获取查询对应的响应:
上面的代码中,咱们能够看到对于查询‘Will you help me and tell me about yourself more’ ,咱们进行文本规范化处理而后转化为词袋表示。下面咱们将使用余弦类似算法来找出相关的相应文本。
余弦类似性是衡量两个矢量类似性的一种指标。其计算方法是用两个矢量的点积除以两个矢量的模的乘积:
Cosine Similarity (a, b) = Dot product(a, b) / ||a|| * ||b||
计算代码以下:
能够看到194#样本的类似性最高,让咱们输出其查询文本看看是否相关:
的确是相关的!
tf指的是词频,表示单词在当前文档中出现的频率,idf指的是逆文档频率,表示单词在文档集中出现的频率倒数。这里咱们说的文档表示一个样本,文档集表示全部的样本。
上面是使用tf-idf处理获得的值。如今使用余弦类似算法来找出相关的响应。
4#样本的类似度最高,让咱们显示出来看一下:
使用tf-idf咱们获得一个不一样的响应,不过看起来也很好!
如今让咱们组织一下代码:
看看其余响应:
Coooooooooooool!
咱们也能够实现词袋版本的对话。咱们建立的模型没有使用任何人工智能,可是效果仍是不错的。完整的代码能够在这里获取。
原文连接:NLTK聊天机器人实现原理及代码下载 - 汇智网 ,转载请标明出处