如何搭建一个智能客服(三):NLP 里实体信息的抓取与应用

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

前面两篇说了用户意图拆分与识别,和基于此设计的多轮对话流程。这一篇接下去讲自然语言处理(NLP)中实体信息的抓取和在产品中的应用,也是如何搭建一个智能客服系列的第三篇。

如何搭建一个智能客服(三):NLP 里实体信息的抓取与应用

你或许思考过,AI是怎么听懂人说话的呢?——当我在商场,跟商场的机器人说我要去三楼,它是怎样听懂我的意思的呢?当我说去NARS,它怎么知道NARS是什么,是在哪里?

想知道以上问题的答案,那么就要说叨说叨实体(entity)了。

首先,实体信息是什么意思呢?

它表示关键性的信息,通常可以分为两种, 一是与业务基本无关的, 可以算作通识的信息,比如手机号、邮箱、日期、时间; 二是与业务相关的, 根据实际场景定制的。

怎么理解呢?接下来我将举例说明。

01 与业务基本无关的

举个栗子,第一个场景,当你需要预订一张机票,假设你会这样说:

帮我订张明天的机票,从北京去上海,下午起飞的那种,我电话13344445555,行程单发我邮箱yuanquaner@woshipm.com

好的,已为您找到如下符合条件的航班……

在这个场景中,‘明天’和‘下午’就是时间信息,‘北京’和‘上海’是地点信息,‘13344445555’是手机号。因为这些信息可以说是通识,不随业务而改变,所以 一般会内置到算法中去,识别并做对应的转换。

在上面的场景中,AI端会先识别出日期和时间,然后把‘明天’转换为‘2020年3月27日’,‘下午’转换为‘14:00-18:00’,再与其他信息合并,由数据端向航空公司发起请求,再告诉你返回的结果,即符合条件的航班列表。

这个 识别环节 听起来是简单的,因为人类在语言学习的过程中已经能够条件反射出什么是日期、什么是手机号、什么是地点。

但是对AI而言,起初这些东西都是一样的字而已,需要大量的算法来区分与提取到这些信息。这里的识别率与算法设计时对语言理解的丰富度息息相关。

比如说,一开始是对‘明天’‘昨天’做了识别,而忽略了‘前一天’‘后一天’的表达;或者一开始做了‘2020年2月2日’,而忽略了‘2020年二月二日’的表达,就会直接拉低识别率,具体的表现就是……智障率升高。

转换这一步中,有个很有意思的点:

人们用自然语言表达日期时间等信息时,其实是不完全符合标准逻辑的。

比如说,当你在晚上00:10分跟智能助手说,“订个明天的闹钟”,这里的“明天”大概率已经是算“今天”了。

当你在2020年1月里,跟智能助手说,“查查12月的账单”,你其实是在讲2019年的12月。这些语言表达习惯都应该考虑进去,才能让智能助手“感觉像个人”。

Siri在这里做的很好,订闹钟的场景,它会再确认一句“请问你是说订今天早上8点的闹钟吗?”

02 与业务相关的

收回来说第二个场景,结合业务出现的实体。

继续举栗子,当你要买一杯奶茶,你通过智能助理完成这个操作,那么对话应该是这样的:

我要一杯奶茶,一点点的,大杯四季奶青,全糖,加一份红豆,不加冰。

好的,已下单。

这里面,‘一点点’是奶茶品牌,‘四季奶青’是奶茶商品名,‘大杯’是份量,‘全糖’是糖度……

由于它们是完全依托于业务的表达,离开这个场景则这些词不再有意义。

比如你在跟别人聊天气的时候突然说一句“一点点哦”,对方是听不懂的。它不像“北京”这种词,北京永远是北京。

所以这种信息就是我说的,要根据实际场景定制的,也就是说,我需要告诉AI,什么是奶茶品牌、什么是奶茶商品名、什么是份量……

怎么告诉它呢?

一般有三种途径:字符串匹配,正则表达式,标注。

1. 字符串匹配

字符串匹配,即定义一个实体信息的合集,适用于固定出现的字段。说起来比较晦涩,我用伪代码(因为不会写真代码)形式写一下就清楚了。在买奶茶的场景中,对奶茶品牌和商品名等实体信息的定义可以这样写:

“奶茶品牌” = [ ‘一点点’, ‘喜茶’, ‘乐乐茶’, ‘奈雪的茶’ ]

“份量” = [ ‘大杯’, ‘中杯’, ‘小杯’ ]

“商品名” = [ ‘四季奶青’, ‘红茶玛奇朵’, ‘芝士芭蕾’ ]

这样,当用户说到了其中一个项,AI就可以知道对方在讲什么了。

2. 正则表达式

正则表达式,即定义一个实体信息出现的规则,适用于有规律出现的信息。以车牌号为例,常见的形式为省份缩写(一个汉字)+一位字母+五位数字,依然用伪代码的形式表达,如下:

“车牌号” = [京沪鲁浙……津豫赣]{1}[A-Z]{1}[0-9]{5}

#意思是从省份缩写中的一个字+一个大写字母+5个阿拉伯数字

同理地,我们可以用这种方式定义其他有规律的词汇,像设备批号,身份证号,手机号,订单号,诸如此类。

讲到这里,你可能想说,这两种办法一点都不AI嘛。那么……朋友你说的没错我也这么认为!不过途径只是途径,AI也不是目的,而是为了实现最终与人对话的效果。所以来看很AI的第三种吧。

3. 标注

标注,即对表达某一个意思的语句进行标注,从而让机器学习到某一个意思,适用于不固定也不规律的表达。

以笔者工作里的一个场景来说,有车贷或房贷的用户,经常会来咨询,自己还完了多少钱,自己还剩多少钱要还。那么我稍微整理了一些出现过的表达方式,如下:

我还了多少钱了?

我已经付掉多少贷款了?

我还完了多少贷款?

有多少贷款是还上了的?

我已经还了多少款?

我的贷款还清了多少了呢

我还有多少钱要还啊?

还剩多少贷款要付?

还有多少贷款得付?

我还要付多少钱呀

很明显地,这些表达即不会用固定的名词,也没有可以写成正则表达式的清晰规律。但是可以用语义上清楚地看出来用户在问什么,所以这里采用标注的形式把意思标出来。

我们定义还完了多少钱的概念为=”已还”,还剩多少钱要还的概念为=”剩余”,括号起来的为标注的位置:

我[ 还了多少钱] 了?——“实体”=“已还”

已经[付掉多少 贷款]了?——“实体”=“已还”

我[ 还完了多少] 贷款?——“实体”=“已还”

有[ 多少贷款是还上了] 的?——“实体”=“已还”

我已经[ 还了多少 款]?——“实体”=“已还”

我的贷款[ 还清了多少] 了呢——“实体”=“已还”

我[ 还有多少钱要还] 啊?——“实体”=“剩余”

还[剩多少贷款 要付]?——“实体”=“剩余”

还[有多少贷款 得付]?——“实体”=“剩余”

我[ 还要付多少]钱 呀——“实体”=“剩余”

在完成了大量以上类型的标注后,当用户再问到相同的问题,AI大概率上就能识别到对应的实体信息,那么就可以继续“像个人一样”地进行对话了。

在实际的落地场景中,提取的途径并不是唯一的,也不一定是固定的。具体采用哪种方式来实现需求,是基于PM对技术方法的了解和对业务背景的熟悉而做判断。究其根本,一切都还是为了用户需求而服务。

好了今天的内容就到这里~下一篇主题是怎样让AI更像人——伪装的智能感。感谢观看!

 

本文由 @一个圆圈儿 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

随意打赏

提交建议
微信扫一扫,分享给好友吧。