语音通话正在逐步淘汰,以支持通信领域的文本和视觉效果。 根据 Facebook 的一项民意调查,超过一半的买家更愿意从可以与之交谈的公司购买。 聊天已成为新的社会接受的交流方式。
它使企业能够随时随地与客户进行沟通。 由于易于使用和减少等待时间,聊天机器人在公司和客户中越来越受欢迎。
聊天机器人或自动对话程序为客户提供了一种更加定制化的方法,通过基于文本的界面访问服务。 最新的人工智能聊天机器人可以识别一个人(或另一个机器人,inception)在特定环境中提出的查询(问题、命令、命令等)并做出适当的响应(答案、动作等)。
在这篇文章中,我们将讨论什么是聊天机器人、它们的好处、用例以及如何制作自己的聊天机器人 深入学习 Python 中的聊天机器人等。
让我们开始吧。
那么,什么是聊天机器人?
聊天机器人通常被认为是最先进和最有前途的人机交互形式之一。 这些数字助理通过简化人员和服务之间的交互来改善客户体验。
同时,它们为企业提供了优化客户联系流程以提高效率的新选项,从而可以减少传统的支持费用。
简而言之,它是基于人工智能的软件,旨在以自然语言与人类交流。 这些聊天机器人通常通过音频或书面技术进行交互,它们可以轻松模仿人类语言,以便以类似人类的方式与人类联系。
聊天机器人从与用户的交互中学习,随着时间的推移变得更加现实和高效。 他们可以处理广泛的业务活动,例如授权支出、在线与消费者互动以及产生潜在客户。
使用 python 创建你自己的深度学习聊天机器人
聊天机器人领域有很多种不同的类型 机器学习 和人工智能。 一些聊天机器人是虚拟助手,而另一些只是在那里交谈,而另一些则是客户服务代理。
您可能已经看到一些企业雇用来回答询问的人。 我们将在本教程中制作一个小型聊天机器人来回答经常请求的查询。
1.安装包
我们的第一步是安装以下软件包。
2. 训练数据
现在是时候弄清楚我们需要向聊天机器人提供什么类型的信息了。 我们不需要下载任何大型数据集,因为这是一个简单的聊天机器人。
我们只会使用我们自己创建的信息。 为了有效地学习本课程,您需要生成一个与下面所示格式相同的 .JSON 文件。 我的文件名为“intents.json”。
JSON 文件用于创建用户可能输入的一组消息并映射到一组相关答案。 文件中的每个字典都有一个标签,用于标识每条消息属于哪个组。
我们将使用这些信息来训练 神经网络 将一个词组分类为我们文件中的标签之一。
然后,我们可以从这些组中获取响应并将其提供给用户。 如果您为聊天机器人提供额外的标签、回复和模式,它会变得更好、更复杂。
3. JSON数据加载
我们首先加载 .json 数据并导入一些模块。 将您的 .json 文件组装在与您的目录相同的目录中 Python脚本。 我们的 .json 数据现在将保存在 data 变量中。
4. 数据提取
现在是时候从 JSON 文件中提取我们需要的信息了。 所有模式以及它们所属的类/标记都是必需的。
我们还需要一个模式中所有唯一术语的列表(原因我们稍后会解释),所以让我们创建一些空白列表来跟踪这些值。
现在我们将遍历我们的 JSON 数据并检索我们需要的信息。 我们将使用 nltk.word 标记器将每个模式转换为单词列表,而不是将它们作为字符串。
然后,在我们的 docs_x 列表中,我们将每个模式及其相关标签添加到 docs_y 列表中。
5.词干
查找单词的词根称为词干提取。 例如,“thats”这个词的词干可能是“that”,而“happening”这个词的词干可能是“happen”。
我们将使用这种词干提取技术来缩减模型的词汇量,并尝试找出句子的一般含义。 此代码将简单地生成一个唯一的词干列表,这些词将用于我们数据准备的下一阶段。
6. 词袋
既然我们已经导入了数据并生成了词干词汇表,现在是时候谈论一组词了。 神经网络 众所周知,机器学习算法需要数字输入。 所以我们的字符串列表不会削减它。 我们需要一种机制来表示句子中的数字,这就是词袋的来源。
每个短语将由我们模型词汇表中术语数量的长度列表表示。 我们词汇表中的每个单词都将由列表中的一个位置表示。 如果列表中的位置是 1,则该词出现在我们的语句中; 如果是 0,这个词就不会出现在我们的句子中。
我们称之为词袋,因为我们不知道词在短语中出现的顺序; 我们只知道它们存在于我们模型的词汇表中。
除了结构化我们的输入之外,我们还必须格式化我们的输出,以便神经网络能够理解它。 我们将构建输出列表,该列表是数据集中标签/标签数量的长度,类似于一袋单词。 列表中的每个位置都代表一个唯一的标签/标签,任何这些位置中的 1 表示正在表示哪个标签/标签。
最后,我们将使用 NumPy 数组来存储我们的训练数据和输出。
7.模型开发
我们已经准备好开始构建和训练模型,因为我们已经预处理了所有数据。 我们将使用一个非常基本的前馈神经网络,它有两个隐藏层来实现我们的目标。
我们网络的目的是查看单词集合并将它们分配给一个类(JSON 文件中的标签之一)。 我们将从建立模型的架构开始。 请记住,您可以使用一些数字来得出更好的模型! 机器识别 主要基于反复试验。
8. 模型训练与保存
现在是时候根据我们的数据训练我们的模型了! 我们将通过将数据拟合到模型来实现这一点。 我们提供的 epoch 数是模型在训练期间暴露于相同数据的次数。
完成训练后,我们可以将模型保存到文件模型中。 tflearn 是一个可以在其他脚本中使用的脚本。
9. 使用聊天机器人
现在您可以开始与您的机器人聊天了。
聊天机器人的好处
- 由于机器人预计一年 365 天、一天 24 小时无偿运行,因此提高了可用性和反应速度。
- 这些机器人是处理大数据的三个关键 Vs 的完美工具:数量、速度和多样性。
- 聊天机器人是可用于了解和理解公司消费者的软件。
- 它具有超强的动力,在获得最高收益后具有低廉的维护成本。
- 聊天机器人应用程序创建可以保存并用于分析和预测的数据。
用例
- 解决客户查询
- 回答常见问题
- 将客户分配给支持团队
- 收集客户反馈
- 推荐新优惠
- 使用对话式商务购物
- IT服务台
- 预订住宿
- 汇款
结论
与其他人工智能技术一样,聊天机器人将被用于增强人类技能,并通过让人类将更多时间花在战略而非战术任务上,从而使他们更具创造力和想象力。
在不久的将来,当人工智能与5G技术。
这些和其他可能性仍在研究中,但随着互联网连接、人工智能、自然语言处理和机器学习的进步,它们将变得更加普遍。
楚宇
你好,
谢谢你的节目。
我有个问题。
“bag_of_words”未定义。 我无法理解这个错误。
你能告诉我如何解决这个错误吗?
谢谢这个节目!! 祝你有美好的一天
松鸦
请在使用聊天机器人部分之前添加一个功能:
///////////////////////////////////////////////// /////////////////////////////
def bag_of_words(s,单词):
bag = [0 for _ in range(len(words))]
s_words = nltk.word_tokenize(s)
s_words = [stemmer.stem(word.lower()) for s_words 中的单词]
对于 s_words 中的 se:
对于 i, w in enumerate(words):
如果 w == se:
袋[i] = 1
返回 numpy.array(bag)
// 它肯定会解决你的问题。 //
///////////////////////////////////////////////// /////////////////////////
我正在与您分享完整的代码,因此您将清楚地了解它。
//////////////////////////////////////////////////// //////////
导入nltk
从 nltk.stem.lancaster 导入 LancasterStemmer
词干=兰开斯特词干()
导入 numpy
导入 tflearn
导入张量流
随机导入
导入json
进口泡菜
使用 open(“intents.json”) 作为文件:
数据 = json.load(文件)
尝试:
使用 open(“data.pickle”, “rb”) 作为 f:
单词、标签、训练、输出 = pickle.load(f)
除了:
话= []
标签 = []
文档_x = []
文档_y = []
对于数据中的意图[“意图”]:
对于意图中的模式[“模式”]:
wrds = nltk.word_tokenize(模式)
words.extend(wrds)
docs_x.append(wrds)
docs_y.append(意图[“标签”])
如果意图[“标签”]不在标签中:
标签.append(意图[“标签”])
Words = [stemmer.stem(w.lower()) for w in Words if w != “?”]
单词 = 排序(列表(集合(单词)))
标签 = 排序(标签)
培训 = []
输出 = []
out_empty = [0 for _ in range(len(labels))]
对于 x,枚举中的文档(docs_x):
包= []
wrds = [stemmer.stem(w.lower()) for w in doc]
对于 w 的话:
如果 w 在 wrds 中:
包.append(1)
其他:
包.append(0)
输出行=out_empty[:]
输出行[标签.索引(docs_y[x])] = 1
training.append(包)
output.append(output_row)
培训 = numpy.array(培训)
输出 = numpy.array(输出)
使用 open(“data.pickle”, “wb”) 作为 f:
pickle.dump((单词,标签,训练,输出),f)
tensorflow.reset_default_graph()
net = tflearn.input_data(shape=[None, len(training[0])])
净= tflearn.fully_connected(网,8)
净= tflearn.fully_connected(网,8)
net = tflearn.complete_connected(net, len(输出[0]), 激活=”softmax”)
净 = tflearn.regression(净)
模型 = tflearn.DNN(net)
尝试:
模型.load(“模型.tflearn”)
除了:
model.fit(训练,输出,n_epoch=1500,batch_size=8,show_metric=True)
模型.保存(“模型.tflearn”)
def bag_of_words(s,单词):
bag = [0 for _ in range(len(words))]
s_words = nltk.word_tokenize(s)
s_words = [stemmer.stem(word.lower()) for s_words 中的单词]
对于 s_words 中的 se:
对于 i, w in enumerate(words):
如果 w == se:
袋[i] = 1
返回 numpy.array(bag)
定义聊天():
print(“开始与机器人交谈(输入 quit 停止)!”)
而True:
inp = 输入(“你:”)
如果 inp.lower() == “退出”:
打破
结果 = model.predict([bag_of_words(inp, words)])
results_index = numpy.argmax(结果)
标签 = 标签[results_index]
对于数据中的 tg [“意图”]:
如果 tg['tag'] == 标签:
响应 = tg['响应']
打印(随机选择(响应))
聊天()
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
谢谢,
编码愉快!
Lu
你好,
如果想在 python 中创建聊天机器人,您能否告诉我要执行的过程,但信息是从 excel 中的调查中获得的。 谢谢你!