作者:禅与计算机程序设计艺术
1.简介
Chatbot,中文翻译成聊天机器人,是一种通过与人类对话的方式实现信息自动交互的应用。相对于电子商务网站上的售后客服、在线咨询机器人、基于语音识别的虚拟助手等,Chatbot具有更高的可信度、更快速的反应速度和更便捷的用户体验。
Chatbot应用主要包括四个方面:
- 用户输入处理模块(Input Processing Module): 提供接收用户输入的方法,将用户的语句映射到特定的功能或操作上。例如,当用户问“你好”,Chatbot可能回复“您好!”,当用户提出查询需求,Chatbot可能回复从数据库中检索到的相关信息。
- 对话管理模块(Dialog Management Module): 根据对话历史记录、上下文理解等因素进行对话的响应生成和转移,确保Chatbot能够根据不同的对话场景及用户情况做出合适的回应。
- 自然语言理解模块(Natural Language Understanding Module): 技术上可以分为两步,首先是文本理解模块,即把文本转换成计算机可读的形式;其次是语义理解模块,即通过分析语法和句法结构识别出用户的意图、动作或领域词汇。
- 输出生成模块(Output Generation Module): 将Bot所得到的结果转化成人类可阅读的形式,并显示给用户。例如,如果Bot收到了用户的订单查询请求,它可能会回复“您的订单号为xxxxxx”这样的信息。
其中,最基础的是对话管理模块,而Dialogflow是一个提供完整解决方案的AIaaS平台,使得开发者能够方便快捷地构建自己的Chatbot。本文将向大家展示如何利用Dialogflow快速搭建一个简单的机器人,并用自己的话进行测试。
2.基本概念术语说明
2.1 Bot
Bot(robot),英文翻译成机器人,在电影和电视剧中也经常出现。通常情况下,它只是机器人的一部分或者功能的一部分。在我们的讨论中,我们一般指的是可以与用户沟通、回答各种各样的问题、执行各种任务的机器人。
2.2 Dialogflow
Dialogflow是一个提供完整的AI开发平台,其基本思路是在用户说出某个话之后,用语义分析、机器学习和深度学习等多种方式获取用户真正的意图和目的。然后,Dialogflow就可以用图形化的界面来帮助我们实现Chatbot。
2.3 Natural Language Understanding(NLU)
Natural Language Understanding,简称NLU。它的作用是将输入的文字转换成计算机可以读取和理解的格式,并进行自然语言理解,找出用户的主观观点和意图。
2.4 Intent
Intent(意图)表示用户想要达到的目的或期望。它定义了对话行为,类似于人类的语言,比如“我想订机票”。
2.5 Entity
Entity(实体)表示对话中的对象或事物。它可以包括名词、代词、动词、形容词、副词等。
2.6 Contextual Information
Contextual Information,上下文信息,用于判断用户的当前状态,辅助对话管理模块判断用户的下一步行为。比如,在问询询问航班信息的时候,系统就需要知道用户最近几次飞行的时间、航班编号、起始地和终点等信息,才能准确地回答用户的查询。
2.7 FAQ System
FAQ System(常见问题匹配系统)是一种基于规则的方法,用于识别用户的问题并找到对应的答案。它的优点是简单易用,缺点是存在着很多误差。
3.核心算法原理和具体操作步骤以及数学公式讲解
3.1 创建Dialogflow账号
首先需要有一个Dialogflow账号。在网址https://console.dialogflow.com/api-client/#/login注册一个账号即可。创建完毕后,我们可以在左侧导航栏中看到项目管理、对话管理、设置和认证选项卡,这些选项卡分别用于管理项目、创建对话、配置环境和集成第三方服务等功能。
3.2 创建新项目
创建一个新的项目需要先选择一个地方保存项目,这里我选择了默认的。然后在项目管理页点击新建按钮,填写项目名称并点击完成按钮。
3.3 创建实体
创建实体是为了让机器人可以理解并处理用户输入的内容。在项目管理页打开刚才创建的项目,然后切换到实体管理页。进入实体管理页面,单击添加按钮,创建一个名为"Location"的实体,类型设置为"@sys.geo-city",并点击完成。
3.4 创建intents
创建一个intent,实际上就是定义对话的模式,确定了机器人的不同功能。例如,假设要建立一个旅游助手,那么需要建立三个intents,分别代表三个功能:查找城市、订购机票和取消订单。
进入对话管理页面,单击"intents"标签,然后单击右上角的"+ Create Intent"按钮。创建第一个intent,命名为"find_location",类型设置为"Default Response",意图描述为"寻找城市",示例utterances列表为空白。
创建第二个intent,命名为"book_flight",类型设置为"Default Response",意图描述为"订购航班",示例utterances列表为空白。
创建第三个intent,命名为"cancel_order",类型设置为"Default Response",意图描述为"取消订单",示例utterances列表为空白。
3.5 添加训练数据
为每一个intent添加训练数据,也就是给定一组输入语句和对应的输出语句,以便训练机器人识别出用户输入的含义。我们可以针对每一个intent单独为其添加训练数据。
比如,要训练"find_location" intent,我们可以添加如下训练数据:
- Where can I stay in Hong Kong?
- Can you suggest a place where I could stay for two people in Tokyo?
- Do you have any suggestions on places that are cheap and near the beach?
这些数据表明,机器人应该根据用户输入的特定问题来回答用户关于所在城市的查询。
比如,要训练"book_flight" intent,我们可以添加如下训练数据:
- I need a flight from Beijing to New York.
- Is there any flights available from London to San Francisco tomorrow morning?
- Please book me an air ticket from Los Angeles to Dallas after three days of vacation.
这些数据表明,机器人应该根据用户输入的特定问题来回答用户关于订购机票的查询。
比如,要训练"cancel_order" intent,我们可以添加如下训练数据:
- Could you cancel my last order please?
- What is the status of my current booking?
- Could you tell me when my flight leaves for Seattle?
这些数据表明,机器人应该根据用户输入的特定问题来回答用户关于取消订单的查询。
注意,这些训练数据是模拟数据,仅供演示之用,在实际使用时,需由业务人员或产品经理负责创建。
3.6 训练机器人
单击右上角的"Train"按钮,开始训练机器人模型。训练过程需要一些时间,耐心等待即可。当训练完成时,机器人会进入运行状态,并准备接受用户的查询。
3.7 测试机器人
测试机器人可以通过微信、Facebook Messenger等聊天工具进行,也可以通过网页访问Dialogflow提供的测试界面。选择一个intent,输入一段示例utterance,点击"Send To Bot"按钮,机器人就会给出相应的回复。
比如,我们可以尝试输入:
What's the weather like today in New York City?
机器人应该回答:
The weather condition now is Sunny in New York City.
说明机器人正确识别出用户的意图并进行相应的回答。