Skip to content

Latest commit

 

History

History
238 lines (169 loc) · 8.81 KB

build-chatbot-python-nltk.md

File metadata and controls

238 lines (169 loc) · 8.81 KB

使用 Python 和 NLTK 构建你的第一个聊天机器人

原文:www.kdnuggets.com/2019/05/build-chatbot-python-nltk.html

评论图示名称来源:octodev.net/most-advanced-chatbot-apps-powered-by-artificial-intellect/

聊天机器人(也称为对话机器人闲聊机器人机器人IM 机器人互动代理人工对话实体)是一个计算机程序或一个人工智能,通过听觉或文本方法进行对话。这些程序通常被设计为模拟人类在对话中的行为,从而通过图灵测试。聊天机器人通常用于对话系统中,具有多种实际用途,包括客户服务或信息获取。一些聊天机器人使用复杂的自然语言处理系统,但许多简单的系统则扫描输入中的关键词,然后从数据库中提取具有最匹配关键词或最相似措辞模式的回复。”

— 来源 维基百科

聊天机器人并不是很新,其中之一是 ELIZA,它在 1960 年代初期创建,值得探索。为了成功构建一个对话引擎,它应当考虑以下事项:

  1. 了解目标受众

  2. 了解交流的自然语言。

  3. 了解用户的意图或愿望

  4. 提供可以回答用户的问题的响应

今天我们将学习如何使用 Python 的 NLTK 库创建一个简单的聊天助手或聊天机器人。

NLTK 有一个模块,nltk.chat,它通过提供一个通用框架来简化这些引擎的构建。

在这个博客中,我使用了来自 nltk.chat.util 的两个导入:

聊天:这是一个包含聊天机器人所使用的所有逻辑的类。

反射:这是一个包含一组输入值及其对应输出值的词典。它是一个可选的词典,你可以使用它。你也可以创建自己的词典,格式如下,并在代码中使用。如果你查看 nltk.chat.util,你会看到它的值如下:

reflections = {
  "i am"       : "you are",
  "i was"      : "you were",
  "i"          : "you",
  "i'm"        : "you are",
  "i'd"        : "you would",
  "i've"       : "you have",
  "i'll"       : "you will",
  "my"         : "your",
  "you are"    : "I am",
  "you were"   : "I was",
  "you've"     : "I have",
  "you'll"     : "I will",
  "your"       : "my",
  "yours"      : "mine",
  "you"        : "me",
  "me"         : "you"
}

你也可以创建你自己的反射词典,格式与上面相同,并在代码中使用它。以下是一个示例:

my_dummy_reflections= {
    "go"     : "gone",
    "hello"    : "hey there"
}

并将其用作:

 chat = Chat(pairs, my_dummy_reflections)

使用上述 Python 的 NLTK 库概念,让我们构建一个简单的聊天机器人,而不使用任何机器学习或深度学习算法。因此,显然我们的聊天机器人将是一个体面的,但不是智能的。

源代码:

from nltk.chat.util import Chat, reflections

pairs = [
    [
        r"my name is (.*)",
        ["Hello %1, How are you today ?",]
    ],
     [
        r"what is your name ?",
        ["My name is Chatty and I'm a chatbot ?",]
    ],
    [
        r"how are you ?",
        ["I'm doing good\nHow about You ?",]
    ],
    [
        r"sorry (.*)",
        ["Its alright","Its OK, never mind",]
    ],
    [
        r"i'm (.*) doing good",
        ["Nice to hear that","Alright :)",]
    ],
    [
        r"hi|hey|hello",
        ["Hello", "Hey there",]
    ],
    [
        r"(.*) age?",
        ["I'm a computer program dude\nSeriously you are asking me this?",]

    ],
    [
        r"what (.*) want ?",
        ["Make me an offer I can't refuse",]

    ],
    [
        r"(.*) created ?",
        ["Nagesh created me using Python's NLTK library ","top secret ;)",]
    ],
    [
        r"(.*) (location|city) ?",
        ['Chennai, Tamil Nadu',]
    ],
    [
        r"how is weather in (.*)?",
        ["Weather in %1 is awesome like always","Too hot man here in %1","Too cold man here in %1","Never even heard about %1"]
    ],
    [
        r"i work in (.*)?",
        ["%1 is an Amazing company, I have heard about it. But they are in huge loss these days.",]
    ]

[
        r"(.*)raining in (.*)",
        ["No rain since last week here in %2","Damn its raining too much here in %2"]
    ],
    [
        r"how (.*) health(.*)",
        ["I'm a computer program, so I'm always healthy ",]
    ],
    [
        r"(.*) (sports|game) ?",
        ["I'm a very big fan of Football",]
    ],
    [
        r"who (.*) sportsperson ?",
        ["Messy","Ronaldo","Roony"]
],
    [
        r"who (.*) (moviestar|actor)?",
        ["Brad Pitt"]
],
    [
        r"quit",
        ["BBye take care. See you soon :) ","It was nice talking to you. See you soon :)"]

],
]

def chatty():
    print("Hi, I'm Chatty and I chat alot ;)\nPlease type lowercase English language to start a conversation. Type quit to leave ") #default message at the start
    chat = Chat(pairs, reflections)
    chat.converse()

if __name__ == "__main__":
    chatty()

代码非常简单,但我们还是来理解一下。

一旦调用函数 chatty(),将显示默认消息:

figure-name

接下来,我创建了一个包含pairs(包含问题和答案集合的元组列表)和reflections(如上所述)的 Chat 类实例。

下一步是触发对话:

chat.converse()

一个简单的对话:

figure-name与 Chatty 的简单对话

正如你所见,我们只是将可能的问题和答案硬编码到列表 pairs 中。

让我们更多地与 Chatty 互动:

figure-name与 Chatty 的简单对话

nltk.chat 聊天机器人基于问题中存在的关键字的正则表达式工作。所以你可以添加任何数量的按正确格式编写的问题,以避免你的聊天机器人在确定正则表达式时感到困惑。

在这篇博客中,我用简单的步骤解释了如何使用 NLTK 构建自己的聊天机器人,当然它不是一个智能聊天机器人。

希望大家喜欢阅读。

快乐学习!!!

如有疑问/建议,请通过LinkedIn与我联系。

**简介: 纳吉什·辛格·乔汉**是 CirrusLabs 的一名大数据开发人员。他在电信、分析、销售、数据科学等多个领域拥有超过 4 年的工作经验,并在各种大数据组件方面有专长。

原文。已获得许可重新发布。

相关:

  • 如果聊天机器人要成功,它们需要这个

  • 认识 Lucy:创建聊天机器人原型

  • 机器如何理解我们的语言:自然语言处理简介


我们的前三个课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业生涯。

2. Google 数据分析专业证书 - 提升你的数据分析水平

3. Google IT 支持专业证书 - 支持你的组织的 IT 需求


更多相关内容