跳至主要内容

使用 Python 中的 Chatterbot 构建聊天机器人

在本教程中,您将学习如何使用 Python 的 chatterbot 构建聊天机器人。
· 12分钟 阅读

使用 AI 探索

您是否厌倦了长时间排队,只为接通客服专员的电话?阅读常见问题是否让您感到疲惫?那您来对地方了。您还记得上一次因为收到错误商品,通过聊天联系客户服务时的情景吗?很大概率上,和您对话的并不是客服代表,而是一个机器人。那么,究竟什么是机器人?我们如何构建一个?需要使用什么代码?本文将为您解答这些问题!

人工智能结合机器学习与自然语言处理(NLP)来构建机器人或聊天机器人,旨在实现人与计算机之间的顺畅互动。聊天机器人无处不在:从银行网站、披萨店到电商平台,您都会看到它们的身影。聊天机器人基于其所服务领域的一系列预定义问题,提供实时客户服务支持。它采用自然的人类语言,并以近似人类的方式与人交流。

简单来说,聊天机器人是运用自然语言处理的问答系统的演进。根据相关来源,到 2024 年,全球对话市场规模将增长至 157 亿美元,年增长率达 30.2%。例如,在新冠疫情期间,我们在 WhatsApp 上看到大量谣言传播,如“哪些方法可以治疗 COVID”“什么有助于提升免疫力”“病毒是否在实验室中研发”等。为遏制此类谣言,Facebook 推出了一款用于事实核查的聊天机器人。

想用 OpenAI 和 Pinecone 等工具构建聊天机器人吗?请查看下方我们的跟练视频:

What is a Chatbot?

“chatterbot”一词出现于 1994 年,当时 Michael Mauldin 创建了他的第一个聊天机器人“Julia”。根据牛津词典,聊天机器人的定义是:“一种旨在与人类用户进行对话的计算机程序,尤其通过互联网进行。”它可以被视为一种虚拟助手,通过文本消息与用户交流,帮助企业更贴近客户。它的目标是模仿人类之间的沟通方式,可以通过聊天界面或语音通话实现。开发者通常会将聊天机器人设计得让用户难以分辨自己是在与人沟通还是与机器人沟通。

聊天机器人可帮助任何企业/组织实现以下目标:

  • 提升运营效率。
  • 自动化地满足客户请求。
  • 处理基础问题,从而让员工有精力应对更复杂、更高价值的咨询。
  • 提供多语言支持。
  • 通过自动化客户支持节省时间与精力。
  • 提升响应速度与客户参与度。
  • 实现沟通个性化。
flight bot graphic
来源

How does a Chatbot Work?

聊天机器人本质上是具有应用层、数据库和 API 的软件应用。为便于理解其工作原理,可以将其视为基于模式匹配来对文本进行分类,并对用户提出的问题/请求生成合适回应。聊天机器人会根据预先设定的程序来回应用户。根据使用方式的不同,聊天机器人也有不同类型。主要有三种类型:

  • 基于规则的聊天机器人: 这是最基础的类型,用户通过预定义选项与之交互。要从这类机器人获取答案,用户需要点击某些选项。它们会收集用户请求、进行分析,并以按钮形式给出结果。这类机器人常用于替代常见问题解答,但面对复杂问题时,并不总是最佳方案。

  • 独立(关键词)聊天机器人: 这类是机器学习机器人,与基于规则的不同,它们会分析用户意图并给出恰当回应。此类机器人使用可自定义关键词和机器学习,来高效有效地决定如何回应用户请求。

  • NLP(上下文)聊天机器人: 这是目前最先进的类型。它们结合了基于规则与关键词机器人的优点。此类机器人利用 NLP 理解用户请求的上下文与意图,并据此行动。它们可以轻松处理同一用户的多项请求。

Comparisons of Chatbot Platforms

许多平台提供可定制的聊天机器人与自动化功能,确保客户在任何需要时都能获得无缝、准时、优质的支持服务,无需依赖开箱即用的对话能力。客户也更愿意从能通过消息轻松联系的企业购买产品。

以下是 2020 年的 AI 聊天机器人搭建平台清单:

  • Azure Bot Service: Azure 机器人服务支持从零开始构建聊天机器人,即构建、连接、测试与部署。它允许开发者使用开源 SDK 和工具,也可创建高级机器人,如可处理复杂问题的虚拟助手。

  • Botsify: 该工具的独特之处在于,它通过直观界面让非技术用户也能建立聊天机器人。这里将机器人表示为“故事”,也就是说,您可以创建多个故事或多个聊天机器人,并按需部署。另一大亮点是能够将用户的回答保存到表单,并轻松导出为 CSV。

  • Amazon Lex: Amazon Lex 允许开发者使用文本和语音构建对话界面。它具备先进的深度学习功能与 NLP,用于理解文本上下文。其控制台易于使用,可在数分钟内构建出聊天机器人。

  • Mobile Monkey: Mobile Monkey 专注于帮助开发者构建用于营销的聊天机器人。它支持在同一平台上制作 Facebook 广告机器人、SMS 机器人与原生网页聊天机器人。平台还为各类业务提供现成的聊天机器人模板,可直接嵌入网站。

  • ChatterOn: 它声称可以处理来自机器人的多种富内容响应,因为它允许开发者在与用户的每次交互中连接不同的 API。ChatterOn 提供 20 多个预构建的模块,可一键使用。它几乎不需要编码,使非技术用户也能轻松构建聊天机器人。

  • TARS: 它可用于构建对话式落地页,使您能够创建自动化的聊天机器人来向客户问候,为其提供与产品相关问题的有效信息,并同时收集其联系方式。Tars 提供大量预定义的聊天机器人模板,按行业与用例两类进行划分。

看到这里,您一定也迫不及待想要构建一个属于自己的聊天机器人。还有什么比可定制的 NLP 聊天机器人更好呢?下面我们就用 Python 和 chatterbot 库,动手打造一个专属机器人。

Chatterbot

chatterbot

顾名思义,chatterbot 是一个专为生成聊天机器人而设计的 Python 库。该算法使用多种机器学习算法的组合,根据用户请求生成不同的回应。

Chatterbot 让开发对话式聊天机器人变得更简单。它从一个未经训练的聊天机器人开始,这个机器人没有任何关于如何交流的先验经验或知识。随着用户输入语句,库会保存用户的请求以及返回给用户的响应。随着 chatterbot 中样本数量的增加,其回应的准确性也会提升。

Chatterbot 的训练方式是:先找到与新请求最相近的历史请求,然后从已有的响应中选出最贴近的回答。其独特卖点在于,它让开发者能够轻松创建自己的数据集与结构。

Building a Chatbot using Chatterbot

首先安装 chatterbot 库。为了创建聊天机器人,还需要安装 chatterbot corpus。Corpus(语料)的字面含义是词语的集合,其中包含 chatterbot 模块所附带的数据语料。每份语料都不过是不同输入语句及其响应的原型。机器人会使用这些语料进行自我训练。安装 chatterbot 与 chatterbot_corpus 的推荐方式是使用 pip。

终端中的安装命令:

pip install chatterbot
pip install chatterbot_corpus

Jupyter Notebook 中的安装命令:

!pip install chatterbot
!pip install chatterbot_corpus

我们先从导入 chatterbot 模块的 Chatbot 类开始。

# Importing chatterbot
from chatterbot import ChatBot

Create Chatbot Instance

现在到了最有趣的部分:通过创建一个 Chatbot 对象来为您的聊天机器人命名。您可以选择任意名称。这一行代码就生成了名为 Buddy 的新机器人。在运行第一个程序前,我们还需要指定一些参数。

# Create object of ChatBot class
bot = ChatBot('Buddy')
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /root/nltk_data...
[nltk_data]   Unzipping taggers/averaged_perceptron_tagger.zip.
[nltk_data] Downloading package stopwords to /root/nltk_data...
[nltk_data]   Unzipping corpora/stopwords.zip.
[nltk_data] Downloading package wordnet to /root/nltk_data...
[nltk_data]   Unzipping corpora/wordnet.zip.

您可以为聊天机器人对象配置存储适配器。存储适配器允许您连接到特定的存储单元或网络。要使用存储适配器,我们需要进行指定。此处我们使用 SQL Storage Adapter,使聊天机器人能够连接 SQL 数据库。通过 database 参数,我们将创建一个新的 SQLite 数据库。请按照下面的代码为聊天机器人创建一个新数据库。

# Create object of ChatBot class with Storage Adapter
bot = ChatBot(
    'Buddy',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    database_uri='sqlite:///database.sqlite3'
)

您还可以为聊天机器人对象配置逻辑适配器。顾名思义,逻辑适配器决定 chatterbot 的逻辑,即为任意输入选择响应。该参数包含一个逻辑适配器列表。Chatterbot 允许我们使用多个逻辑适配器。当同时使用多个逻辑适配器时,聊天机器人会计算每个响应的置信度,并返回置信度最高的作为输出。这里我们使用了两个逻辑适配器:BestMatch 和 TimeLogicAdapter。

# Create object of ChatBot class with Logic Adapter
bot = ChatBot(
    'Buddy',  
    logic_adapters=[
        'chatterbot.logic.BestMatch',
        'chatterbot.logic.TimeLogicAdapter'],
)

Training the chatbot

打造聊天机器人的最后一步是使用 chatterbot 提供的模块来训练它。用 chatterbot 训练聊天机器人就像向其数据库提供一段对话一样简单。一旦提供了数据集,聊天机器人就会在其知识图谱中生成必要的条目,以正确表示输入与输出。首先,我们导入 ListTrainer,通过传入 Chatbot 对象来创建其实例,并调用 train() 方法传入句子列表。

# Inport ListTrainer
from chatterbot.trainers import ListTrainer

trainer = ListTrainer(bot)

trainer.train([
'Hi',
'Hello',
'I need your assistance regarding my order',
'Please, Provide me with your order id',
'I have a complaint.',
'Please elaborate, your concern',
'How long it will take to receive an order ?',
'An order takes 3-5 Business days to get delivered.',
'Okay Thanks',
'No Problem! Have a Good Day!'
])
List Trainer: [####################] 100%

Chatbot Testing

本教程的最后一步是测试 chatterbot 的对话能力。为测试其回应,我们将调用 Chatbot 实例的 get_responses() 方法。

# Get a response to the input text 'I would like to book a flight.'
response = bot.get_response('I have a complaint.')

print("Bot Response:", response)
Bot Response: Please elaborate, your concern

我们将创建一个 while 循环来运行聊天机器人。由于已经向数据库中录入了数据,当语句传入循环时,我们会得到相应的回应。如果用户输入 "Bye" 或 "bye",我们就可以结束循环并停止程序。

name=input("Enter Your Name: ")
print("Welcome to the Bot Service! Let me know how can I help you?")
while True:
    request=input(name+':')
    if request=='Bye' or request =='bye':
        print('Bot: Bye')
        break
    else:
        response=bot.get_response(request)
        print('Bot:',response)
Enter Your Name: Avinash
Welcome to the Bot Service! Let me know how can I help you?
Avinash:I need your assistance regarding my order
Bot: Please, Provide me with your order id
Avinash:12345
Bot: No Problem! Have a Good Day!
Avinash:Bye
Bot: Bye

Conclusion

恭喜您,已完成本教程!

本文讲解了如何使用 ChatterBot 库在 Python 中构建聊天机器人。使用 ChatterBot 构建聊天机器人不仅简单,而且结果也很准确。随着人工智能与机器学习的不断发展,无论是打造具备人类对话能力的机器人,还是其他目标,都变得触手可及。欢迎查看 DataCamp 的教程:用 Python 部署 Facebook 聊天机器人。

探索 DataCamp 的 Python 课程库横幅

主题