Python聊天机器人实现代码【NLTK】-阿里云开发者社区

开发者社区> ezpod> 正文

Python聊天机器人实现代码【NLTK】

简介: 聊天机器人(Chatbot)是一种人工智能软件,利用它你可以通过网站、手机App或电话等途径和用户进行自然语言对话。聊天机器人可以在不同的行业中应用于不同的场景。NLTK是进行自然语言处理(NLP)的领先的Python开发包 — 另一个常用的NLP开发包是Spacy — 在这个教程中,我们将使用NLTK开发库创建一个简单的聊天机器人。
+关注继续查看

聊天机器人(Chatbot)是一种人工智能软件,利用它你可以通过网站、手机App或电话等途径和用户进行自然语言对话。聊天机器人可以在不同的行业中应用于不同的场景。NLTK是进行自然语言处理(NLP)的领先的Python开发包 — 另一个常用的NLP开发包是Spacy — 在这个教程中,我们将使用NLTK开发库创建一个简单的聊天机器人。

1、导入开发包及数据

首先导入必要的开发包:

在这里插入图片描述

然后将数据集导入Pandas数据帧:

在这里插入图片描述

上面的数据包含1592个样本,每个样本为两个字段,分别表示查询及响应文本。可以看到数据集里有空值,是因为样本数据是分组的,每组的不同查询文本都对应相同的相应文本。我们可以使用ffill()进行处理:

在这里插入图片描述

2、处理步骤

在这里插入图片描述
首先执行第一步,文本规范化处理。我们将所有的数据转化为小写,删除特殊符号,提取词干。这部分代码我们使用函数step1进行封装:

在这里插入图片描述
可以看到文本已经干净多了。分词指的是将文本字符串切分为词条:

在这里插入图片描述

pos_tag函数返回每个词条在文本中的作用:

在这里插入图片描述

我们现在将创建一个函数来整合上面这些环节的代码:

在这里插入图片描述

让我们用这个函数处理数据集:

在这里插入图片描述

下一步是单词嵌入表示,两次词义相近的词,其嵌入表示的距离也相近。有两种模型可以用于这个处理环节:词袋模型和tf-idf模型。

3、词袋模型

词袋模型是描述文本中出现的单词的一种表示方法。例如,假设我们的词典中包含单词{Playing, is, love},我们希望矢量化文本“Playing football is love”,那么得到的矢量就是: (1, 0, 1, 1)。

在这里插入图片描述

上图表格中的第一行,显示了数据集的第一个样本的BOW模型,只有1和0。

停止词指的是那些经常出现的单词,因此这些单词对于特定的文本来说意义就不大,我们可以把这些单词从词典中排除出去。下面是预定义的停止词:

在这里插入图片描述
考虑下面的示例,我们尝试获取查询对应的响应:

在这里插入图片描述

上面的代码中,我们可以看到对于查询‘Will you help me and tell me about yourself more’ ,我们进行文本规范化处理然后转化为词袋表示。下面我们将使用余弦相似算法来找出相关的相应文本。

4、余弦相似性

余弦相似性是衡量两个矢量相似性的一种指标。其计算方法是用两个矢量的点积除以两个矢量的模的乘积:

Cosine Similarity (a, b) = Dot product(a, b) / ||a|| * ||b||

计算代码如下:

在这里插入图片描述
可以看到194#样本的相似性最高,让我们输出其查询文本看看是否相关:

在这里插入图片描述
的确是相关的!

5、TF-IDF模型

tf指的是词频,表示单词在当前文档中出现的频率,idf指的是逆文档频率,表示单词在文档集中出现的频率倒数。这里我们说的文档表示一个样本,文档集表示所有的样本。

在这里插入图片描述

上面是使用tf-idf处理得到的值。现在使用余弦相似算法来找出相关的响应。

在这里插入图片描述

4#样本的相似度最高,让我们显示出来看一下:

在这里插入图片描述

使用tf-idf我们得到一个不同的响应,不过看起来也很好!

现在让我们组织一下代码:

在这里插入图片描述

看看其他响应:

在这里插入图片描述

Coooooooooooool!

6、总结

我们也可以实现词袋版本的对话。我们创建的模型没有使用任何人工智能,但是效果还是不错的。完整的代码可以在这里获取。


原文链接:NLTK聊天机器人实现原理及代码下载 - 汇智网 ,转载请标明出处

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python+soket实现UDP协议的客户/服务端中文聊天程序
没什么特别的东西,网上烂大街的C/S框架。(基于windows 7 + python 3.4)   为了实现中文聊天,我加入了一点修改: msg.encode('utf-8') # msg 为输入(且将要发送出)的信息 data.decode('utf-8') # data 为接收的信息 这样做的原因是 sendto 函数只能发送ASCII字符,不支持发送中文(在 python3 中,中文默认是unicode编码)。
1152 0
python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序
【吐槽】 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。 有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥   【正文】 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。
1168 0
爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能对话机器人-《神奇的物联网》
本章节介绍如何开通智能对话机器人,并通过实际案例演示如何为机器人配置知识库并进行发布。
145 0
Python聊天机器人实现代码【NLTK】
聊天机器人(Chatbot)是一种人工智能软件,利用它你可以通过网站、手机App或电话等途径和用户进行自然语言对话。聊天机器人可以在不同的行业中应用于不同的场景。NLTK是进行自然语言处理(NLP)的领先的Python开发包 — 另一个常用的NLP开发包是Spacy — 在这个教程中,我们将使用NLTK开发库创建一个简单的聊天机器人。
1975 0
+关注
ezpod
汇智网,http://www.hubwiz.com
213
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载