首页 > 其他分享 >如何让你的客服问答系统从“人工智障”到“人工智能”

如何让你的客服问答系统从“人工智障”到“人工智能”

时间:2023-06-25 18:05:21浏览次数:40  
标签:人工智能 问答 问句 查询 智障 大庆 科室 自然语言 HanLP


前段时间接手了公司遗留的一个所谓“智能客服机器人”的项目,改进了之前团队的“人工智障”设计,颇有收获。今天是 1024,程序员节。我们就来整点干货,八一八整个项目的血泪教训。

 

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器

这个项目是给某医院做的自动客服系统,对接了微信公众号,要求能回复一些固定种类的问题。比如:

1. 住院部在几楼?(问路)

2. 帮我预约一下张医生门诊(预约)

3. 查询刘医生主治的内科病人(查询)

……

当然,实际种类有十几个,就不一一列举了。

当我拿到上任“资深自然语言处理架构师”老胡发给我的代码时,我的内心是拒绝的。这并不是因为他没有头发,而是因为这些代码太“硬”了。几乎所有逻辑都是硬编码进去的,基本流程如下:

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_02

基本流程就是正则匹配问句,根据匹配上的正则表达式判断问题种类,然后执行相应逻辑。包括查询相应的数据表或 ElasticSearch 索引,或者向业务系统请求预约等。当然,实际代码里正则表达式比这个复杂一百倍,毕竟这套系统上线了好几年,收获差评数万呢。差评原因无非以下四个方面:

1. 问句种类匹配不准,比如“查询刘医生在内科主治的病人”会同时匹配到“问路”和“查询”两个类型。旧系统又编码了很多优先级规则,一团乱麻。我猜这团乱麻是老胡呕心沥血用自己头发编织出来的。

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_03

2. 问句成分匹配不准,用户输入千奇百怪。比如“张医生”“张主任”“ 张大庆”“张大庆医生”,我看搜索日志,还有用户爱称“张神医”“大庆”“大庆医生”的,也不嫌肉麻。用户随便输入,但旧系统硬编码的名单都是真实姓名,匹配不上各种称呼。另外,每次新医生入职,要过好久才对接名单更新。

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_04

3. 不支持多轮对话。用户经常没法一次性输入全所有信息,比如“帮我查一下刘医生的病人”,但是检索系统又要求必须指定科室。这时候旧系统就只能回复“请同时指定医生和科室”。用户于是回复“就是内科啊”,可这次旧系统居然匹配上了问路的正则表达式,于是返回了去内科怎么走。这下用户就被彻底被激怒了,体验极差。特别是这种查询功能一般都是医院的大领导们用的,听说间接导致了老胡的离职。

4. 检索系统搜索不准。即使“张大庆”被正则匹配上了,但在检索系统中却被切分成“张+大庆”,导致结果第一条是“住院部挂着一张大庆油田的风景画”,完全答非所问。旧系统好像用的是什么 IK 分词器,错误百出。我虽然不是科班出身,但是一看专业教材就浑身难受。

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_05

我还是找到了一些资料,并且根据这些资料将系统重新设计了一下。这种客服系统属于自然语言处理领域,学名应该叫任务型问答系统,基本就包括“意图分类”“槽识别”和“业务逻辑”三个模块,如下图所示:

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_06

其中,意图指的就是问题的类型,槽指的是每种意图中的特定名词。比如在问路型意图中,科室名称“内科”“耳鼻喉科”就是槽。也就是说,意图分类和槽识别代替了正则表达式,提供了更精确的结果,解决了 bug① 和 ②。

具体实施的时候,我自豪地面向开源项目编程,直接用了 HanLP 中的文本分类器和命名实体识别做意图分类和槽识别,一步到位不要太爽。

HanLP 是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP 具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法分析、文本分类和情感分析等功能。被广泛用于 Lucene、Solr、ElasticSearch、Hadoop、Android、Resin 等平台,有大量开源作者开发各种插件与拓展,并且被包装或移植到 Python、C#、R、JavaScript 等语言上去。项目详见:https://github.com/hankcs/HanLP

所谓文本分类器,就是给定一段文本,HanLP 自动判断类别。怎么个判断法呢?HanLP 怎么知道你要判断医院的“问路”“查询”“预约”还是新闻网站的“经济”“财经”“教育”呢?这时候就需要用户提供一些例子给 HanLP 学习,这些例子在自然语言处理里面叫语料。不是随便什么爬虫爬下来的文本都是语料,必须得有具体业务所需要的答案才行。

比如,在医院的人工客服系统中,累积了很多用户的查询问句,以及客服小姐姐给查询语句打的标签(问路、查询还是预约)。这些问句+标签就是文本分类的语料,可以直接丢给 HanLP 让它学习。

学习得到一个文件,储存着如何把问句分类为“问路型”“查询型”“预约型”等等类别的知识,这个文件叫做模型。存起来丢给线上的 HanLP 分类器加载一下就可以执行分类了。这里比较推荐基于 SVM 的文本分类器,据说速度和准确率都是最高的。

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_07

所谓命名实体识别,就是识别人名、地名、机构名之类专有名词的工具。我这个医疗客服系统里面主要就是医生的姓名了。听说 HanLP 的感知机分词器是在一亿字的语料库上训练出来的,准确率的确不知道比其他同类工具高到哪里去了。

HanLP 分词结果中,人名的词性标签是 nr,根据这个就拿到了医生姓名。至于科室名,HanLP 虽然能分出来但是词性标签就是名词 n。我的做法是把老胡正则表达式中的科室做成词典,指定词性为 ndep 交给 HanLP 挂载就行了。反正科室是一个很死板的东西,不会经常变化,一本用户词典管十年基本没毛病。

新系统 2.0 上线后调查数据显示,用户满意度果然提高了不少。搞搜索引擎的小伙伴听说了也把他们 ES 的 IK 分词器也换成了 HanLP 分词器,效果拨群。这样 bug④ 也解决啦。

后来领导看我这么快就把新系统上线了,马上给我发了奖金,马上给我派了新活儿——让我把院长上次提的多轮询问实现一下。这说明交差不能太快,闷声才能发大财啊。

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_08

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_09

根据资料,多轮对话的管理必须有一个对话管理器,负责综合对话历史和当前对话决定回复什么。在这个项目中,其实就是一个缓冲区的作用。当一句话里面的槽不全的时候,应该把这句话的意图和槽缓存起来,然后向用户询问更多有关缺失槽的信息。这样问答系统才更有意思,不仅负责回答问题,还能够向用户提问,帮助他们提出更准确的问题。

对话管理器的流程如下:

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_10

当然实际的对话管理器比这个复杂,有些问题涉及到好多槽,有时候对话的话题又会变化,总之还是需要消耗一些头发的。

3.0 上线后我以为项目总该庆功了吧,不料我还是太年轻。吹毛求疵的客户又报了几个工单上来,虽然相比旧系统少了很多,但总得给人解决吧。这次的问题是有些意图的区分度非常低,比如“查询张大庆负责的科室”和“查询科室负责的张大庆”这两个问句分别是要查“科室”和“张大庆”,但分类结果却是一样的。我找了找资料,原来分类算法使用了一种叫词袋模型的方法建模文档。词袋模型最大的问题是忽略了文档单词的顺序,也就是说,这两句话在词袋向量看来,都是下图的无序集合:

如何让你的客服问答系统从“人工智障”到“人工智能”_分词器_11

我动脑筋想了想,解决办法有两个。一是在分词的时候把相邻的两个单词组合起来形成一个“新单词”,这样就在一定程度上保留了文档的语序。二是利用 HanLP 的句法分析得出问句的语法结构,把语法结构作为一种特征信息提供给分类器。

比如“查询张大庆负责的科室”的语法结构如下:

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_12

查询的宾语是“科室”。

“查询负责科室的张大庆”的语法结构如下:

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_13

查询的宾语是“张大庆”。

我通过自定义 HanLP 的分词器和重载文本分类接口分别实现了两种方法,然后将语料划分为训练集和测试集。结果在测试集上第二种方案的准确率更高,说明句法分析对这种短文本分类还是有一定疗效的。至此,这个“智能客服机器人”项目基本一致好评,圆满庆功了。

啊哈!是不是突然觉得自然语言处理还是很有趣的。如果你问我是哪个师傅带我进门的,那可绝对不是老胡,是这本《自然语言处理入门》。这大概是市面上最友好的 NLP 入门书了,都是白话讲解,没有故弄玄虚的数学公式,另外还配备产品级代码。你不需要熬夜琢磨,地铁上也可以读懂,更重要的是对你的头发有好处。

如何让你的客服问答系统从“人工智障”到“人工智能”_自然语言处理_14

如何让你的客服问答系统从“人工智障”到“人工智能”_文本分类_15

(点击封面,即可抱回家)

Java 与 Python 双实现

助你零起点上手自然语言处理

本书作者是自然语言处理类库 HanLP 作者何晗。截至 2019 年 10 月初,该项目在 GitHub 上 Star 数已达 15 K,超过了宾夕法尼亚大学的 NLTK、斯坦福大学的 CoreNLP、哈尔滨工业大学的 LTP。

作者汇集多年经验,从基本概念出发,逐步介绍中文分词、词性标注、命名实体识别、信息抽取、文本聚类、文本分类、句法分析这几个热门问题的算法原理与工程实现。书中通过对多种算法的讲解,比较了它们的优缺点和适用场景,同时详细演示生产级成熟代码,助你真正将自然语言处理应用在生产环境中。

呐!HanLP 1.7.5 发布了,最后我们就来一起回顾下它的成长的历程。希望今天 1024 程序员节,大家能无 bug 早下班。

题图来源:动漫《Chobits》

如何让你的客服问答系统从“人工智障”到“人工智能”_文本分类_16


标签:人工智能,问答,问句,查询,智障,大庆,科室,自然语言,HanLP
From: https://blog.51cto.com/u_15767091/6547473

相关文章

  • 【人工智能技术专题】「入门到精通系列教程」零基础带你进军人工智能领域的全流程技术
    前言人工智能是一个庞大的研究领域。虽然我们已经在人工智能的理论研究和算法开发方面取得了一定的进展,但是我们目前掌握的能力仍然非常有限。机器学习是人工智能的一个重要领域,它研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并通过重新组织已有的知识结构来不断提......
  • 数字化身:未来的个人化人工智能
    第一节:引论随着人工智能技术的发展,我们正在步入一个人人都能拥有自己数字化身的时代。数字化身是一个模拟个人思维方式、行为习惯和语言风格的人工智能。它们可以代表我们在各种场合发言,也可以与其他智能体进行互动。这样的概念听起来像科幻小说,但实际上它们正在逐步成为现实。......
  • 北京打响大模型地方战第一枪:公布通用人工智能发展21项措施
    作者 |  李水青智东西5月16日消息,近日,《北京市促进通用人工智能创新发展的若干措施(2023-2025年)(征求意见稿)》(简称:“措施”)公布,从算力、数据、算法、应用、监管五大方向,对北京大模型发展提出了21项措施,于5月12日至5月19日面向公众征集意见。这是国内首个地方政府紧贴AI大模型产业......
  • 绝对干货推荐-人工智能本科学位的完整4年课程规划
       对于想要入坑人工智能和机器学习领域的本科生而言,应该如何规划自己的四年大学生活,为你将来的职业做好准备呢?本文给出了一个四年制人工智能本科学位设计完整的课程规划,需要的朋友可以仔细看看。    这些课程旨在为人工智能和计算机科学领域的新手,提供广度和深度的知识......
  • 人工智能本科学位的完整4年课程规划
       对于想要入坑人工智能和机器学习领域的本科生而言,应该如何规划自己的四年大学生活,为你将来的职业做好准备呢?本文给出了一个四年制人工智能本科学位设计完整的课程规划,需要的朋友可以仔细看看。    这些课程旨在为人工智能和计算机科学领域的新手,提供广度和深度的知识......
  • 观点问题如何练就“火眼金睛”?百度人工智能开源大赛开启报名
    无数渠道来源的大量信息喷涌而来,如何准确辨识真假? 各路观点混杂,如何迅速抓住重点,进行是非观点判断? 随着5G时代的进一步提速,百度、知乎、微博、公众号、百家号等信息渠道的越来越丰富,人们在获取信息更方便和获取信息量激增的同时,也面临着信息质量良莠不齐、观点驳杂的情况,如何对信......
  • 2020年最值得阅读的10本人工智能相关书籍
        尽管我们都可以通过快速的YouTube视频或博客文章来学习,但是全神贯注于阅读一本好书有时还是不错的。因此,整理了一些最近深度学习“必读”的翻页书,以备你在世界读书日阅读!       1. GirlDecoded    RanaelKaliouby和CarolColman   Affectiva首席执行官......
  • 斯坦福2020年免费新课-CS221人工智能原理与技术-视频、ppt、参考书籍分享
        分享一套斯坦福大学在2020年初,2019年底放出一门免费精品课程-人工智能原理与技术课程,对于对于春节想要系统学习人工智能知识朋友绝对不容错过。课程介绍    这门课主要讲什么?网络搜索、语音识别、人脸识别、机器翻译、自动驾驶和自动调度有什么共同之处呢?这些都是复杂......
  • 【人工智能技术专题】「入门到精通系列教程」零基础带你掌握人工智能全流程技术体系和
    前言人工智能是一个庞大的研究领域。虽然我们已经在人工智能的理论研究和算法开发方面取得了一定的进展,但是我们目前掌握的能力仍然非常有限。机器学习是人工智能的一个重要领域,它研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并通过重新组织已有的知识结构来不断提......
  • 独家专访:OpenAI 的 Sam Altman 谈 ChatGPT 以及通用人工智能如何“打破资本主义”
    作为OpenAI的首席执行官,SamAltman领导的这家初创公司是正在快速增长的生成式AI行业中最热门且最受关注的一家。在1月中旬参观了OpenAI的旧金山办事处后,福布斯采访了这位最近不太愿意在媒体上抛头露面的投资者和企业家,讨论了ChatGPT、通用人工智能、以及该公司的人工智能......