写点什么

NLP 技术在宜信业务中的实践

  • 2020-02-11
  • 本文字数:12520 字

    阅读完需:约 41 分钟

NLP技术在宜信业务中的实践
导读:前面两篇我们介绍了NLP技术在宜信应用的背景《


敏捷AI | NLP技术在宜信业务中的实践【背景篇】


》,以及应用场景之一《


敏捷AI | NLP技术在宜信业务中的实践【智能聊天机器人篇】


》。本篇为另一个场景,也就是在业务中如何构建客户画像,敬请收看~


    <section style="margin: 0px -7px 0px 0px; padding: 0px; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section style="margin: 0px; padding: 0px; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section style="margin: 0px 0px -18px -12px; padding: 0px; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section class="" style="margin: 0px; padding: 6px 1.8em; display: inline-block; letter-spacing: 1.5px; color: rgb(90, 91, 92); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;">**作者简介**</section>
<section style="margin: -18px -12px 0px 0px; padding: 0px; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section style="margin: 0px; padding: 0px; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section style="margin: 0px 0px 0px -7px; padding: 0px; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section>
<section style="margin: 0px 0px -10px -9px; padding: 0px; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important;"></section></section>
复制代码


1547716825149018970.png


井玉欣


毕业于北京大学信息科学技术学院,获博士学位,研究方向包括计算机软件与理论、逻辑推理等,目前就职于宜信技术研发中心,从事人工智能、机器学习、自然语言处理以及知识工程等方面的研究。


    <section style="margin: 0px -7px 0px 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg);"></section>
<section style="margin: 0px 0px -18px -12px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section>
<section class="" style="margin: 0px; padding: 6px 1.8em; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; display: inline-block; letter-spacing: 1.5px; color: rgb(90, 91, 92);">**高级场景之构建客户画像**</section>
<section style="margin: -18px -12px 0px 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg);"></section>
<section style="margin: 0px 0px 0px -7px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px 0px -10px -9px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section></section>
复制代码


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


1547716494419079549.jpg


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


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


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


1547716507198013733.jpg


图 2 客户陪访报告示例


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


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


1547716519652041041.jpg


图 3 总体实施路线


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


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


当然我们也面临着普遍存在的标注语料不足的问题,因此在这个项目中,我们侧重于研究怎么在小样本条件下进行 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 计算,最终得到一个合理的文本向量表征,用于最后的分类,整个过程如图 4 所示。


1547716532289030453.jpg


图 4 HAN 模型架构


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


1547716544619062534.jpg


图 5 实例处理总体流程


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


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


1547716556313012641.jpg


图 6


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


    <section style="margin: 0px -7px 0px 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg);"></section>
<section style="margin: 0px 0px -18px -12px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section>
<section class="" style="margin: 0px; padding: 6px 1.8em; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; display: inline-block; letter-spacing: 1.5px; color: rgb(90, 91, 92);">**总结**</section>
<section style="margin: -18px -12px 0px 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 15px; height: 15px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; border: 1px solid rgb(211, 211, 211); transform: rotate(0deg);"></section>
<section style="margin: 0px 0px 0px -7px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 9px; height: 9px; border-top-left-radius: 100%; border-top-right-radius: 100%; border-bottom-right-radius: 100%; border-bottom-left-radius: 100%; background-color: rgb(245, 228, 36); background-position: initial initial; background-repeat: initial initial;"></section>
<section style="margin: 0px 0px -10px -9px; padding: 0px; max-width: 100% !important; box-sizing: border-box !important; word-wrap: break-word !important; width: 1px; height: 1.2em; background-color: rgb(211, 211, 211); transform: rotate(30deg); background-position: initial initial; background-repeat: initial initial;"></section></section>
复制代码


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


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


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


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


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/215


2020-02-11 20:20671

评论

发布
暂无评论
发现更多内容

离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0

TiDB 社区干货传送门

实践案例 版本升级 管理与运维 安装 & 部署 扩/缩容

【8.12-8.19】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

Web3.0 DAPP项目智能合约系统开发技术详情

开发微hkkf5566

优雅,永不过时!SpringBoot中这样编写Controller层代码,那叫一个完美

Java永远的神

Java 程序员 面试 程序人生 springboot

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

TiDB 社区干货传送门

手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor

TiDB 社区干货传送门

5分钟,带你看完24岁60W年薪架构师的简历,上面竟然写着精通JVM

收到请回复

Java JVM java面试 简历模板 金九银十

故障处理 | DM 搭建 MySQL 8.0 同步链路报错:code=26005

TiDB 社区干货传送门

安装 & 部署 TiDB 源码解读

离线部署系列文章之二:TiDB集群升级(5.3.0->5.4.2)&缩扩容 TiDB Server、PD、TiKV、TiFlash

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署

前半个月的行动中,整个圈子都在疯传的“内网King”到底是个啥?

青藤云安全

网络安全 主机安全 攻防演练

马拉车算法 (最长回文串 例题 密码截获)

Five

算法 8月月更

云图说丨初识可信分布式身份服务

华为云开发者联盟

云计算 安全 后端

如何在企业数字化团队内部实现数据分析建模成果的结构化整合沉淀

ModelWhale

工作流 数字化转型 数字化 案例分享 提高效率

如何让 TiDB 集群管理“更省心”?TiUniManager(原 TiEM)使用教程来了

TiDB 社区干货传送门

Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

华为云开发者联盟

Python 人工智能 图像

九章云极DataCanvas公司与中国信通院完成可信AI基础软件战略合作

九章云极DataCanvas

人工智能 数据智能 数智化 可信AI

如何避免数据湖变成数据沼泽

Kyligence

数据湖 数据管理 智能多维数据库

字节一面:HTTPS 一定安全可靠吗?

程序员小毕

Java 程序员 面试 https 校招

当内卷风波及代码领域,看Alluxio将会采取怎样的块分配策略

Alluxio

腾讯 存储 Alluxio block 8月月更

20万字的《Kafka运维实战宝典》PDF现在免费下载了

石臻臻的杂货铺

大数据 kafka

7 天能找到 Go 工作吗?学学 Go 数组和指针试试

梦想橡皮擦

Python 爬虫 8月月更

OpenHarmony有氧拳击之设备端开发

OpenHarmony开发者

OpenHarmony

TiDB 和 Java 的简单 CRUD 应用程序

TiDB 社区干货传送门

打了15天,如何做到在容器权限上不失一分?

青藤云安全

容器安全 攻防演练

SAP ABAP 和 Java 里的弱引用(WeakReference)和软引用(SoftReference)

汪子熙

Java 引用 SAP abap 8月月更

一文带你认知定时消息发布RocketMQ

华为云开发者联盟

云计算 后端

TiDB 和 Golang 的简单 CRUD 应用程序

TiDB 社区干货传送门

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

TiDB 社区干货传送门

ABAP 一组关键字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 的用法辨析

汪子熙

指针 应用 SAP abap 8月月更

开源一夏 | 在 STM32L051 上使用 RT-Thread (四、无线温湿度传感器 之 串口通讯)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

Meta项目功能测试 | 开启PrestoDB和Aria扫描优化

Alluxio

hive presto Alluxio 大数据 开源 8月月更

NLP技术在宜信业务中的实践_文化 & 方法_井玉欣_InfoQ精选文章