Python中的聊天机器人
在过去几年中,Python编程语言的聊天机器人在技术和商业领域变得非常受欢迎。这些智能机器人非常擅长模仿自然人类语言并与人类交谈,因此不同行业的公司都在使用它们。无论是电子商务行业还是医疗机构,每个人似乎都正在利用这种巧妙的工具来获取商业优势。在下面的教程中,我们将使用Python编程语言了解聊天机器人,并讨论创建Python聊天机器人的步骤。
理解聊天机器人
聊天机器人 是一种基于人工智能的软件,用于以人类的自然语言与人类交流。这些聊天机器人通常通过听觉或文本的方式进行交流,并且它们可以轻松地模仿人类语言以以人类方式与人类交流。聊天机器人被认为是自然语言处理的最佳应用之一。
我们可以将聊天机器人分为两个主要变体: 基于规则的聊天机器人 和 自学习聊天机器人 。
- 基于规则的聊天机器人: 基于规则的方法通过训练聊天机器人根据其最初接受的一系列预定规则来回答问题。这些规则可以非常简单或相当复杂,我们可以使用这些基于规则的聊天机器人处理简单的查询,但不能处理更复杂的请求或查询。
- 自学习聊天机器人: 自学习聊天机器人可以自主学习的聊天机器人。它们利用人工智能(AI)和机器学习(ML)等先进技术来从行为和实例中进行自我训练。通常,这些聊天机器人比基于规则的机器人更聪明。我们还可以将自学习聊天机器人进一步分类为 检索型聊天机器人 和 生成型聊天机器人 。
第一个名为 ELIZA 的聊天机器人是由Joseph Weizenbaum于1966年设计和开发的,它只用了200行代码就能模仿心理治疗师的语言。随着技术的进步,我们已经从脚本化的聊天机器人发展到今天的Python聊天机器人。
现代聊天机器人
今天,我们拥有由人工智能驱动的智能聊天机器人,它利用自然语言处理(NLP)来理解人类(文本和语音)的指令并从中学习。聊天机器人已成为拥有活跃在线存在(网站和社交网络平台)的公司和品牌与客户互动的重要工具。
借助Python的帮助,聊天机器人被认为是一种方便的工具,因为它们有助于品牌和客户之间的快速消息传递。让我们想想微软的Cortana、亚马逊的Alexa和苹果的Siri。这些聊天机器人不是很棒吗?学习如何使用Python编程语言创建一个聊天机器人变得非常有趣。
基本上,利用Python的聊天机器人被设计和编程来接受我们提供的数据,然后使用复杂的人工智能算法进行分析。然后它会给我们提供书面或口头回答。由于这些机器人可以从经验和行为中学习,它们可以回应各种各样的查询和指令。
尽管目前Python中的聊天机器人已经开始在技术领域占据主导地位,但根据Gartner的预测,到2020年,聊天机器人已经处理了约85%的客户品牌互动。
鉴于聊天机器人在行业中越来越受欢迎和采用,我们可以通过学习如何在Python中创建一个聊天机器人来提高市场价值-这是全球最广泛使用的编程语言之一。
所以,让我们开始吧!
理解ChatterBot库
ChatterBot 是一个用Python开发的库,旨在为用户输入提供自动化响应。它利用机器学习算法的组合生成多种类型的响应。这个特性使得开发人员能够使用Python构建可以与人类交流并提供相关和适当响应的聊天机器人。此外,机器学习算法支持机器人通过经验来提高性能。
ChatterBot库的另一个令人惊叹的特点是它的语言独立性。该库的开发方式使得可以在多种编程语言中对机器人进行培训。
理解ChatterBot库的工作原理
当用户在聊天机器人(基于 ChatterBot )中插入特定输入时,机器人保存输入和响应以供将来使用。这些(收集到的经验)信息使得聊天机器人能够在每次输入新数据时生成自动化的响应。
程序从与输入匹配的最近语句中选择最合适的响应,然后从已知的语句和响应选择中提供响应。随着时间的推移,随着聊天机器人参与更多的交流,回复的准确性会逐步提高。
使用Python创建一个聊天机器人
我们将采用逐步的方式,分解创建Python聊天机器人的过程。
我们将首先导入项目所需的所有包和模块。我们还将初始化项目中要使用的不同变量。此外,我们还将处理文本数据,因此在设计机器学习模型之前,我们必须对数据集进行数据预处理。
这是标记支持文本数据的地方 – 它将大型文本数据集转换为更小、可读的块(例如单词)。一旦这个过程完成,我们可以进行词形还原,将一个单词转换为它的词形。然后生成一个pickle文件,用于存储用于预测机器人响应的Python对象。
聊天机器人开发过程的另一个重要部分是开发训练和测试数据集。
现在我们已经理解了在Python中进行聊天机器人开发所需的基本概念,让我们开始实际的过程吧!
准备依赖
使用 ChatterBot 库在Python中创建聊天机器人的步骤1是在系统中安装该库。作为良好的实践,我们还可以使用新的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聊天机器人开发程序的步骤2是导入所需的类。
让我们考虑以下代码片段以了解相同的内容。
文件:my_chatbot.py
# importing the required modules
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
解释:
在上面的代码片段中,我们导入了两个类 – ChatBot 来自 chatterbot 和 ListTrainer 来自 chatterbot.trainers。
创建和训练聊天机器人
下一步是使用类实例 ” ChatBot ” 创建一个聊天机器人,并训练机器人以提高其性能。训练机器人可以确保它具有足够的知识来对特定的输入语句做出特定的回复。
让我们考虑下面的代码片段。
文件:my_chatbot.py
# creating a chatbot
myBot = ChatBot(
name = 'Sakura',
read_only = True,
logic_adapters = [
'chatterbot.logic.MathematicalEvaluation',
'chatterbot.logic.BestMatch'
]
)
解释:
在上面的代码片段中,我们定义了一个变量,它是类 ChatBot 的一个实例。我们在类中包含了各种参数。第一个参数 ‘name’ 代表Python聊天机器人的名称。另一个参数 ‘read_only’ 接受一个布尔值来禁用( 为TRUE )或启用( 为FALSE )训练后的学习能力。我们还包含了另一个参数 ‘logic_adapters’ ,用于指定用于训练聊天机器人的适配器。
虽然 ‘chatterbot.logic.MathematicalEvaluation’ 帮助聊天机器人解决数学问题,但 ` 帮助它从已提供的响应列表中选择完美匹配。
由于我们需要提供一个响应列表,我们可以通过指定字符串列表来进行训练,以便我们可以使用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)
说明:
在上面的代码片段中,我们创建了一个 ListTrainer 类的实例并使用 for 循环来遍历每个回答列表中的项目。
现在,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)
解释:
上述程序的执行告诉我们,我们已经成功使用 chatterbot 库在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.trainers模块中导入了ChatterBotCorpusTrainer类。我们创建了一个该类的实例,用于聊天机器人,并将训练语言设置为英语。
此外,从最后一条语句可以看出,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')