文档章节

如何为聊天机器人设计数据通道

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:27
字数 1395
阅读 9
收藏 0

聊天机器人开发者通常使用两种技术使得自己的聊天机器人更加的聪明,这两种技术分别是机器学习和专家系统。

机器学习技术可以帮助你识别用户信息的意图是什么,并且从中抽取出一些实体名词。这个技术是非常有帮助的,但是需要很多的数据来训练这个算法。根据经验,我们需要为每个类别提供大约 1000 个示例,用于用户的意图分类。

如果你没有足够的训练数据,那么你也可以设计一些简单的规则来识别用户的意图信息。规则可以是非常简单的,比如,在一个句子中出现 “pay” 和 “order” ,那么我们就认为用户发出的就是一个购买指令。在程序中的实现,大约就是这样:

def isRefundRequest(message):
    return 'pay' in message or 'order' in message

任何的意图分类代码都可能导致两种类型的错误。第一种:用户没有标明确切的意图,但是聊天机器人识别出来了意图;第二章:用户表达了自己的意图,但是聊天机器人没有识别出来。这种方法识别的意图将导致很多的错误,比如:

  1. 用户可以在句子中使用 “pay” 和 “order” 这两个词,但是以另一种方式:I make an order by mistake. I won't pay.

  2. 一个关键词是另一个短语的一部分,比如:Can I use paypal for order #123?

  3. 拼写错误,比如:My orrder number is #123. How can I pay?

  4. 词的不同形式,比如:How can I pay for my orders?

所以,你的聊天机器人需要一个预处理的数据通道,来处理这些典型的错误。具体步骤可能包括以下几步:

1.拼写检查

得到用户的原始输入,然后修改用户的拼写错误。这里有一个非常简单的实现和一个用深度学习实现的拼写检查器

2.分割成句子

我们经常会把每个句子独立出来分析,这是一个非常有用的方法。将文本分割成一个一个句子是非常容易的,你可以使用一些 NLP 方面的包。比如:NLTKStanfordNLPSpaCy

3.分割成单词

这也是一个非常重要的技能,因为一般情况下规则系统都是基于词来操作的。上述提到的一些 NLP 库都可以做这件事。

4.词性标记

一些词同时有两种不同的词性,比如 “change” 是一个名词也是一个动词。知道一个词的词性可以很好的帮助我们规避歧义。你可以使用上述提到的 NLP 库或者 Google SyntaxNet 来处理这些事,Google 的库正确率更高,并且支持很多种语言。

5.词干提取

一个词可能有很多种形式:“pay”,“paying”,“paid”。在很多种情况下,一个词的确切形式对于编写专家系统并不重要。但是如果预处理的时候,能把一个词的很多形式归并到一个形式,那么这对于设计规则系统将带来很大的简便性。对于英文,最有名的字典就是 WordNet,NLTK 和一些其它的库也能达到这个目的。

6.实体识别:时间,数字和专有名词

日期和数字可以被表示成不同的形式:“3/1/2016”,“1st of March”,“next Wednesday”,“2016-03-01”,“123”,“one hundred”等等。在进行模式匹配之前,将这些日期和数字转换成统一格式可能会带来很大的帮助。还有一些专有名词需要我们来特殊对待:地点(国家,地区,城市,街道地址,地点),人员,电话号码。

7.查找概念/同义词

如果你想搜索一种狗,但是你肯定不想列出系统数据库中所有狗的品种,因为数据库中可能有数以百计的狗。如果在预处理消息中可以识别狗的品种,并且使用特殊标签标记这个词,这就是一个非常好的预处理方式。然后,我们只需要在规则中找到这个品种的狗就行了。

WordNet 可以用来识别一些常见的概念。你可能需要添加一些特定的域来处理这些概念,比如,如果你正在构建一个医疗保健机器人,那么需要列出药物的各个名称。

预处理完成之后,你可以得到一个干净的句子列表或每一个句子的单词列表。每个单词都标有词性和概念。下一步就是去定义用户信息的一个意图。

你可以使用常用的逻辑运算符 AND,OR,NOT 来构建自己的模式语言。如果你常见了基于 Python 的内部 DSL(特定域语言),那么规则可以如下所示:

r = Rule(
    And(
        Or('cancel', 'close'),
        'membership',
    Respond('Would you like to cancel your membership immediately?'))

或者,你可以设计外部的 DSL ,这更加方便阅读理解,但是你需要做额外的工作来创建该语言的编译器或解释器。如果你使用 ChatScript 语言,那么写法如下所示:

u: (<<[cancel close] membership>>)
    Would you like to cancel your membership immediately?

快去动手试试吧 :)


来源:Medium

本文转载自:http://www.jianshu.com/p/43db6425ad33

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2635
码字总数 83001
作品 0
程序员
初学者也能用Azure Bot创建聊天机器人

  【IT168 编译】首先,需要在Azure门户上创建一个帐户。只有这样,我们才能在云环境中托管应用程序。   网络应用机器人   在左侧菜单上单击New,它将打开Azure Marketplace,在那里我...

it168网站
01/08
0
0
如何利用paddlepaddle做一个简单的聊天机器人 | 公开课

分享背景 ▼ 语音助手,也称为聊天机器人作为人工智能交互的入口之一,其战略地位,好比百度之于PC,微信之于手机,已经成为巨头兵家必争之地。什么是聊天机器人,聊天机器人又有哪些难点,本...

y0w1as5eg37urfds
2017/12/18
0
0
超越NLP:构建聊天机器人面临的8个挑战

  【IT168 资讯】过去五年里,Microsoft、IBM、Google和Amazon等公司都推出了令人惊叹的聊天机器人框架,分别都是Microsoft Bot Framework、IBM Watson Conversation、Google API.ai和Ama...

it168网站
2017/12/07
0
0
微软推出 AI 开发免费电子书,手把手教你构建智能聊天机器人

雷锋网 AI 研习社按,日前,微软推出 AI 开发者免费电子书,教导大家利用微软 AI 平台开发智能聊天机器人。雷锋网看到,该电子书不长,核心内容共有四十多页,其中涵盖大量代码,相信对于 AI...

思颖
06/07
0
0
SIGIR 2018 | 通过深度模型加深和拓宽聊天话题,让你与机器多聊两句

  选自sigirdawnet   作者:Wenjie Wang等   机器之心编译   参与:Panda      目前大多数基于生成的对话系统都会有很多回答让人觉得呆板无趣,无法进行有意思的长时间聊天。近日...

机器之心
04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精通Spring Boot——第十二篇:分页查询功能的实现

本文将介绍如何实现分页查询功能,推荐使用github的pagehelper插件实现(事实上大家基本都是这么干的),但本文的实现方式和大多数不同,废话少说,现在就带着大家看看区别在哪里。 先看pom...

developlee的潇洒人生
23分钟前
1
0
平淡的秋招之路

1. 概述 在八月中旬之前,我还没有秋招这个概念,认为找工作就是通过学校举办的招聘会。后来慢慢的了解到,由于学校实力的问题,许多好的公司只会去门当户对的学校进行招聘。我们学校只是一个...

firepation
26分钟前
1
0
设置布局中的子控件不可用

RelativeLayout R2 = findViewById(R.id.act_menu_level2_rl); //设置当前R2中的子控件不可用 int childCount = R2.getChildCount(); ......

lanyu96
37分钟前
2
0
分布式系统中处理参数配置的 4 种方案

一个系统中包含有各种各样的配置信息,如一个日志文件需要配置以下几个信息。 日志文件生成主目录 日志文件名称,不同的日志级别对应不同的文件 当前日志级别 还有其他各种业务参数、系统参数...

Java技术栈
39分钟前
2
0
MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码 先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用M...

Airship
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部