技术在对话系统中的应用实践
作者:桑海龙 AICUG人工智能社区
浏览器不支持该媒体的播放 :(
导读: 在58同城C端用户和B端商家IM微聊在线沟通场景下,我们应用对话机器人打造了商家智能聊天助手,对话机器人通过与C端用户沟通获取商机反馈给B端商家。在人机对话过程中我们需要识别出电话、地址、时间、服务对象等商机信息。本次议题将重点分享对话场景下的NER技术实践,首先介绍模型选型,然后介绍数据增强、模型融合、对话上下文引入等调优经验。
嘉宾介绍: 桑海龙,58同城AI Lab算法高级工程师,2019年10月加入58同城,目前主要负责智能客服算法研发工作。2017年硕士毕业于哈尔滨工业大学,曾就职于猎豹移动,从事多轮对话算法研发。
01 背景
一、58同城生活服务平台简介
58同城是国内最大的综合性分类信息平台,业务覆盖房产、招聘、生活黄页、二手车等多个领域,平台连接着大量C端用户和B端商家用户。黄页领域为用户提供各种生活服务信息,比如找保姆、进行二手交易,商务租车等等。平台的业务模式是:商家发帖,用户浏览帖子,通过平台建立连接,最终达成服务。在服务过程中,所有用户在平台遇到使用问题时都会咨询58人工客服,C端用户和B端商家也会通过IM微聊进行大量的沟通,单纯依靠人工沟通会耗费巨大的人力资源。
在C端用户和B端商家通过IM微聊在线沟通时会遇到很多痛点,具体如下:
(1)商家回复不及时,导致商机流失严重
(2)服务成本高,商家服务话术不标准
(3)聊天分流不均匀,人工客服账号只能接待其绑定的商家对应的用户
二、黄页商家智能聊天助手
我们自2017年开始研发了58智能客服系统,提供自动问答机器人、人工IM在线沟通和智能辅助聊天整套解决方案,已被广泛应用于58同城各业务客服团队和用户沟通场景,大大节省了客服人力。鉴于C端用户和B端商家通过IM微聊在线沟通存在前述问题,2019年,我们将智能客服应用于58平台C端用户和B端商家IM在线沟通场景,打造智能客服商家版平台,为B端商家提供智能聊天助手,提高了商家获客效率。
下图展示了黄页微聊代运营这一典型场景的业务模式,当用户在微聊内向B端商家咨询服务时,会经过智能路由根据目前坐席情况进行自动问答承接方的分配,分配给人工坐席或AI机器人。当前咨询若分配给AI机器人时,机器人可以根据商家帖子内容回复用户的业务咨询,并利用多轮对话技术主动对用户进行商机(如手机号、地点、预期价格等信息)引导和识别,当机器人识别出商机后会将商机信息同步给B端商家,以助力B端商家成单。从而提高了商家获客效率。
三、AI技术作用于商业,纯服务带来收入
黄页商家智能聊天助手包含在各个生活服务会员套餐当中,不同价位的生活服务会员套餐具有不同的服务功能和服务次数,这是AI技术作用于商业,纯服务带来的收益。下图展示了一些可选的生活服务会员套餐。
02 NER技术应用实践
一、任务型对话系统架构
通常任务型对话系统(taskbot)由自然语言理解(NLU)、对话状态追踪(DST)、对话策略(DP)和自然语言生成(NLG)四个模块构成。在我们的对话系统架构中,将对话状态追踪与对话策略两个模块一起建模为对话管理(DM)模块。在初始版本我们实现了基于有限状态机(FSM)的采用节点配置的对话管理系统,将对话配置抽象为四种节点,可以高速快捷的配置对话流;由于配置具有的局限性,后续我们在部分类目上采用强化学习构建对话管理器,也取得了不错的效果。下图展示了整个对话系统的架构以及一次交互的发生过程:
在上述对话系统,NER技术通过识别实体,为整个对话系统提供必要槽位信息,同时收集这些信息也是整个对话系统的核心目的。
在黄页微聊代运营场景中,需要识别各类商机信息,尤其黄页下大量的业务线所需要的商机信息皆不尽相同,如:“保姆月嫂”类目需要知道服务对象商机,而“奢侈品回收”业务线需要知道品牌商机……但是所有的类目均需要用户的联系方式,因为B端商家与C端用户沟通的目的在于最终成单,而这一过程需要能够与用户更直接的联系渠道。所以我们将商机分为核心商机与丰富度商机两种类型。
- 核心商机(联系方式)
电话、微信
- 丰富度商机(46类)
地址、时间、物品名称、服务对象……
二、NER技术实践历程
在业务需求初期,需要快速上线商机识别功能,具备识别能力以满足需求,且在初始阶段由于缺乏标注训练数据,难以开展模型训练并部署上线,因此我们采用正则结合词典的方式,进行了快速上线与优化迭代;在中期积累了一定的标注数据之后,我们尝试采用NER模型进行商机识别,进行了一系列的模型选择与优化工作,最终达到上线状态;最后为了结合二者的优点并进一步提升效果,我们尝试了一些融合与探索实验。
NER任务是一个序列标注任务,序列标注就是给句子当中的每一个词打上标签,而后提取出我们所需要的关键词;标签的格式通常有IOB2和IOBES两种标准,我们的NER构建时最终选取了IOB的方式,标签的含义具体如下:
三、NER算法选型
在积累了一定的标注数据之后,我们尝试采用NER模型进行商机识别任务。我们尝试了几种业界通用的基于深度学习的NER模型,如BiLSTM+CRF、IDCNN+CRF、BERT等模型,并在此基础上进行了一些对比实验,最终选取IDCNN+CRF作为我们的线上模型。
1)、NER模型之BiLSTM+CRF
BiLSTM是NLP任务中常见的深度学习模型,它具备强大的捕获句子全局信息的能力,同时通过各种门机制的添加,有效避免了原生RNN模型存在的梯度消失问题,但其对局部信息的感知也不强。将BiLSTM应用于NER当中,采用BiLSTM模型提供表征能力,在其后添加CRF层,以防止出现非法的序列标记结果,从而构成了BiLSTM+CRF这一经典命名实体识别架构,其整体结构如下图所示:
2)、NER模型之IDCNN+CRF
在IDCNN+CRF模型结构中,待识别query先经过Embedding层获取向量表示;然后经过空洞卷积层(IDCNN),IDCNN通过空洞卷积增大模型的感受野, 相较于传统的CNN,IDCNN能够捕捉更长的上下文信息,更适合序列标注这类需要全局信息的任务;在IDCNN之后经过一层全连接神经网络(FF层)后引入CRF,同样CRF的目的在于防止非法槽位标记(BIO)的出现。其模型结构如下所示:
3)、NER模型之BERT
BERT是2018年谷歌提出的预训练语言模型,初现于世间变革新了NLP之路。它采用transformer的结构,通过MLM和NSP两项任务对大量无监督预料进行预训练,以提取语言本身的知识。而后在下游自然语言处理任务上只需要进行少步数的finetune即可取得梦幻般的SOTA效果,一问世便刷新了各项NLP任务的最好结果。采用BERT进行NER任务只需要在每个token对应的位置后接上softmax即可。其具体架构如下:
4)、NER模型之CRF的作用
在上述模型中,在NER任务上,我们看到很多深度学习之后都会接上一层CRF,那么CRF在整个过程中到底发挥着什么样的作用呢?通常我们直接使用逐帧softmax时,是将序列标注过程作为n个k分类问题,相当于每个token相互独立的进行分类(假设深度模型内部交互不明显的话),而采用CRF实质上是在进行一个k^n分类,相当于直接从所有的序列空间里找出转移概率最大的那条序列。其实质上是局部最优(token最优)与全局最优(序列最优)的区别,因而采用CRF能够有效避免出现非法的序列标记,从而确保序列有效。下图展示了一个softmax导致序列标注异常的案例。
5)、NER模型之效果对比
在展示了上述几种模型的结构之后,我们进行了一些实验来对比各个模型的效果,以BiLSTM+CRF作为基线模型(ACC达到89.21%),具体如下:
① IDCNN与BiLSTM效果相差不大,但IDCNN推理耗时(4核心cpu情况下<9ms)更小;
② BERT+softmax取得了同组最好的模型效果。这说明BERT之上再接深度学习复杂结构(甚至是CRF),效果反而不好,推测是由于拟合能力太强得不偿失;
③ BERT+softmax推理耗时(接近100ms)与浅层模型相差巨大。可以通过缩减层数与隐层大小来降低耗时,但是效果同样会打折扣;先前我们在分类任务上的实验表明,随“剪枝”程度变化,bert效果通常会降低两个点以上。
在权衡了效果与耗时之后,最终我们选择了IDCNN+CRF作为我们的线上模型
四、NER模型效果优化
在采用NER模型识别商机之后,我们首先进行了数据分析的工作,首先在项目初期启动阶段,我们所能获取的标注数据十分有限,尤其是含有商机的标注数据很少;其次在有限的标注数据中,不同商机的分布也存在着严重的不均衡问题,少数商机只有屈指可数的带标签数据;最后,NER序列标注任务本身也存在着token的label不均衡问题,IOB标注准则必然导致大量O标签数据。针对这些问题我们进行了一些优化方案的尝试。
1)、模型优化之数据增强
针对启动阶段存在的数据不足问题,首先我们想到了采用数据增强的方式来补充训练数据,尤其是对含有商机实体的数据进行增强;同时,采用数据增强同样也可以缓解不同商机分布不均衡的问题,我们可以优先或者说更多的增强少数据商机的训练数据。对于数据增强的方式,我们尝试了如下两种方案:
- 同标签token替换(LwTR)
采用二项分布概率对句子进行采样,概率替换某位置的token为同标签其它token,如果token长度不一致,则进行延展,句子长度发生变化。
- 同义词替换增强(SR)
采用二项分布概率对句子进行采样,概率替换某处分词为同义词/领域词词典的其它词语,如果某词为标记词,则词语整体采用标记。
由上图我们可以发现,上述数据增强过程依赖实体词典的取值,并且在启动阶段也存在着词典取值稀缺的问题,补充词库同时可以提升规则词典识别的效果,因此,我们需要一套完整的词库构建与扩充过程。我们采取的词库构建与更新方式如下图所示:
其中的核心在于同义词/领域词的补充和挖掘,在实际的业务场景中,我们有人工获取和机器挖掘两种方式补充,具体如下:
- 人工获取方式—人工客服会话中上报的商机数据
- 人工获取方式—编辑人员每周线上评测标注数据滚入
- 机器挖掘方式—使用百度百科对入库词爬取别称
- 机器挖掘方式—引入同义词词典扩充入库
- 机器挖掘方式—构建词向量表征进行相似度计算召回
2)、模型优化之Focal Loss
上文数据分析中,我们提到NER任务的建模方式本身存在BIO标签的分布不均衡问题,这一点我们考虑从优化层面来缓解该问题。
针对CV目标检测任务中存在的数据不均衡问题, FAIR的何恺明大佬研究团队在2017年提出了Focal loss,该论文获得了ICCV 2017的最佳学生论文。虽然是在CV任务上被提出的,但在NLP任务上,尤其是NER任务上,这一方法同样有效。由于NER任务本身O标签分布数量远远多于BI标签,这一点与目标检测场景很是相似,故而我们尝试了FL损失函数。
3)、模型优化之效果对比
针对NER模型识别商机过程中发现的标注数据量不足、商机分布不均衡以及BIO标签分布不均衡的问题,我们尝试了上述几种方案进行优化,并进行了一系列组合实验来验证上述策略的效果,实质上我们是想回答如下几个问题:
① FL(Focal Loss)与CRF并不兼容,但是几乎不会新增额外的时间开销,有没有可能采用softmax+FL代替CRF?
② DA(数据增强)对NER模型是不是有增益,是不是一直有效?
③ BERT模型本身学习能力强,不采用CRF效果怎么样?
经过实验我们发现,在基模型为IDCNN时,直接采用FL替换CRF,效果出现了一定的下降,这说明CRF对于IDCNN这类模型是必须的;但是BERT+FL相对容忍度较好,对BERT来说,不采用CRF并不影响其模型性能;而DA(数据增强)策略对所有模型都有提升效果,且效果很显著。
融合识别与探索
1)、融合识别
针对不同的商机类型,实际上分别适合于规则识别与模型识别。如核心商机中的电话商机,由于其模式很固定,采用规则识别比较容易达到较高的准召效果;而类似地点这种商机类型,较难以采用规则或者词典进行识别,因而比较依赖于模型识别。同时,规则&词典识别由于边界和范围可控因而具有不错的识别准确率,由于同样的原因其对词典或者规则涵盖以外的商机,难以召回;而模型具备良好的泛化性能,基于上述原因,我们尝试将规则识别与模型识别相结合,来构建我们的融合识别策略。其具体结构如下:
采用上述融合识别策略,核心商机的F1值绝对提升了1.65%,而丰富度商机的F1值局对提升1.33%,效果还是十分显著的。
2)、模型探索-引入上下文信息
同时,我们还发现有一些商机识别过程对会话级别的上文信息有较强的依赖作用,如核心商机中微信商机的识别,由于用户在给出微信号码时,很多时候倾向于直接给出,当前轮次前后没有任何辅助信息。这样很容易与手机型号(很多类似字符串符合微信的命名规范)这类字符串混淆,从而干扰模型的识别效果。因而模型需要注意到当前轮次所处的会话环境,尤其是用户在前文轮次提到的信息。
在这种情况下,我们尝试了采用表示学习(representation)引入context信息,来辅助NER模型进行商机识别的尝试。具体如
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E6%8A%80%E6%9C%AF%E5%9C%A8%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8%E5%AE%9E%E8%B7%B5/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com