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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: 聊天机器人(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聊天机器人实现原理及代码下载 - 汇智网 ,转载请标明出处

目录
相关文章
|
2月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
56 6
|
3月前
|
存储 缓存 测试技术
Python中的装饰器:功能增强与代码复用的利器
在Python编程中,装饰器是一种强大而灵活的工具,它允许开发者以简洁优雅的方式增强函数或方法的功能。本文将深入探讨装饰器的定义、工作原理、应用场景以及如何自定义装饰器。通过实例演示,我们将展示装饰器如何在不修改原有代码的基础上添加新的行为,从而提高代码的可读性、可维护性和复用性。此外,我们还将讨论装饰器在实际应用中的一些最佳实践和潜在陷阱。
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
传感器 人工智能 自然语言处理
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
RDT(Robotics Diffusion Transformer)是由清华大学AI研究院TSAIL团队推出的全球最大的双臂机器人操作任务扩散基础模型。RDT具备十亿参数量,能够在无需人类操控的情况下自主完成复杂任务,如调酒和遛狗。
176 22
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
|
3月前
|
人工智能 数据挖掘 Python
Python编程基础:从零开始的代码旅程
【10月更文挑战第41天】在这篇文章中,我们将一起探索Python编程的世界。无论你是编程新手还是希望复习基础知识,本文都将是你的理想之选。我们将从最基础的语法讲起,逐步深入到更复杂的主题。文章将通过实例和练习,让你在实践中学习和理解Python编程。让我们一起开启这段代码之旅吧!
|
2月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
52 10
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
105 8
|
2月前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
68 11
|
2月前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
57 11

推荐镜像

更多