尝试实现一个chatbot的漫漫长路

写在前面

又好久没有写总结啦,果然跟我之前想的一样会慢慢荒废啊最近大家的方向主要是人工智能,当然了还处于特别特别基础的阶段。。起因是95522要配置一个智能回访项目,就是当我们买了保险之后是要进行回访的。目前这项工作都是由人工进行的,但是由于每套话术流程都是基本相同的,所以现在考虑用机器代替人工进行回访。背景就酱,所以最近大家都看了一下关于智能对话机器人的资料。

wode

1

关于智能机器人

智能机器人近几年发展的十分迅速,一个智能语音助手似乎成了许多智能硬件的标配。其中的代表有我们十分熟悉的Siri,Cortana,以及今年表现令人大吃一惊的Google Assistant。

对话机器人使用的领域很广,现在不管是网站还是APP还是硬件什么的,没有配个智能机器人都不好意思出来见人。按照使用领域细分可分为很多种,但是按我的理解大致上可分为两大类:

问答机器人

多用于垂直领域,例如购物、保险类智能客服等,它的特点总结一下有如下几个方面:

知识领域非常有限,针对性较强,因此一般会有一套题库来保证回答的准确度,不必考虑感情因素

聊天机器人

聊天机器人则适用范围更广,主要用于闲聊等场景,对于用户提出的任何问题都应给予合适的回答,通常应对用户的输入做出个性化回复。类似于Siri和Cortana这种智能助手都可以分为该类。

2

架构与相关技术

智能机器人的架构与主要技术大致可以用下图表示,整个流程还是比较容易理解。

自动语音识别技术(Automatic Speech Recognition,ASR)即将用户输入的语音识别成为文本。

语音合成(Text to Speech,TTS)即将文字转换为语音进行播放。

自然语言理解(Natural Language Understanding,NLU):当我们跟计算机说“我想买个可以保障意外伤害的保险”,计算机如何能够准确识别我的意图是“买保险”呢?这就是NLU的职责所在。正如人与人交流一样,理解对方的真实意图是交流的基础。

对话管理(Dialog Management,DM):相当于整个流程中的大脑,控制着人机对话的过程,主要任务为在NLU之后,决定系统对于用户的输入所做出的行为,或为某种具体操作,例如打开照相机;或为根据用户输入给出一句回答。

例如任务驱动型的对话,当用户提出“我想听一首歌”,机器会提问“您想听谁的歌?”、“您想听摇滚还是抒情类的?”等问题来完善用户的需求。

自然语言处理(Natural Language Processing,NLP):当理解了用户的输入后,计算机应生成返回给用户的回复,回复语句的生成即是NLP的工作。如何能让计算机给出的回复符合自然语言逻辑并且符合用户的需求是NLP的难点。

3

关于NLU

最近看的比较多的是NLU,所以下面主要围绕它多说一些。NLU是保证我们得到所需输出的第一步。它主要包含下列步骤与难点:

1

分词、分句、词性标注等基础处理

由于语言结构的区别,在英文体系中,词与词之间本身就有空格加以区分,并且通常一个词即表达一个独立的意思。而我们博大精神的中文则完全不同,如果我们想让机器正确理解我们的意思,需要进行很多处理工作,比如对一句话进行正确的断句(即分词),标注出各个词句在句子中的成分等等。例如:我想去北京看天安门。机器应能正确将句子分解为:我/想/去/北京/看/天安门。这样才能为后续的处理打好基础。

2

指代消解。

在语言表达中我们会经常使用代词,比如“今天我和妈妈去逛街,她买了一件衣服”,“她”此时指代的是“妈妈”。然而对于计算机我们怎么能让它理解这些呢?

指代消解问题可分为显性代词消解、零代词消解、共指消解。自然语言处理知识体系中提供了多种研究方法用于处理指代消解。大致可以分为基于启发式规则的、基于统计的和基于深度学习的方法,目前基于有监督统计机器学习的消解算法是其中主流。这里没有任何了解就不多说了。

3

特征处理和模型训练

NLU的重点是能够正确识别用户的意图(intent)。例如当用户说“今天北京多少度?”,机器应能够判断出用户的意图为“查天气”,以进行下一步动作。目前实现NLU的方法主要有两大类:基于规则,基于数据(检索、生成)。

基于规则:也就是说我们为计算机提供了一些模板,当用户输入的信息与这些模板匹配时,计算机即做出相应的回答。例如,同样是“查天气”的意图,用户的问法可能有“今天天气怎么样?”、“今天多少度?”、“今天的气温是多少?”等等。我们将这些问法全部作为规则提供给计算机,当其接收到这些问题时,即可作出统一的回答“今天的气温是XXX”。

感觉很多简单的机器人都是通过配置规则的方式实现的,当年十分有名的Alice也是这样。我并不认为这样的实现方式可以称作人工智能,所以很难理解它们是怎样通过图灵测试的。。

基于数据:其实我认为基于数据的机器人才可以叫做人工智能。使用算法通过计算和预测来生成对于用户的回答是目前大部分研究的方向。这段时间看到了很多关于机器学习相关方面的算法,可以说是非常崩溃了,Word2vec、RNN、CNN之类的,希望之后能有更多了解吧。

4

尝试搭建一个Chatbot吧

很多公司都提供了Chatbot开发架构,比较有名的有LUIS,Wit.ai,Rasa,Alice,Bot Framework,Pandorabot等,github上也有很多知名项目,感兴趣的话可以玩一下。我们最近分别尝试了几个开源Chatbot项目,下面主要介绍两个。

Rasa

Rasa是一个自然语言处理框架,主要分为Rasa NLU 和Rasa Core两部分,分别负责自然语言理解和对话流程管理。

Rasa的环境配置对我来说太复杂了,对机器要求也很高,所以没有进行实际尝试,只是大致看了一下文档,有同事用它搭了一个简易模型,效果还不错。github上有源码,可以了解一下。

PandoraBot

PandoraBot是基于AIML语言实现的聊天对话机器人,入门还比较快。

AIML即人工智能标记语言,听着特别高大上,其实就是基于XML格式的标签。获得了多项人工智能大奖的ALICE机器人即是由它编写,有兴趣的同学可以看一下。它的语法十分简单,由几个主要的标签构成;

:定义一个AIML文件的开始与结束

:定义一个知识的单元

:定义一个模板,来匹配用户可能的输入

:定义根据用户的输入需要返回的回答

当然只使用这几个基本的标签是远远不够的,AIML提供了多个通配符及标签可用于匹配用户的输入。例如*,?,,,等,具体可以搜索一下相关资料。总体来看,AIML易于理解,对于新入门的选手来说十分友好,构建一个bot的难度大大降低。但是这样一个基于

前几天用Pandorabots做了一个小Demo,就是基于AIML的。Pandorabots提供了构建聊天机器人的IDE,叫The Pandorabots Playground,感兴趣的同学可以试一试,过程十分简单。

5

总结一下

人工智能是个很深奥的学科,在刚刚接触这方面的过程中真心感觉非常吃力,需要学习的东西太多,尤其在对于数学和算法知识非常缺乏的情况下,有时候看到1个名词不太懂,在去了解的过程中又看到了10个不懂的名词。。在知识体系并不完善的情况下,从底层研究不是个好的选择。其实有很多公司和机构都提供了功能强大的接口和应用,直接调用接口实现功能,而将精力集中于如何在应用层开发更多功能是一个可以考虑的方向。

写在后面

对看到结尾的同学们鞠躬表示感谢!这次排版看起来是不是进步了一点?突然感觉到那些公众号运营和自媒体人也是很不容易的。今天传说北京有大暴雨,南方有大台风,希望都快快退散啊~~就酱,再次谢谢收看,遥远的下期再见啦

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711G15JMF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券