在过去的几年里,Python 编程语言的聊天机器人在技术和商业领域受到了热烈的推崇。这些智能机器人如此擅长模仿自然人类语言和与人类聊天,以至于不同行业的公司都在接受它们。从电子商务行业到医疗保健机构,每个人似乎都在利用这一漂亮的工具来推动业务优势。在下面的教程中,我们将借助 Python 编程语言来理解聊天机器人,并讨论在 Python 中创建聊天机器人的步骤。
理解聊天机器人
A Chatbot 是一款基于人工智能的软件,被开发用于以人类的自然语言与人类进行交互。这些聊天机器人通常通过听觉或文本方法进行交谈,它们可以毫不费力地模仿人类语言,以类似人类的方式与人类交流。聊天机器人被认为是自然语言处理的最佳应用之一。
我们可以将聊天机器人分为两个主要的变体:基于规则的聊天机器人和自学习聊天机器人。
- 基于规则的聊天机器人:基于规则的方法训练聊天机器人根据预先确定的规则列表来回答问题,聊天机器人主要是根据这些规则进行训练的。这些规则集可能非常简单,也可能非常复杂,我们可以使用这些基于规则的聊天机器人来处理简单的查询,但不能处理更复杂的请求或查询。
- 自学习聊天机器人:自学习聊天机器人是可以自主学习的聊天机器人。这些人利用人工智能和机器学习等先进技术,从行为和实例中训练自己。一般来说,这些聊天机器人比基于规则的机器人更聪明。我们可以进一步将自学习聊天机器人分为两类- 基于检索的聊天机器人和生成式聊天机器人。
- 基于检索的聊天机器人:基于检索的聊天机器人基于预定义的输入模式工作,并设置响应。一旦问题或模式被插入,聊天机器人就利用启发式方法给出相关的回答。基于检索的模型被广泛用于设计和开发面向目标的聊天机器人,使用定制的功能,如机器人的流程和语气,以提高客户的体验。
- 生成聊天机器人:与基于检索的聊天机器人不同,生成聊天机器人不是基于预定义的响应——它们利用 seq2seq 神经网络。这是建立在机器翻译的概念上的,即源代码从一种语言转换成另一种语言。在 seq2seq 方法中,输入变为输出。
第一个名为ELLIA的聊天机器人是由约瑟夫·韦森鲍姆在 1966 年设计和开发的,它可以用 200 行代码模仿心理治疗师的语言。但是随着技术的不断进步,我们已经从脚本聊天机器人发展到今天的 Python 聊天机器人。
当代聊天机器人
今天,我们有了由人工智能驱动的智能聊天机器人,它们利用自然语言处理(NLP)来理解来自人类的命令(文本和语音)并从经验中学习。聊天机器人已经成为在线活跃的公司和品牌(网站和社交网络平台)的主要客户互动工具。
在 Python 的帮助下,聊天机器人被认为是一个很好的工具,因为它们促进了品牌和客户之间的快速信息传递。让我们想想微软的 Cortana,亚马逊的 Alexa,苹果的 Siri。这些聊天机器人是不是很棒?学习如何使用 Python 编程语言创建聊天机器人变得非常有趣。
从根本上说,利用 Python 的聊天机器人被设计和编程为接收我们提供的数据,然后使用复杂的人工智能算法对其进行分析。然后它会给我们一个书面或口头的回应。由于这些机器人可以从经验和行为中学习,它们可以响应各种各样的查询和命令。
尽管 Python 中的聊天机器人目前已经开始统治技术场景,但根据高德纳的预测,到 2020 年,聊天机器人已经处理了大约 85%的客户-品牌互动。
鉴于聊天机器人在行业中的日益普及和采用,我们可以通过学习如何用 Python 创建聊天机器人来增加市场价值,Python 是全球使用最广泛的编程语言之一。
所以,让我们开始吧!
了解聊天机器人库
ChatterBot 是一个 Python 库,它是为提供对用户输入的自动响应而开发的。它利用机器学习算法的组合来生成多种类型的响应。该特性使开发人员能够使用 Python 构建聊天机器人,这些聊天机器人可以与人类通信并提供相关和适当的响应。此外,最大似然算法支持机器人通过体验提高性能。
ChatterBot 库的另一个惊人特性是语言独立性。该库的开发方式使得用多种编程语言训练机器人成为可能。
了解查特波特图书馆的工作
当用户在聊天机器人(设计在聊天机器人上)中插入特定输入时,机器人会保存输入和响应以备将来使用。这种信息(收集的经验)允许聊天机器人在每次输入新的信息时产生自动响应。
程序从与输入匹配的最近语句中选择最合适的响应,然后从已知的语句和响应中传递响应。随着时间的推移,随着聊天机器人沉迷于更多的交流,回复的准确性也在提高。
使用 Python 创建聊天机器人
我们将遵循一步一步的方法,分解创建 Python 聊天的过程。
我们将通过导入项目所需的所有包和模块来开始构建一个 Python 聊天机器人。我们还将初始化我们想要在其中使用的不同变量。此外,我们还将处理文本数据,因此在设计 ML 模型之前,我们必须对数据集进行数据预处理。
这就是分词支持文本数据的地方——它将大的文本数据集转换成更小的可读块(如单词)。一旦这个过程完成,我们就可以进行词形还原,将一个单词转换成它的引理形式。然后,它生成一个 pickle 文件,以便存储用于预测机器人响应的 Python 对象。
chatbot 开发程序的另一个主要部分是开发培训和测试数据集。
现在我们已经理解了 Python 中需要的 chatbot 开发的基本概念,让我们从实际的过程开始!
准备依赖项
使用聊天机器人库在 Python 中创建聊天机器人的第一步是在系统中安装该库。我们还可以使用一个新的 Python 虚拟环境来安装库,这是一个很好的实践。我们可以使用 pip 安装程序在命令提示符或 Python 终端中的以下命令的帮助下安装库:
语法:
$ pip install chatterbot
$ pip install chatterbot_corpus
我们也可以直接从 GitHub 安装最新开发版本的 ChatterBot 库。为此,我们必须使用以下命令:
语法:
$ pip install git+git://github.com/gunthercox/ChatterBot.git@master
如果我们中的一些人想要升级库,我们可以使用以下命令
语法:
$ pip install --upgrade chatterbot_corpus
$ pip install --upgrade chatterbot
现在设置已经准备好了,我们可以进入下一步,使用 Python 编程语言创建一个聊天机器人。
导入类
Python 聊天机器人开发过程的第二步是导入所需的类。
让我们考虑下面的代码片段来理解相同的内容。
文件:my_chatbot.py
# importing the required modules
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
说明:
在上面的代码片段中,我们从聊天机器人导入了两个类- 聊天机器人,从聊天机器人.训练器导入了列表训练器。
创建和培训聊天机器人
下一步是使用类“ chatbot ”的实例创建一个 ChatBot,并训练该 bot 以提高其性能。训练机器人可以确保它有足够的知识,首先是对特定输入语句的特定回复。
让我们考虑下面的代码片段。
文件:my_chatbot.py
# creating a chatbot
myBot = ChatBot(
name = 'Sakura',
read_only = True,
logic_adapters = [
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.BestMatch'
]
)
说明:
在上面的代码片段中,我们定义了一个变量,它是类“ ChatBot ”的实例。我们在类中包含了各种参数。第一个参数,“名称”,代表 Python 聊天机器人的名称。另一个名为“只读”的参数接受一个布尔值,该值禁用(真)或启用(假)机器人在训练后学习的能力。我们还包括了另一个名为“logic _ adapters”的参数,它指定了用来训练聊天机器人的适配器。
虽然“聊天机器人.逻辑.数学评估”帮助聊天机器人解决数学问题,但是 ` 帮助其从已经提供的回答列表中选择完美匹配。
因为我们必须提供一个响应列表,所以我们可以通过指定字符串列表来执行它,我们可以使用这些字符串来训练 Python 聊天机器人,并为某个查询找到完美的匹配。让我们考虑下面的响应示例,我们可以使用 Python 训练聊天机器人来学习。
文件:my_chatbot.py
# training the chatbot
small_convo = [
'Hi there!',
'Hi',
'How do you do?',
'How are you?',
'I\'m cool.',
'Always cool.',
'I\'m Okay',
'Glad to hear that.',
'I\'m fine',
'I feel awesome',
'Excellent, glad to hear that.',
'Not so good',
'Sorry to hear that.',
'What\'s your name?',
' I\'m Sakura. Ask me a math question, please.'
]
math_convo_1 = [
'Pythagorean theorem',
'a squared plus b squared equals c squared.'
]
math_convo_2 = [
'Law of Cosines',
'c**2 = a**2 + b**2 - 2*a*b*cos(gamma)'
]
说明:
在上面的代码片段中,为了训练聊天机器人,我们定义了一些响应列表。我们还可以通过简单地键入“ ListTrainer ”的实例并为其提供如下所示的字符串列表来创建和训练聊天机器人:
文件:my_chatbot.py
# using the ListTrainer class
list_trainee = ListTrainer(myBot)
for i in (small_convo, math_convo_1, math_convo_2):
list_trainee.train(i)
说明:
在上面的代码片段中,我们创建了一个列表训练器类的实例,并使用的循环来遍历响应列表中的每个项目。
现在,Python 聊天机器人已经准备好进行通信了。
与 Python 聊天机器人通信
我们可以使用 get_response() 函数与 Python 聊天机器人进行交互。让我们考虑程序的以下执行来理解它。
输出:
# starting a conversation
>>> print(myBot.get_response("Hi, there!"))
Hi
>>> print(myBot.get_response("What's your name?"))
I'm Sakura. Ask me a math question, please.
>>> print(myBot.get_response("Do you know Pythagorean theorem"))
a squared plus b squared equals c squared.
>>> print(myBot.get_response("Tell me the formula of law of cosines"))
c**2 = a**2 + b**2 - 2*a*b*cos(gamma)
说明:
程序的上述执行告诉我们,我们已经使用聊天机器人库成功地在 Python 中创建了一个聊天机器人。然而,也有必要理解使用 Python 的聊天机器人可能不知道如何回答所有的查询。因为它的知识和训练还是很有限,我们要给它时间,给它更多的训练数据,让它进一步训练。
使用数据语料库训练 Python 聊天机器人
当我们进入用 Python 创建聊天机器人的最后一步时,我们可以利用现有的数据语料库来进一步训练 Python 聊天机器人。
让我们考虑下面这个例子,用一个由机器人自己给出的数据语料库来训练 Python 聊天机器人。
文件:my_chatbot.py
from chatterbot.trainers import ChatterBotCorpusTrainer
corpus_trainee = ChatterBotCorpusTrainer(myBot)
corpus_trainee.train('chatterbot.corpus.english')
说明:
在上面的代码片段中,我们已经从chatterbot . trainer模块中导入了chatterbottcorpustrainer类。我们为聊天机器人创建了一个类实例,并将训练语言设置为英语。
而且,从最后一条语句中,我们可以观察到 ChatterBot 库以多种语言提供了这一功能。因此,我们也可以用我们喜欢的语言指定语料库的子集。因此,我们的 Python 聊天机器人已经成功创建。
Python 聊天机器人项目的完整代码如下所示。
完整的项目代码
文件:my_chatbot.py
# importing the required modules
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
from chatterbot.trainers import ChatterBotCorpusTrainer
# creating a chatbot
myBot = ChatBot(
name = 'Sakura',
read_only = True,
logic_adapters = [
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.BestMatch'
]
)
# training the chatbot
small_convo = [
'Hi there!',
'Hi',
'How do you do?',
'How are you?',
'I\'m cool.',
'Always cool.',
'I\'m Okay',
'Glad to hear that.',
'I\'m fine',
'I feel awesome',
'Excellent, glad to hear that.',
'Not so good',
'Sorry to hear that.',
'What\'s your name?',
' I\'m Sakura. Ask me a math question, please.'
]
math_convo_1 = [
'Pythagorean theorem',
'a squared plus b squared equals c squared.'
]
math_convo_2 = [
'Law of Cosines',
'c**2 = a**2 + b**2 - 2*a*b*cos(gamma)'
]
# using the ListTrainer class
list_trainee = ListTrainer(myBot)
for i in (small_convo, math_convo_1, math_convo_2):
list_trainee.train(i)
# using the ChatterBotCorpusTrainer class
corpus_trainee = ChatterBotCorpusTrainer(myBot)
corpus_trainee.train('chatterbot.corpus.english')