[NLP]如何打造一个Chatbot

‘再见’

chat:

‘听起来很有趣的样子’




好了,到这里我们想要打造的聊天机器人的雏形就出来了。首先接收用户的输入,然后根据用户的输入判定意图,之后根据相应的意图生成对应的回答。这样就完成了一次会话过程。伪代码可以表示如下:



input_string=“”#输入

intent_object=intent(input_string)#意图识别

response=policy(intent_object)#回复生成

print(response)#返回用户




### chatbot开发



理清楚了具体的对话流程,下面就可以开始着手对我们的聊天机器人进行开发了。这里我们用到的rasa框架,rasa中用领域(domain)对会话进行区分,每一个领域下面有不同的意图,意图是由实体进行区分的,每一个意图对应着一个会话动作。



#### 安装:



pip install rasa_core

git clone https://github.com/RasaHQ/rasa_core.git

cd rasa_core

pip install -r requirements.txt

python setup.py install




在完成安装之后可以运行helloworld示例来检验是否正常安装成功:



python examples/hello_world/run.py

Bot loaded. Type hello and press enter :

hello

hey there!




当‘hey there!’的回复之后就是安装成功了。安装成功之后就利用hello\_world示例项目实现上文提到的打招呼机器人。



#### 定义领域、意图和动作



#创建文件common_domain.yml,复制如下代码

intents:#定义意图

  • greet - goodbye - chat

entities:

  • action

templates:#表示对于相应的意图采取什么样的回复

utter_greet:

- "hello!"  utter_goodbye:

- "byebye :("  utter_chat:

- "It seems like funny!"

actions:

  • utter_greet - utter_goodbye - utter_chat



#### 实现会话逻辑



from future import absolute_import

from future import division

from future import print_function

from future import unicode_literals

import logging

import numpy as np

from rasa_core import utils

from rasa_core.actions.action import ACTION_LISTEN_NAME

from rasa_core.agent import Agent

from rasa_core.channels.console import ConsoleInputChannel

from rasa_core.domain import TemplateDomain

from rasa_core.interpreter import NaturalLanguageInterpreter

from rasa_core.policies import Policy

from rasa_core.tracker_store import InMemoryTrackerStore

logger = logging.getLogger(name)

class CommonPolicy(Policy):

def predict_action_probabilities(self, tracker, domain):

    # type: (DialogueStateTracker, Domain) -> List[float]

#将对应的意图与动作绑定

    responses = {

        "greet": 2,

        "goodbye": 3,

        "chat": 4,

    }



    if tracker.latest_action_name == ACTION_LISTEN_NAME:

        key = tracker.latest_message.intent["name"]

        action = responses[key] if key in responses else 4

        return utils.one_hot(action, domain.num_actions)

    else:

        return np.zeros(domain.num_actions)

class HelloInterpreter(NaturalLanguageInterpreter):

def parse(self, message):

    # intent = "greet" if 'hello' in message else "default"

    global intent

#进行意图识别

    if 'hello' in message:

        intent='greet'

    elif 'goodbye' in message:

        intent='goodbye'

    else:

        intent='chat'

    return {

        "text": message,

        "intent": {"name": intent, "confidence": 1.0},

        "entities": []

    }

def run_hello_world(serve_forever=True):

default_domain = TemplateDomain.load("./common_domain.yml")#加载多个domain怎么办

agent = Agent(default_domain,

              policies=[CommonPolicy()],

              interpreter=HelloInterpreter(),

              tracker_store=InMemoryTrackerStore(default_domain))

最后

**一个零基础的新人,我认为坚持是最最重要的。**我的很多朋友都找我来学习过,我也很用心的教他们,可是不到一个月就坚持不下来了。我认为他们坚持不下来有两点主要原因:

他们打算入行不是因为兴趣,而是因为所谓的IT行业工资高,或者说完全对未来没有任何规划。

刚开始学的时候确实很枯燥,这确实对你是个考验,所以说坚持下来也很不容易,但是如果你有兴趣就不会认为这是累,不会认为这很枯燥,总之还是贵在坚持。

技术提升遇到瓶颈了?缺高级Android进阶视频学习提升自己吗?还有大量大厂面试题为你面试做准备!

提升自己去挑战一下BAT面试难关吧

对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!

最后祝各位新人都能坚持下来,学有所成。

T面试难关吧**

[外链图片转存中…(img-g7eo0y01-1720103303704)]

对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!

最后祝各位新人都能坚持下来,学有所成。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值