当前位置: 首页 > 科技观察

建立自己的智能客服

时间:2023-03-20 12:39:04 科技观察

背景很多人问,会话交互系统只是语音交互吗?当然不是。语音交互本身并不是一个新概念。你可能给银行打过电话,“华语服务按1,英文服务按2……按0返回上一级。”这也是一个会话交互系统。我想每个人都知道这种交互的用户体验是多么低效。那么会话交互系统能否代替人类提供服务呢?不,图灵测试还没有通过,何必担心呢。然而,随着人工智能的发展,会话交互披上了语音和文字的外衣,携手模糊搜索引擎,拥抱计算科学和语言学的核心,承载着定制化推荐的花环,带动了深度学习和人工智能的发展。大数据乘风破浪——我们只知道是时候了。至少,我们已经可以在十分钟内创建自己的对话式客户服务。今天的文章大致分为三个部分:历史、今天(chatbotapi)和未来(深度学习与智能问答)。首先定义交互系统。wiki给出的定义是:交互是两个或多个对象相互影响时发生的一种动作。即两方或多方相互影响的过程。在我们的上下文中,我们不妨将其限制为人机交互。先说说它是什么,再说说怎么做。广义上的历史和当前的会话交互实际上包括了所有以一问一答形式进行的人机交互。从头到尾,我们都需要从机器中获取信息。在最早的时代,使用的是文本交互系统TUI。事实上,直到今天,我相信程序员在Linux下完成大部分操作时仍然使用Terminal。这种文字交互非常简单高效,但有一个缺点:不熟悉操作人上手非常困难,需要记住很多指令和规则才能有效地告诉机器你要做什么想让它干什么——就像开个玩笑:“问:如何生成随机字符串?答:让新手退出VIM”。直观上,既然“以机器交流的方式告诉机器做什么”给人类带来了糟糕的用户体验,我们可以让机器提供可能的选项供人类选择。因此,人类使用了数十年,将交互系统升级为图形交互GUI。大家今天看到的桌面系统就是一个特别典型的体现。包括后来发展起来的触摸屏和智能手机,其实都是图形交互的不同表现形式。现在一切都好吗?并不真地。虽然机器可以在瞬间呈现出大量的信息,但人类同时能够注意到的信息却是极其有限的。心理学研究发现,人的注意力广度实际上只有5-9个物体。想象一下上图,如果我在桌面上放100个应用程序会怎样?1000?随着数据量的增长。如何在海量信息中快速呈现有效信息?搜索系统,或者更具体地说——推荐系统,承担了在选项过多时尽可能高效地为用户提供所需信息的任务。做好智能搜索,才能做好智能交互。它们在本质上都是一样的:在浩如烟海的已知数据中,根据一定的模型和经验,总结出用户最想要的答案,并及时呈现。我问了谷歌一个问题,谷歌在第一位给了我想要的答案。谁能说这不是对话互动呢?当然,我们希望的对话式UI不仅仅是问答,我们希望对话系统能有自己的知识库,保留对上下文的记忆和理解,有逻辑推导的能力,以及甚至,颇具争议的是,它具有某种情感色彩。所以,我们有了今天的对话式UI,对话式交互只是一个外壳。它的本质是智能化和定制化服务。经过一段时间的培训,你拿起电话给银行打电话,接听的智能客服就和人类的交互方式一样。抛开从1到9的繁琐决策路径,只要告诉他你想做什么,银行就会直接为你提供你需要的服务。为了完成这个任务,我们有两条主要路径。一是专家系统。这里我们也会介绍几个网上的引擎,力求让大家在十分钟内学会搭建自己的智能客服系统。另一个是智能问答系统,这需要一点机器学习和深度学习的知识——教机器理解规则比教机器规则有趣得多。输入前面提到了输入和输出,这就是机器理解人类指令的方式。就是因为输出问题,可以说解决了好久。在文字、图像和语音三大交流方式中,语音是最晚要解决的,但20年前的技术足以与人交流。虽然我们仍然可以很容易地听到语料库是否是电子合成的,但是这种音色损失并不影响我们交流的目的。语音到文本的识别要复杂得多。这种类型的工作恰好始于1952年。从读取从1到0的数字,然后输入数字的声谱来识别据说是从哪个数字开始。虽然这个模型已经达到了98%的准确率,但它并不具有普适性:数据源空间和目标空间都太小了。我们都知道,目前最新或者使用最多的语音识别模型是深度学习模型。但在那之前?举个典型的例子:开复老师的博士论文《隐马尔可夫模型》发表于大约30年前,如下图所示:简单来说,就是一个时间序列模型。有时间状态,隐藏状态,然后是观察状态。比如我有两个骰子,一个六面体的骰子,从1到6。一个四面体的,从1到4。两个骰子切换的概率是0.5。现在给定一个极端序列111122224441111555566666666,你认为哪一段是四面体骰子,哪一段是六面体骰子?同样,当我听到一个声音,我想知道背后隐藏的句子,原理和掷骰子一样:根据观察到的状态(声音)推断出隐藏状态(文本)。这些概率模型非常有效,以至于今天仍有许多人在使用它们。根据ChatbotAPI的人为干预量,推理引擎的实现大致可以分为两类。一种是手动定义规则,另一种是自动从数据中学习规则。对于前者,我们都知道wit.ai和api.ai是两个著名的chatbot开放API,分属于Facebook和Google两大巨头。先来看看效果:这里的+是打分,机器准确理解了人的意图。o表示没有分数,机器不理解。我们可以看到性能没有预期的那么好。一些非常简单的“我想订披萨”的情况没有得分,这离普通人的智能还差得很远。那么其背后的逻辑是什么?举一个api.ai的例子,我们会定义不同的类型和变量,然后将它们与相关的值和答案联系起来。因此,在与用户交互时,可以根据已知的(人为定义的)规则存储相应的值,并调用相应的方法。您可能会觉得英语阅读速度较慢。这里有中文版的api.ai——一格.ai。这不是广告。多亏了朋友,我才知道这个平台——有一天他来找我说:要收!你知道吗,有一个交友网站是用人工智能代替女性用户来和人聊天的!随后,官方辟谣表示不会这样做。但是,yige.ai对初学者的友好程度确实是我在中文聊天机器人API中见过的最好的之一。但是如图所示,我们仍然需要手动定义很多东西,包括词库、场景、规则、动作、参数等等。在像买鞋这样的小场景和一定范围内的交互预期中,这对于大多数人来说还是可以接受的。毕竟简单直观,准确实现了“十分钟打造属于你的聊天机器人”的需求,更何况还需要强大的计算资源和数据量。但是我们不太可能在这样的系统中获得定义域之外的知识。如果我们有足够的时间和人力,可以有一些专门领域的专家来完善这个题库,这样搜索的准确率会很高。因为所有可能的问题都已经有了专业的答案。但是,当场景复杂的时候,做这件事的工作量就会变成很大的压力。所以,我们需要深度学习。为了在深度学习中取得良好的性能,有两个先决条件。一是足够的计算资源,二是海量的数据。计算资源就不用说了,如果没有GPU,训练图片/语音等非结构化原始数据的时间基本需要“周”。数据集设计关于大数据,一个很常见的问题是,多大才算太大,学术观点是:大到足以包含区分目标值所需的所有特征——我们都知道在实践中,这句话的话基本上都是废话。所以比如说,一般来说,要训练一个语音识别模型,数据是以千小时为单位来计算的。而且遗憾的是,很多商业公司的数据集基本上是不公开的。那么对于小型初创公司和自由研究人员来说,数据从何而来?作者整理了一些可用于自然语言处理和智能问答的公共数据集。限于篇幅和话题,这里就不多说了。另一天将专门介绍免费提供的公共数据以及如何将在公共数据集上获得的模型迁移到您自己的问题领域。这里我们以斯坦福大学著名的问答数据集SQuAD为例,它堪称业界最好最典型的衡量问答系统的数据集。我们在高中时可能都做过阅读理解,一篇文章有??几个问题和从文章信息中得出的答案。那么有了这样的数据集,我们能做什么呢?这样的数据集训练出来的模型能解决什么样的问题呢?在每个问题中,人的表现和机器的表现有什么区别??为什么?我们很高兴地看到,在***发表的一篇基于r-net的论文中,机器的性能已经可以媲美人类了。人类在此数据集上获得的EM分数约为82.3,F1分数约为91.2。微软发布的该框架的EM分数高达82.1,与人类相差不到0.2%。深度学习很好。有了数据和计算资源,模型从哪里来?我们很高兴看到算法在进化,随着技术的进步,人为干预越来越少。在DeepMind于2017年12月5日发布的最新版本中,AlphaZero击败了使用一堆特征而不使用任何人工特征的前辈AlphaGo,也击败了人类积累了数??千年的真龙棋局。直观上,在图像识别的深度网络中,计算机很难理解原始图像像素值的含义,但神经网络每一层的权值实际上学习了图像的高级特征。神经网络的层数越高,组成就越具体。第一层可以通过比较像素的亮度来识别边缘。基于此,第二层可以检测角的集合,第三层可能是小的彩色气泡或表面,第四层可能更复杂,比如嘴巴。对象,下至可能更具体的特征,下至对象本身。神经网络和人脑一样,对原始信号进行逐层处理,最后从部分到整体抽象成我们感知的对象。图中展示的是一个从图像到物体的感知过程,或者说是一个从图像到标签列表的映射模型。speech-to-text或question-to-answer也是如此,sequence2sequence可以作为学习模型设计。无论是上面提到的api.ai还是yige.ai,规则和变量都倾向于手动定义。机器会对未定义的语法规则给出一些通用的支持,但是正如我们所看到的,一旦遇到定义域之外的交互场景,其性能就很难令人满意。而在端到端的识别中,我们不关心所有的语法和语义规则,所有的输入直接指向问题,所有的输出直接是答案。当有足够的数据时,我们可以实现端到端的识别,而不受手动定义的语义规则的干扰。这件事既是好事也是坏事。基于人工规则的机器永远无法超越人类,但纯粹基于数据的机器学习模型却可以战胜人类——这在AlphaGo的无敌性中得到了证明。如图所示,seq2seq模型可以参考2014年Sutskever在NIPS发表的一篇文章进行设计,该模型使用递归神经网络每次读取一个token作为输入,预测响应的token。我们假设第一个人说ABC,第二个人回答WXYZ,那么模型会建立一个从ABC到WXYZ的映射。模型的隐变量,我们可以称他为“思想向量”,说明机器理解了这个ABC的思想,或者说概念。该模型在简化性和通用性方面都非常出色,下面的实验也证明了这一点。下图是LSTM(一种神经网络)生成的翻译结果示例。可以参考结果,与百度翻译和谷歌翻译进行对比。深度学习Chatbot的开源实现相信通过前面的介绍,大家对会话交互系统和已有的API有了初步的了解,所以剩下的想自己实现模型的朋友,感谢github和arxiv,我们在源代码和原理层面都可以知道今天最聪明的人在做什么。这里介绍一个有代表性的开源框架,纯基于seq2seq,通过机器学习实现,没有任何人工规则干预。一贯Google的风格,整个代码在TensorFlow和python3.5上实现,支持各种开源数据库和定制对话数据库,甚至还有本地web界面。有现成的权重文件可以下载(不需要费时的训练),我们可以很方便的通过TensorBoard监控系统的性能。虽然部分对话的表现不尽如人意,但存在对同一问题在上下文中回答不一致等问题。明显的bug离通过图灵测试还差得很远,但是它的设计原理和实现方法对初学者来说真的很友好。至少,这个模型告诉我们,深度学习模型可以自动从嘈杂的开放领域中提取相应的知识,并自动生成答案。总结与展望综上所述,如果我们有更多的领域专家和业务分析师,业务中需要会话交互设计的场景相对有限,变量关系相对简单,那么毫无疑问,各类聊天机器人的API将是您的最佳选择——它设计直观,界面简单,易于集成,而且在大多数情况下,它在特定问题上的准确性会高于端到端深度学习。如果我们有更多的数据科学家和大数据工程师有兴趣用机器学习数据中的规则,业务场景更复杂,我们需要支持更多的非结构化原始数据和自动特征提取和规则,那么我建议你趁机深入学习,搭建属于自己的智能问答系统。【本文为专栏作者“ThoughtWorks”原创稿件,微信公众号:Thinkworker,转载请联系原作者】点此查看该作者更多好文