您的位置 首页 > 娱乐休闲

敏捷AI|如何利用NLP技术构建智能聊天机器人和用户画像

导读:文章围绕基于机器学习的NLP技术在宜信内部各业务领域的应用实践展开,分享这一过程中的相关经验,包括智能机器人在业务支持、客户服务中的探索,基于文本语义分析的用户画像构建,以及NLP算法服务平台化实施思路等。


一、业务背景

宜信公司于2006年成立于北京,经过12年的发展,目前围绕着普惠和财富两大业务板块,陆续推出了许多相关产品,如宜人贷、宜人财富、致诚信用、博城保险等等。

实际上在这些产品的背后,AI技术已广泛地应用其相关的各条业务线中。

从宜信所处的金融领域的各个子领域来划分,可以分为智能交易、智能信贷、金融信息、金融安全、个性化服务这五个方面,每个方面都有相关人工技术的辅助。

例如智能交易领域,有智能投研、量化分析、自动/辅助交易等技术;智能信贷领域,有能够进行身份识别、用户画像以及智能风控等相关的人工智能产品;金融信息领域,我们会进行知识工程、图谱分析、智能问答等;金融安全领域,要进行反欺诈分析;而个性化服务领域就更广泛了,我们有行为分析、智能营销、推荐与匹配以及智能理财顾问等等一系列比较成熟的AI产品。

让我们继续向下探究,在这些AI产品的背后,会发现都有一些NLP(Natural Language Processing, 自然语言处理)技术的影子。比如在智能交易领域,我们需要理解相当多的投研报告,这里就会用到报告理解方面的NLP技术;智能信贷领域,可能需要进行风控报告的生成和分析,也要用到相关的NLP技术;知识工程领域,要对金融信息进行知识提取,或者为了构建知识图谱进行关系提取、事件提取等;智能营销和智能理财顾问中,则需要智能聊天以及话术提取的处理技术。

可以说NLP技术贯穿了各个领域的AI产品,其直接原因就是因为我们的业务中存在着大量的自然语言数据,如电销通话数据、客户分析小结、客服沟通内容、内部交流信息以及其他各种文本报告等等,这些数据都是使用自然语言来进行存储的;而且用自然语言文本存储这些数据,还有着其他形式数据无法比拟的一些优点,如图1所示,自然语言数据来源丰富,信息表述多种多样,保留信息完整,并且符合用户习惯等等。

图1 自然语言的特点

但是,我们需要注意到相较于这些优点,自然语言数据也有着数据非结构化不易处理、存在可能的歧义性、语法不规则性、未知语言现象等缺点。另外,结合宜信所处的业务领域,这些自然语言又有一些独特的特点:更强的词汇专业性、更广泛的数据来源、多样的数据形式(录音数据,文字对话数据以及短/长文本的报告、小结等)、较大的数据量以及分布的不均衡性。

这些缺点使得自然语言数据并不容易处理,NLP技术实施起来难度也不小,但是为什么自然语言数据仍然越来越得到关注,NLP技术的实施也越来越广泛了呢?

实际上,近几年来,各企业、组织开始在业务中也越来越关注大量非结构化数据中蕴含的高价值信息。我们知道,结构化数据比较好处理,但是经过多年的发展,能够从中挖掘出的信息越来越有限;而我们平时接触到的非结构化数据,其数量级要比结构化数据多出好几倍,里面蕴含着非常多的高价值信息。

典型的非结构化数据包括图片、视频等,另外很重要的一部分就是自然语言文本数据。我们可以从这些自然语言文本中挖掘出大量有价值的内容,例如在前面所述的宜信自然语言数据中我们就可以得到客户信息、产品数据、舆论倾向、策略反馈等。

此外,自然语言处理给我们带来了新的会话交互方式,更确切的说,基于自然语言理解和自然语言生成所形成的对话式用户交互更加自然、高效、吸引人,更加符合用户习惯,这也就是我们所说的Conversational UI,新的交互方式越来越多的应用在各个领域。比如我们接触到的智能音箱小爱同学,她的表现就非常惊艳。

所以,越来越多的业务开始关注非结构化数据和自然语言数据这些高数量级的有价值信息,它具有的一些特点,提供的一些交互方式,带来了更多扩展的形式,这就导致了自然语言数据越来越重要,NLP技术越来越必要。

我们给NLP技术做一个简单的定位,即NLP技术承担了领域内自然语言数据的分类、提取、转换、生成任务,是业务领域内重要、基础的技术服务之一。

二、NLP技术在宜信

宜信拥有丰富的业务和产品线,这些产品线产生了大量的人工智能赋能需求。算法团队成立以来,一直面临着不小的项目压力。在整个项目的驱动过程中,团队也逐渐得到成长,结合金融领域的相关业务知识,磨练出从规则分析到统计学算法,再到更加复杂的神经网络,以及NLP领域专业技术等一系列技能。

图2 相关算法技术栈

具体来讲,我们从可以承担基本的处理任务(利用一些现有的规则分析、基本算法模型所进行的词性分析、句法分析)发展到可以利用相对复杂的神经网络模型对外提供文本分类、文本聚类、信息抽取等等一些模型服务,再到目前实施的智能聊天机器人(Chatbot)、用户画像、知识工程等高级场景,技术也随之转向了transformer、GAN、强化学习、深度学习网络等能力越来越强、结构越来越复杂的模型。这一过程可以看出来技术在不断的进步。

除了技术在不断的发展以外,我们也积攒了一批有价值的语料。在业务环节方面,我们积攒了如电销数据、客服数据、陪访数据、催收数据等语料;在业务领域方面,我们积攒了借贷(车、房、消费),理财(投资、保险、生活、传承、公益)等方面的语料;而在数据形式方面,我们收集了对话类(电话、文字沟通信息)、文章类(小结、新闻、报告)形式的语料。

这是一批比较有价值的语料信息,最终形成了公司内部的专业语料数据,包括公司的产品清单、业务术语表、业务实体表乃至财富领域的财富产品知识图谱等等。我们最终的目的是经过一定的扩充、抽象和加工之后,希望能够形成金融领域的、高价值的、专业数据集,来对外进行赋能输出。比如我们可以输出金融术语表、金融术语同义词林、金融领域相关本体以及各个子领域的知识库等。

此外,我们在服务模式上也有一个演化的过程。早期我们是以项目为驱动的服务模式,这个过程中存在着一些普遍的痛点:

  • 产品众多、业务需求繁杂;
  • 不同的业务相结合,需求不断发生变化;
  • 时效性要求,越快越好,上线稍晚就会影响到需求方;
  • 研发团队人力有限,偶尔还要兼顾环境部署、上线模型监控与维护等工作,整个过程中研发团队忙、压力大,没时间对模型进行有效调优。

那么如何解决这些痛点呢?反思过后,我们走出了重要的一步,即服务的平台化。通过构建一个统一的NLP模型平台,对外提供一个统一的NLP服务,其优点是:

  • 降低成本,提高效率;
  • 平台上的模型可以灵活组合,快速响应客户的需求;
  • 可以统一相关标准,方便对模型进行集中管理。

通过平台化服务,使我们的工作摆脱了原有的粗放式服务模式,提高了AI团队的输出能力。

图3 服务的平台化

图3为我们平台的逻辑功能视图,自底向上分为资源层、预处理层、模型层及场景层。资源层主要包括一系列的语料、标签、预训练模型等资源;预处理层包含一些常用的NLP技术,如分词分句、词性分析、句法分析、主题分析、命名实体识别等;模型层则包括一些可以对外提供服务的算法模型,例如文本的聚类、分类、生成、复述等模型,情感分析模型等;最高的场景层则针对一些高级的、可以形成一定闭环能力的复杂场景进行解决方案的构建,例如对于智能机器人、用户画像等复杂场景,我们会形成一个包装好的解决方案,提供给用户使用。

图4 NLP平台架构

图4为NLP平台工程架构。我们构建了一个支持Python环境的多任务调度微服务架构,从图中可以看到我们利用Mongo、HDFS、ES、MQ等系统构建了相关的数据访问层、模型算法层,在这两层的基础上,在微服务层我们对算法模型进行任务调度管理;外部我们暴露出相关的Web接口和App接口。此外,纵向来看,我们集成了一些权限管理、多租户管理功能,可以对接企业内部的单点登录、身份认证、权限控制等系统。

三、高级场景之智能聊天机器人

上文我们介绍了NLP技术、数据、服务上相关演化发展的过程,接下来,我将结合两个具体的实例来分享我们在NLP领域的一些实施经验。第一个要介绍的场景是:如何利用NLP技术以及智能聊天机器人来解决组织内部面临的大量的每日业务咨询问题。

图5

对于现代企业来说,智能聊天机器人有着非常广泛的业务需求。对外,我们有常见的客服机器人、智能投资顾问等;对内,我们有业务支持机器人、运维机器人以及个人助理等。

本实例是一个面向企业内部的信贷业务咨询机器人,为一个问答类QA-BOT。它的业务背景是:目前宜信的普惠业务在全国范围内有着500+线下门店,包括600+位营业部主管,3000+位业务专员以及20000+位一线销售。

每天这些一线同事在业务工作中都会产生大量的业务咨询问题,以往这些问题都是后台支持同事人工在IM中进行处理,工作非常枯燥,处理成本高、效率低;无法对问题进行有效的统计,不知道问题提问的频次,导致无法针对性的进行培训。长此以往,不利于业务的发展,也不利于团队的发展。

为了解决这个困境,我们研发了一个基于QA的问答机器人来支持这个工作,将人工的过程转为自动处理,从而实现一个全天候、7X24小时的全面支持机制。

对于问答机器人来说,其任务的核心和本质实际上就是基于检索的问答模型,我们给它半形式化地定义如下:

输入一个用户的问题Qx,在已有的QA数据库中,即(Q1,A1),(Q2,A2),…,(Qn,An)等QA问答对中,找到这样一组问答对(Qk,Ak),使得函数F(R(Qx),R(Qk))的值最大,其中F为语义相似度函数,R为文本表征函数。

上述定义就是说我们希望在所有QA问答对的问题中找到与用户提问最为相似的那个问题,它所对应的答案便是最合适反馈给用户的答案。

这其中的核心问题是求文本语义相似度,也就是求两个问题文本之间的相似度。解决这个问题有很多方法,例如我们可以直接构建一个Dual LSTM的神经网络,把用户的query从一侧进行输入,然后把知识库中问答对的question从另外一侧输入,通过RNN、CNN或者全链接的网络,在语料充足的情况下,就能够训练出一个模型,输出的概率值即为两个输入问题的相似度,如图6所示。

图6

然而,大多数情况下我们都面临样本不够充足的问题,尤其是在快速迭代的研发环境下,我们通常无法搜集到足够的语料。所以我们常把相似度问题拆分为两个子问题,即短文本语义表征和语义距离计算。两者间又以前者更重要一些,一旦我们即将处理的问题有了一个合理的语意表征,我们就可以通过简单的余弦距离、全链接网络等计算出两个表征之间的语义距离或者说语义相似度。

那我们怎样准确地表征短文本语义呢?

这也有很多方法,比如经典的词袋模型,还有一些无监督的表示方法(词向量加权、Doc2Vec、Skip-thought、Variational Auto-encoder)以及有监督的表示方法(DSSM、迁移学习)等。

但是我们要注意到之前所说的限制条件,也就是只能基于小规模语料和目前有限的QA问答对,而且业务要求快速实施、快速迭代。于是在方案的早期实施阶段,我们优先选择了“词袋模型+同义词扩展+tf-idf 权重”的这个方法,利用我们之前积累的相关术语的同义词、常用词的同义词,可以把一个问题进行基于同义词的复述,从而探索出来很多不同的问法,来提高用户提问在有限QA对数据库中命中的几率。通过上述方法构建出短文本的表征向量之后,再利用一些语义相似度的计算方法,就可以得到两个文本之间语义相似程度的分数。

这种方法最大的好处就是快,我们可以利用小规模的语料,1-2周之内在一个新领域上迅速上线一版效果表现非常不错的问答机器人。

图7

当然这个方案肯定不是终点,上述这个方案最重要的作用是迅速上线初版模型,利用这个模型我们就可以去收集用户提出的真实问题,滚动、积累更多问题数据,不断的补充进语料库和QA数据库,进而为我们训练更复杂的模型提供基础。而且随着QA数据库中的QA对越来越多,我们可以去回答更多类型的问题。

在有了一定的语料基础之后,我们构建了一版更为复杂的神经网络模型。这里我们采用了经典论文“Universal Language Model Fine-tuning for Text Classification”(by J. Howard et al)中的思想,在通用语料上先训练出一个language model(语言模型),再在领域语料上对该模型进行fine-tuning,最后将其迁移到最终的目标任务上,此外论文还提供了一些调参、优化的技巧。

图8

按照这个思想实施项目:在Wiki语料上训练语言模型之后,又在领域语料上进行了调优,然后迁移到相应的相似度计算网络上,最终得到了一个不错的测试效果。返回的答案列表中,正确答案排在首位的概率有88%,正确答案位于列表前三位范围以内的概率有94%,整体来看这个效果是不错的。

当然对于问答机器人来说,QQ相似度计算只是其中比较重要的一步,还有许多其他模型需要融合进来,协作提高问答的准确率。比如QA匹配模型,用来计算用户问题和知识库中所有问题对应答案的匹配程度。不过有了前面QQ相似度的计算基础,我们完全可以用同样的思路来构建一个QA匹配模型,输出QA匹配度值。最后将QQ相似度值和QA匹配度值进行加权重排,得到最终的答案列表,这才是返回给用户的答案。

此外还有一个扩展方向,即对于用户提问未能命中QA数据情况的处理。QA数据库是由人工提取或智能生成的QA问答对构成的,个数有限,因此对于用户可能会提问的各种各样的问题无法完全覆盖掉。一个有效的能力扩展方法就是开拓QA机器人的检索数据源(见图9),将机器人检索范围扩展到一些第三方API查询接口,QA问答对数据库,知识图谱以及文档等各个渠道的知识,从中找到答案。

图9

在我们的项目里,我们实施了“文档检索+关键信息提取”的保底方案,在问答数据库无法覆盖所有问题的情况下也尽可能为用户提供答案。

当然,我们还可以针对一些问题,通过槽值提取、实体关系识别等方法,实现在三方API上或者知识图谱上进行搜索,不过这个方法会稍微复杂一些,一般还需要会话的支持,此方面有专门的文章和报告,这里不再赘述。

不过提起多轮会话,我们还可以利用这个技术解决另外一个问题,即如何解决模糊提问。实际中,用户提出的某些问题非常模糊,无法找到准确答案,这常常会造成系统效果下降。例如用户问的问题非常简短,仅仅两三个字,这显然很难在QA 数据库里检索到一个准确答案。

图10

图10是一些资料上对机器人进行的划分,对话机器人在这里分为QA类和会话类两类机器人。QA类机器人就是在结构化和非结构化的数据上进行检索。而会话机器人则通常需要在多轮会话支持下,就一个问题多次与用户进行交流,捕获用户意图,给出对应的响应,比如闲聊机器人,任务机器人以及推荐机器人等。

我们认为QA机器人也会逐渐引入会话的概念,对于用户提出的模糊问题,完全可以利用对话状态分析、对话状态管理以及关键信息识别等方法来判断用户的意图是什么,缺失的信息有哪些,之后利用文本生成或追加提问等方法来要求用户补充更多信息。这样我们的机器人在有足够信息的条件下,就可以查找到更精准的结果。

图11 机器人处理主要流程

图11是机器人的处理流程,分为了预处理、分析分类、检索匹配、综合排序四个主要环节,各环节所涉及的技术也有枚举,报告之前我们着重介绍的QQ检索、QA匹配等任务。

另外,我们对聊天机器人这一相对高级的场景也提供了平台化的管理(见图12),其架构主要是在底层的自然语言处理平台上进行了进一步的场景化包装,在其基础之上增加了聊天机器人模块(包括Web/APP集成、对话管理、人工后台、外部API对接等),QA库管理模块(包括数据管理、实施发布等)和知识库管理模块(批量导入、内容管理、语料生成等)以及很重要的统计模块(包括统计挖掘和报表展示)。

图12 平台化高级场景管理

我们通过对场景中各功能进行封装和整合,以平台的形式提供一个一站式解决方案,用户在付出少量数据的情况下,就可以对模型无感知地迅速构建一个自己的业务问答机器人。

图13~图15为机器人的一些运行效果截图。其中图13为web版机器人交互界面,可以看到机器人回答的形式包括精准回答、相似问题、文档库搜索内容。

图13 机器人展示效果

图14是后台管理界面中的会话检索功能,可以在此方便地浏览机器人和系统用户所进行的会话,评估机器人效果,并可以把在会话过程中发现的、QA库里没有记录到的新问题识别出来,快速方便地添加到QA库之中。

图14 后台管理-会话检索页面

图15为模型管理模块,其中可以看到机器人所涉及的各类模型列表,每个模型后有相关操作按钮,可以对模型进行上线、更新、重启、停止等一系列管控操作。

图15 后台管理-模型管理页面

四、高级场景之构建客户画像

在第三部分中我们讲解了如何构建智能聊天机器人,本章我们则会介绍如何构建用户画像。

在许多企业中,每天业务人员和客户的沟通都会产生大量记录,这些记录可能包括了客服的沟通数据(通话记录、通话小结),也可能包括了各式各样的报告数据(陪访报告、征信报告等)(见图16)。

图16 业务人员与客户产生沟通记录

前者可能口语会多一些,后者则主要是书面用语。但两者之间有一个共同的特点,就是其中都蕴含着丰富的客户信息。想要把这些信息提取出来,我们就需要利用到(NLP)技术。

图17为一段客户陪访报告的节选,观察其文本特征,发现有许多业务所关注的信息,比如职业方面,客户是“大学教授”;在可投资产方面,理财金额有“100万”,投资类型是“银行理财”,对公司的态度是“不了解”等。

图17 客户陪访报告示例

所以我们完全可以通过NLP分析文本,对其中的客户特征进行标签化提取,最终利用得到的标签构建出客户画像。这样做的好处很多,比如方便我们的业务人员随时发现关键问题,便于跟进;自动化处理,提高工作效率。根据挖掘出的信息构建出客户标签画像之后,就可以方便地盘点特定时间范围内的需求特点,为新产品设置提供系数参考,或者补充、验证结构化字段内容。

总体的实施路线如图18所示,先通过业务分析来定义业务关注的标签库,然后针对定义出来的标签训练相应的提取模型,最后利用模型对数据进行分析,得到一系列客户标签,再对其进行汇总,最终形成客户画像。

图18 总体实施路线

总体的路线是这样的,但具体的实施过程中我们也有一些细节需要关注。通过对之前的数据进行分析,我们发现了一些特征,比如文本之中信息高度集中,信息表述通常以短句为单位,但是单一短句语义存在模糊性,还需要结合一定的上下文对其进行分析。所以我们需要对复杂句进行适当的切割,确定合适的数据粒度,同时配合一个适当大小的短句滑动窗口来捕获相关的上下文语义。

此外对于内部的业务文本来说,其内容涉及大量产品的专有实体名称和术语,以及较多的数字。针对这种情况,我们建立了专门的词库和实体库,对相应的实体名称和术语进行准确的切割和识别。对于数字的处理,我们先后比较字向量、标识符替换、规则识别+后处理等等技术方案,并且选择了其中效果最好的方法。

当然我们也面临着普遍存在的标注语料不足的问题,因此在这个项目中,我们侧重于研究怎么在小样本条件下进行Few-shot learning。

实际中,在大多数专业领域AI项目实施过程中,都存在着标注数据不足的情况,所以针对小样本进行学习的Few-shot learning也越来越凸显其重要性。Few-shot learning包括很多种技术,有常见的迁移学习+fine-tuning技术,典型的如Bert;也有基于半监督训练的一些技术,如基于相似性度量的一些神经网络模型,基于最近邻算法的样本标注扩散这些技术等;还有meta learning的相关技术,例如OpenAI在ICLR 2018上的best paper;甚至还有一些图网络的相关技术。

在以上种种技术当中,比较适合工程化的、比较容易实施的还是基于迁移学习的方法。在我们的项目中,发现迁移学习,也就是基于预训练模型,迁移到目标训练任务上,再加上半监督学习的标注辅助,可以比较好的满足我们的需求。

下面介绍一下我们的算法流程:先对复杂句进行清洗与切割;之后可以选择性的加入一些过滤规则,快速地去除那些比较明显的噪音数据;然后将数据流入到标签提取模型之中,得到具体的标签;最后在画像构建阶段对得到的所有标签进行去重、消歧,形成最终的客户画像。

具体到算法模型,我们也先后比较许多方法,本质上我们认为标签识别模型是一个短文本分类算法,我们尝试了基于统计的方法(SVM, Random Forest, XgBoost),也尝试了基于神经网络的模型(FastText,Text CNN/RNN/RCNN, HAN),最终我们选择了HAN模型,也就是层次注意网络(Hierarchical Attention Network)模型,通过在词一级和句一级分别进行RNN和Attention计算,最终得到一个合理的文本向量表征,用于最后的分类,整个过程如图19所示。

图19 HAN模型架构

图20是本实例的总体处理流程,经过数据预处理之后,文本被并行地分配到各个业务关注标签提取模型之中,输出各个业务标签,最终汇总到客户画像构建模块,在此进行去重、消解歧义和矛盾,最后得到客户的画像。

图20 实例处理总体流程

另外我们结合公司的敏捷实时数据平台设计了一个相应的实时AI解决方案,如图21所示,这里用到了我们团队开源的一些技术,包括DBus(数据总线平台),Wormhole(流式处理平台),Moonbox(计算服务平台)以及Davinci(可视应用平台),这四个平台构成了敏捷大数据平台栈。

在这个方案里,我们通过DBus来采集各类数据存储中的自然语言数据,经过一些可选的技术(如ASR等)得到相应的文本;再通过Wormhole来进行实时的流式处理,标签模型在Wormhole的实时数据流上运行,对数据流中的文本自动提取相应的标签,再由Wormhole输出到指定的数据存储中;之后由Moonbox对标签进行后续的汇总处理,先从存储介质之上把之前计算得到的标签提取出来,使用画像模型对画像进行构建,输出到如Redis之类的存储介质之中,最后推送给业务系统供其使用。这就是我们实现的一个实时用户画像处理流程。

图21

此外,在图21下方的数据流分支里,我们通过在Wormhole上流转的生产数据流进行一个选择性抽样,之后同样利用标签模型和画像模型,计算出客户画像,此后将原始数据、标签数据和客户画像通过Davinci展示给我们的模型维护人员,用于评估检查模型的运行情况,这样就实现了一个实时的模型效果监控系统。综合这两者,我们就得到了一个实时的、基于文本分析的画像构建系统。

五、总结

随着各企业实体对自然语言数据愈发关注,NLP+AI技术在各领域都成了非常重要、核心的基础技术服务。领域知识与NLP技术的结合带来了新的技术产品,创造出了新的商业价值,比如我们目前常用的一些产品:Siri、小爱同学等等,这种Conversational UI带来的不仅是一种全新的交互模式,更是开辟了一个新的产品领域。

在数据方面,虽然自然语言的数据存量很大,但目前来看无论是通用领域还是专业领域,经过加工整理的高质量自然语言语料数据资源还是比较缺乏,因此其具有非常高的价值。领域语料的积累可以极大提升AI产品的效果,在一定程度上帮助企业形成新的数据壁垒、技术壁垒。

在NLP的算法方面,就未来一段时间来看,如前文所述,面对小语料任务的Few-shot Learning会越来越受关注,尤其是以Bert为代表的迁移学习技术,将给现在的一些NLP任务带来一场革命。此外还有针对NLP语料的数据增强技术,我们知道在图像领域数据增强技术已经比较成熟,是一种常见的数据处理方式,但是在NLP领域数据增强技术的发展还不够成熟,如果能在这方面有所突破的话,相信会对各类NLP任务都有很大帮助。

NLP技术的发展还需要业界各企业、各位算法与工程专家的共同努力,相信未来我们能够更准确、更快速、更方便地理解各领域的自然语言数据。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何在数据流上加文本”边界阅读