在线咨询
专属客服在线解答,提供专业解决方案
声网 AI 助手
您的专属 AI 伙伴,开启全新搜索体验

如何使用 Python 和 NLP 构建 AI 聊天机器人?

本文将介绍如何使用 Python 中的自然语言处理 (NLP) 技术创建一个人工智能聊天机器人。我们的目标是帮助您构建一个智能聊天机器人。首先,我们将解释 NLP,它可以帮助计算机理解人类语言。然后,我们将向您展示如何使用人工智能技术创建一个能够与人进行真实对话的聊天机器人。最后,我们将讨论创建类似 Alexa 或 Siri 的聊天机器人所需的工具。此外,本文还将介绍如何创建人工智能聊天机器人项目,并重点介绍如何使用 Python 构建人工智能聊天机器人。

本指南注重实践操作。我们将提供分步说明,您可以参考我们的示例,也可以根据自身需求进行修改。那么,让我们一起开启自然语言处理和人工智能聊天机器人的探索之旅吧!

此外,您还将学习如何免费使用自然语言处理 (NLP) 构建人工智能聊天机器人。我们将探讨一个 NLP 聊天机器人示例,并提供使用 Python 创建人工智能聊天机器人的分步指南。此外,您还将了解如何在线构建人工智能聊天机器人,甚至可以免费创建自己的聊天机器人。最后,您将能够创建一个以您自己为原型的人工智能聊天机器人,并对其进行个性化定制,以体现您的独特风格。让我们开始吧!

 

人工智能聊天机器人的类型

AI聊天机器人构建器是一个相对较新的概念,尽管拥有大量的程序和自然语言处理(NLP)工具,但根据它们所使用的NLP技术,我们基本上只能将聊天机器人分为两大类。这两类聊天机器人如下:

脚本式聊天机器人

脚本式人工智能聊天机器人是指根据预先存储在其库中的脚本运行的聊天机器人。当用户输入查询(或者,对于带有语音转文本转换模块的聊天机器人,用户语音输入查询)时,聊天机器人会根据其库中预定义的脚本进行回复。这类聊天机器人的一个缺点是,用户必须非常精确地组织查询,使用逗号分隔的命令或其他正则表达式,以便于字符串分析和理解。这使得将这类聊天机器人与支持自然语言处理(NLP)的语音转文本转换模块集成变得困难,它们也很少适合转化为智能虚拟助手。

人工智能聊天机器人

顾名思义,人工智能聊天机器人旨在模仿人类的特征和反应。自然语言处理(NLP)在帮助这些聊天机器人理解人类对话的细微差别方面发挥着重要作用。当NLP与人工智能相结合时,便能创造出真正智能的聊天机器人,它们能够回答各种复杂问题,并从每次互动中学习,从而在未来提供更优质的回复。人工智能聊天机器人可应用于各种平台,包括自动聊天支持和虚拟助手,后者旨在协助完成诸如推荐歌曲或餐厅等任务。

 

如何创建自己的AI聊天机器人项目?

创建自己的AI聊天机器人项目会是一次令人兴奋且充满成就感的体验。根据您的编程经验,您可以考虑以下两种主要方法:

1. 无需代码的聊天机器人构建器:

  • 适用人群:没有任何编程经验的初学者。
  • 优点:易于使用,开发速度快,用户界面友好。
  • 缺点:定制功能有限,可能不适用于复杂的聊天机器人。

如果你是聊天机器人开发新手,无代码聊天机器人构建器是一个很好的起点。这些平台允许你使用可视化界面、拖放功能和预置元素来设计对话流程。一些热门选择包括:

  • Chatfuel
  • ManyChat
  • Tidio

2. 编写你自己的聊天机器人:

  • 适用人群:具有 Python 等编程语言经验的开发人员。
  • 优点:高度可定制,对功能有更大的控制权。
  • 缺点:学习曲线陡峭,需要具备编程知识。

对于更高级的用户来说,使用代码从头开始构建聊天机器人可以提供更大的灵活性和自定义性。Python因其易读性以及像 ChatterBot 这样的库可以简化聊天机器人的开发而成为热门选择。以下是一个大致的开发路线图:

  1. 明确你的目标:你的聊天机器人将解决什么问题?你的目标受众是谁?
  2. 选择您的开发方法:无代码构建器或使用 Python 进行编码。
  3. 设计对话流程:规划用户如何与聊天机器人互动。
  4. 训练你的聊天机器人:向你的聊天机器人提供数据(文本、示例),使其理解用户查询。
  5. 测试和改进:根据用户交互不断测试和改进您的聊天机器人。

 

安装构建 AI 聊天机器人所需的软件包

我们将首先安装以下几个库:

# To be able to convert text to Speech
! pip install SpeechRecognition  #(3.8.1)
#To convey the Speech to text and also speak it out
!pip install gTTS  #(2.2.3)
# To install our language model
!pip install transformers  #(4.11.3)
!pip install tensorflow #(2.6.0, or pytorch)

我们将首先导入一些基本函数:

import numpy as np

我们将首先创建一个空类,然后逐步构建它。要构建聊天机器人,我们需要执行完整的脚本。机器人的名称将命名为“Dev”。

# Beginning of the AI
class ChatBot():
    def __init__(self, name):
        print("----- starting up", name, "-----")
        self.name = name
# Execute the AI
if __name__ == "__main__":
    ai = ChatBot(name="Dev")

输出 :

输出内容

使用 Google API

为了使用常用的谷歌API,我们将使用以下代码:

import speech_recognition as sr
def speech_to_text(self):
    recognizer = sr.Recognizer()
    with sr.Microphone() as mic:
         print("listening...")
         audio = recognizer.listen(mic)
    try:
         self.text = recognizer.recognize_google(audio)
         print("me --> ", self.text)
    except:
         print("me -->  ERROR")

注意:我们的聊天机器人必须完成的首要任务是语音转文本。简而言之,就是将语音或音频信号转换为文本数据。聊天机器人会“聆听”您的语音,并生成一个包含所有它能够识别的语音内容的文本文件。您可以运行代码并尝试大声说话来测试代码。它应该能够很好地捕捉您的音频信号并将其转换为文本。

# Execute the AI
if __name__ == "__main__":
     ai = ChatBot(name="Dev")
     while True:
         ai.speech_to_text()

输出:

输出内容

处理合适的回复

接下来,我们的人工智能需要能够响应您发出的语音信号。简单来说,我们的人工智能聊天机器人已经接收到输入。现在,它必须处理这些输入,并给出合适的回复,从而对人类的语音交互做出回应。为了方便理解,请添加如下所示的函数。此方法确保聊天机器人可以通过说出它的名字来激活。当您说“嘿,开发者”或“你好,开发者”时,机器人就会被激活。

def wake_up(self, text):
    return True if self.name in text.lower() else False

作为提示,我们赋予聊天机器人识别自身名称的功能,并以此作为标记来捕捉接下来的语音并做出相应的回应。这样做是为了确保聊天机器人不会对在其“听力”范围内人类所说的每一句话都做出回应。简单来说,您肯定不希望聊天机器人始终监听并参与每一场对话。因此,我们创建了一个功能,使聊天机器人能够识别自身名称,并对被呼唤其名称后的任何语音做出回应。

微调机器人回复

人工智能聊天机器人听到自己的名字后,会根据名字生成相应的回复。为此,聊天机器人还需要一个文本转语音模块。这里,我们将使用 GTTS(谷歌文本转语音库)将语音文件保存到文件系统中,以便轻松播放。

我们需要在类中添加以下功能,以便机器人能够做出回应。

代码:

from gtts import gTTS
import os
@staticmethod
def text_to_speech(text):
    print("AI --> ", text)
    speaker = gTTS(text=text, lang="en", slow=False)
    speaker.save("res.mp3")
    os.system("start res.mp3")  #if you have a macbook->afplay or for windows use->start
    os.remove("res.mp3")
#Those two functions can be used like this
# Execute the AI
if __name__ == "__main__":
     ai = ChatBot(name="Dev")
     while True:
         ai.speech_to_text()
         ## wake up
         if ai.wake_up(ai.text) is True:
             res = "Hello I am Dev the AI, what can I do for you?"
         ai.text_to_speech(res)

输出:

输出内容

接下来,我们可以考虑升级聊天机器人,使其能够执行一些简单的命令,就像某些虚拟助手那样。例如,我们可以让聊天机器人能够在用户询问当前时间时给出正确答案。要将此功能添加到聊天机器人类中,请参考以下代码:

import datetime
@staticmethod
def action_time():
    return datetime.datetime.now().time().strftime('%H:%M')
#and run the script after adding the above function to the AI class
# Run the AI
if __name__ == "__main__":
ai = ChatBot(name="Dev")
while True:
         ai.speech_to_text()
         ## waking up
         if ai.wake_up(ai.text) is True:
             res = "Hello I am Dev the AI, what can I do for you?"
         ## do any action
         elif "time" in ai.text:
            res = ai.action_time()
         ## respond politely
         elif any(i in ai.text for i in ["thank","thanks"]):
            res = np.random.choice(
                  ["you're welcome!","anytime!",
                   "no problem!","cool!",
                   "I'm here if you need me!","peace out!"])
         ai.text_to_speech(res)

输出:

输出内容

在为聊天机器人添加所有功能之后,它现在可以利用语音识别技术来响应语音提示并回复预设的答案。然而,对于非预设或未预设的内容,我们的聊天机器人仍然不够智能。现在是时候将人工智能融入到聊天机器人中,使其能够对人类与聊天机器人或使用自然语言处理(NLP)训练的机器学习模型的语音交互做出智能响应了。

 

AI聊天机器人的语言模型

在这里,我们将使用Transformer 语言模型来构建我们的 AI 聊天机器人。该模型由谷歌推出,它用注意力机制取代了早期传统的序列到序列模型。AI 聊天机器人受益于此语言模型,因为它能够动态理解语音及其语气,从而轻松执行自然语言处理 (NLP) 任务。在 AI 聊天机器人领域,一些最常用的语言模型包括谷歌的BERT和 OpenAI 的GPT。这些模型拥有多学科功能和数十亿个参数,极大地提升了聊天机器人的性能,使其真正变得智能。

正是在这里,人工智能聊天机器人才真正变得智能,而不再仅仅是一个能够应对任何测试的脚本机器人。我们代码中主要使用的包是 HuggingFace 提供的 Transformers 包,HuggingFace 是人工智能聊天机器人领域广受赞誉的资源。该工具深受开发者(包括人工智能聊天机器人项目开发者)的欢迎,因为它提供了预训练模型和工具,可以立即用于各种自然语言处理(NLP)任务。在下面的代码中,我们具体使用了 DialogGPT 人工智能聊天机器人,该机器人由微软基于 Reddit 平台上数百万条对话和正在进行的聊天记录在特定时间内训练和创建。

import transformers
nlp = transformers.pipeline("conversational", 
                            model="microsoft/DialoGPT-medium")
#Time to try it out
input_text = "hello!"
nlp(transformers.Conversation(input_text), pad_token_id=50256)

提醒:请务必提供 `pad_token_id` 参数,因为我们代码中使用的库的当前版本在未指定该参数时会发出警告。您可以通过添加该参数来避免此警告。

nlp(transformers.Conversation(input_text), pad_token_id=50256)

管道输出将包含完整的对话内容,因此您只需要从中提取聊天机器人的响应即可。

chat = nlp(transformers.Conversation(ai.text), pad_token_id=50256)
res = str(chat)
res = res[res.find("bot >> ")+6:].strip()

最后,我们准备运行聊天机器人,与我们的人工智能进行一次有趣的对话。以下是完整代码:

输出内容

太棒了!这款机器人既能像虚拟助手一样执行一些特定任务(例如,被问到时间时报出时间),也能进行日常对话。如果你认为人工智能将会长期存在,她也同意这一点:

最终代码:

# for speech-to-text
import speech_recognition as sr
# for text-to-speech
from gtts import gTTS
# for language model
import transformers
import os
import time
# for data
import os
import datetime
import numpy as np
# Building the AI
class ChatBot():
    def __init__(self, name):
        print("----- Starting up", name, "-----")
        self.name = name
    def speech_to_text(self):
        recognizer = sr.Recognizer()
        with sr.Microphone() as mic:
            print("Listening...")
            audio = recognizer.listen(mic)
            self.text="ERROR"
        try:
            self.text = recognizer.recognize_google(audio)
            print("Me  --> ", self.text)
        except:
            print("Me  -->  ERROR")
    @staticmethod
    def text_to_speech(text):
        print("Dev --> ", text)
        speaker = gTTS(text=text, lang="en", slow=False)
        speaker.save("res.mp3")
        statbuf = os.stat("res.mp3")
        mbytes = statbuf.st_size / 1024
        duration = mbytes / 200
        os.system('start res.mp3')  #if you are using mac->afplay or else for windows->start
        # os.system("close res.mp3")
        time.sleep(int(50*duration))
        os.remove("res.mp3")
    def wake_up(self, text):
        return True if self.name in text.lower() else False
    @staticmethod
    def action_time():
        return datetime.datetime.now().time().strftime('%H:%M')
# Running the AI
if __name__ == "__main__":
    ai = ChatBot(name="dev")
    nlp = transformers.pipeline("conversational", model="microsoft/DialoGPT-medium")
    os.environ["TOKENIZERS_PARALLELISM"] = "true"
    ex=True
    while ex:
        ai.speech_to_text()
        ## wake up
        if ai.wake_up(ai.text) is True:
            res = "Hello I am Dave the AI, what can I do for you?"
        ## action time
        elif "time" in ai.text:
            res = ai.action_time()
        ## respond politely
        elif any(i in ai.text for i in ["thank","thanks"]):
            res = np.random.choice(["you're welcome!","anytime!","no problem!","cool!","I'm here if you need me!","mention not"])
        elif any(i in ai.text for i in ["exit","close"]):
            res = np.random.choice(["Tata","Have a good day","Bye","Goodbye","Hope to meet soon","peace out!"])
            ex=False
        ## conversation
        else:   
            if ai.text=="ERROR":
                res="Sorry, come again?"
            else:
                chat = nlp(transformers.Conversation(ai.text), pad_token_id=50256)
                res = str(chat)
                res = res[res.find("bot >> ")+6:].strip()
        ai.text_to_speech(res)
    print("----- Closing down Dev -----")

构建你的第一个 Python AI 聊天机器人

构建你的第一个 Python AI 聊天机器人会是一个令人兴奋的项目!这里有一个简化的入门指南:

1. 选择工具:

有很多 Python 库可以简化聊天机器人的开发。ChatterBot 是一个很受初学者欢迎的选择。它提供了一个用户友好的界面,方便你使用对话数据训练聊天机器人。

2. 环境搭建:

  • 如果还没有安装Python,请安装。
  • 使用pipPython 的包管理器安装 ChatterBot:
pip install chatterbot

3. 构建聊天机器人:

  • 导入必要的库(ChatterBot 和 ChatterBot 的 CorpusTrainer)。
  • 创建一个聊天机器人实例并为其命名。
  • 使用 ChatterBot 提供的预定义语料库(文本数据集合)训练聊天机器人。该语料库包含常见对话,可帮助您的聊天机器人理解语言模式。

4. 测试和改进:

  • 运行聊天机器人并与之互动!看看它如何回答你的问题。
  • 您可以使用自定义对话数据(文本文件、聊天记录)进一步训练聊天机器人。这可以使聊天机器人的回复更加个性化,更符合您的需求。

 

结论

本指南提供了创建对话式人工智能聊天机器人的分步教程。您可以以此聊天机器人为基础,开发一个能够像真人一样交流的聊天机器人。我们分享的代码示例用途广泛,可以作为构建类似人工智能聊天机器人项目的基石。

 

原文作者:Arnab M

原文链接:https://www.analyticsvidhya.com/blog/2021/10/complete-guide-to-build-your-ai-chatbot-with-nlp-in-python/

在声网,连接无限可能

想进一步了解「对话式 AI 与 实时互动」?欢迎注册,开启探索之旅。