写点什么

数据质量良莠不齐?携程是这样来做多场景下的内容智能发现的

  • 2019-10-24
  • 本文字数:6299 字

    阅读完需:约 21 分钟

数据质量良莠不齐?携程是这样来做多场景下的内容智能发现的

一、背景

目前业界内容化的应用场景愈发丰富,大家试图通过特色化的内容来吸引用户,引导用户与产品增加交互(浏览、点击、购买等)。虽然各大互联网公司的内容数据已足够丰富,但数据质量良莠掺杂,难以直接用于内容化场景落地,因此如何实现优质内容的发现、抽取和生成,便成为重要的技术课题。


本文将从多场景(短亮点、长推荐理由、正式语句表达)和多纬度(主题/产品特色)角度,分享携程在智能内容抽取和生成中的技术实践。


一般而言,内容智能发现可以分为抽取式和生成式两种方法,其中抽取式是指从数据源数据中抽取高质量的语句并且不会改变语句的原始结构;而生成式是指利用深度学习基于 seq2seq 的方法,根据相应的语料,进行语句生成,生成的是新的语句。


内容智能发现的价值在于:


1)充分发挥算法价值,借助算法自动快速的从自然语言数据中发现和生成高质量的推荐理由语句,结合业务和场景展示给用户,帮助用户快速了解该产品其他用户的评价内容并以此做出自己的判断。


2)帮助运营人员进行内容化工作,大大节约人力成本,节省时间。


这些推荐结果的应用场景也较多,如产品展示页,评论弹幕,产品详情页,副标题等等。随着内容化的重要性越来越大,可用的场景也会越来越多。

二、携程马可波罗中台

马可波罗中台是携程 AI 研发部自主研发的集 AI 算法能力于一身,并适应多场景需求,对外提供 AI 服务的人工智能服务平台,如图 1。


该中台承载着内容化的主要功能。


架构上,该中台分为数据层,算法层和应用层:其中数据层是指中台灵活对接公司的 50 多个数据源,并且支持动态调整,这些数据量级达到了 10 亿+;算法层是整个平台的大脑,集成各种算法模块,主要为情感模型、实体识别、图片算法等等;将业务和算法层的组合就能够完成应用层的实现,现在的应用层主要是实现 NLP 内容化的工作和图片视觉等方面的工作。


将马可波罗中台的应用层进行具体划分,又可以分为底层计算、特色挖掘、图片部分和主题内容化四个部分。考虑到中台的数据量较大,因此整个算法都是基于 spark 等大数据平台运算;产品特色挖掘方面是结合知识图谱和实体识别建立各个产品的特色部分供业务使用;而图片部分主要是视觉方面的工作包含图片分类、图片搜索、优美度判断等等应用;最后的智能内容发现是指平台根据用户设置的主题利用算法在用户选择的数据源范围内,进行内容发现。



图 1 马可波罗中台

三、智能内容抽取


图 2 智能内容抽取示意图


根据图 2 所示,抽取方式的流程涉及到的模块比较多,主要可以分为三个阶段:


1)基础梳理;


2)内容丰富度衡量;


3)结果优化三部分;


预处理阶段的目的是对语句进行比较基础的处理,主要包含情感过滤,敏感词检测,拼写错误等等,这些模块是为了保证语句基本在表达上是规范的,情感倾向是满足需求的并且不会触犯法律法规问题的。


内容丰富度模块是较为核心的模块,内容丰富度的程度会直接影响改句子的得分,进而直接影响这句话是否被召回,经过统计和思考我们确立了三个层次内容丰富度衡量体系,即分别从产品维度、产品特色及语句信息含量来衡量句子的内容丰富度,而用到的模型及算法包含实体识别、类别评价维度模型、知识图谱等等。


结果优化处理模块,是对初步召回的结果进行优化处理如去重,语义匹配,优美度判断等等。


在抽取过程中我们同业务充分沟通,设计这些模块计算法能够动态匹配相应的产品,因此基本上能够满足不同产品和场景的抽取要求,并且在最终的结果处理方面,能够根据业务需求进行多样性的结果优化。

3.1 预处理过程

在预处理过程中,比较重要的是情感检测模块。在不同的业务场景下,对结果语句的情感要求也随之变化。因此我们构建情感模型来掌握和控制语句的情感倾向,来匹配结果的需求,满足不同业务的需求。



图 3 BIlstm 示意图


在构建情感模型上面,我们一开始使用的是传统的机器学习 tfidf 抽取文本的特征,使用 chi2 筛选特征,进而使用 svm 作为分类器,来解决情感分类问题。


当数据量变大以后,我们采用了现在较为流行的深度学习 W2C+LSTM+attenion 的框架来搭建情感模型。bilstm 结构图如图 3 BIlstm 示意图所示,不同于传统的 lstm,该网络结构分别从前到后和从后到前进行 lstm,这样的结果等同于同时考虑了词语前向和后向的关系。


而 Long ShortTerm 网络,一般就叫做 LSTM ,是一种 RNN 特殊的类型,可以学习长期依赖信息。这个模型非常的深,12 层,并不宽(wide),中间层只有 1024,而之前的 Transformer 模型中间层有 2048,深而窄比浅而宽 的模型更好。


MLM(Masked Language Model),transformer 同时利用左侧和右侧的词语,15%单词进行 Mask(遮挡)技术在语言模型上应用。在 encoder 端输入三种 embedding 如图 4 所示,另外在进行分类模型时候,只是用结果的第一个向量如图 5 中的 C。



图 4 bert embedding



图 5 bert 分类模型输出


在分类模型选择上,我们分别调研了:


1)Tfidf+Chi2+SVM;


2)Lstm+Attention,CNN 等深度学习方法;


3)Bert 的方法;


不同方法的优劣点具体如下:


对于方法 1,使用传统机器学习的方法,使用 TFIDF 来构建文本特征,使用 Chi2 的方法进行特征筛选(feature selection),在对比了随机森林、boost、svm 众多的机器学习方法后,最终发现 SVM 的效果较好。该方法的优点是即使样本量比较少(小于 5000),效果依然比较好,正向的召回和准确率均在 90%以上。总体来讲,传统机器学习的方法,便于实现、解释性强。


另一方面我们的数据很多是离线处理的,数据量很大(上亿级别),因此要使用大数据技术,结合 spark 进行大批量的运行。在结合 spark 过程中,传统机器学习的优势比较明显,方便部署和并且批量处理的时间能够接收。


对于方法 2,在深度学习方面调研了 CNN、LSTM、RCNN、fasttext 主要的四种编码方法,从结果看 lstm+attention 的效果最好,RCNN 效果次之,并且当数据量大于 1.5W 后 lstm+attention 能够超过传统机器学习方法。


但是 RCNN 的训练特别耗时,因此后期主要选择 LSTM+attention 的方法。在将深度学习和 spark 结合过程中,通过优化 spark 后,深度学习的方法在效率和准确度上也能达到令人满意的效果。


对于方法 3,考虑到 bert 在很多数据及上表现出来的碾压式的优势,我们也调研了 bert 的分类能力,使用同样的数据量,bert 的正确率大幅度高于前两类方法高出 3-4 个百分点。但是和深度学习一样,难以部署,尝试过结合 spark 部署,但是速度奇慢,也只作为调研对象。


经过对比较结果图 1-6 所示,考虑到 bert 的优异表现,最终我们选用 bert 的方法。



图 6 结果对比

3.2 内容丰富度

传统衡量文本内容有很多方法,长度,词性,句法分析,交叉熵等等都能衡量。但是衡量结果并不能同时满足满足场景需要及满足运营需要,因此需要考虑增加更多的维度、更多新的方法来实现内容丰富度衡量。


具体参看图 7,我们建立了三层体系的内容丰富度衡量的评价体系,即分别从语句层面、产品层面和场景层面较为完备的衡量内容丰富度情况。



图 7 内容丰富度评价体系

3.2.1 内容信息度


图 8 信息熵


该模块分别从信息熵图 8 所示,基于统计方法的词性结果和句法依存关系占比三方面来衡量文本基础信息度。信息熵经常被用来作为衡本信息度的指标,而分词后文本不同词性的占比也能从一定程度反应该文本的信息度。


从推荐理由的目的出发,我们期望抽取的句子含有一定比例词性的词语,并且也能够包含一定的依存关系情况。考虑到推荐理由的结果大概率的同时包含名词和形容词,并且包含一定的句子结构。因此考虑分词后词性和依存关系分析和计算内容表征分数。


其中词性重点考虑名词(n),形容词(adj),副词(adv),并且给与同时含有名词和形容词的词高的权重;依存关系方面,重点考虑 ‘ATT’, ‘ADV’, ‘COO’, ‘POB’, ‘RAD’, ‘LAD’, ‘VOB’等结构。



图 9 句法依存关系

3.2.2 产品特征

在产品特征方面,我们结合知识图谱和实体识别两方面来进行综合抽取。具体流程是一方面同业务商议各产品类别的实体词的确定、数据标注和模型训练;另一方面结合知识图谱来判断语句中是否存在当前产品的知识图谱中的特征属性。


具体流程如图 10 所示,实体识别和知识图谱的综合使用能够全面的获取语句中包含的产品层面的特征信息。



图 10 产品特征发现逻辑


目前 biLSTM+CRF 的方法成为基于深度学习的 NER 方法中的最主流模型。经过 bilstm 抽取后的特征,传入 crf 层,然后 Crf 使用状态转移矩阵和动态规划的思想进行求解,效果比较好。具体的知识图谱和实体识别相结合的案例如图 11 所示。



图 11 产品特征发现逻辑

3.2.3 类别维度评价

该流程主要包含两个组成部分——维度评价模型和亮点模型,目的是保证抽取的结果具有明显的表达某场景某一方面的情况,并且该语句有着一定的推荐倾向。


类别维度评价模块是产品特征维度更高层次的内容,并且需要分别结合不同的产品类别制定维度特征,利用语句在产品类别维度的得分来反映文本内容丰富度的模块。


该模块的出发点为,考虑用户希望看到的推荐理由应该是反映该产品某一方面的评价信息,因此先根据不同的类别的产品(酒店,餐饮,美食)明确各大类别的主题维度,而后进行数据标注及模型训练。在预测期间将取最高的维度得分(各类 softmax 后)作为该语句在该模块上的得分,具体流程见图 12。



图 12 类别维度评价

3.2.4 效果展示

经过上述处理后的结果展示如下,以“和平饭店”抽取结果前后对比(左前右后):



图 13 “和平饭店”效果展示


从图 13 结果看出,加入该逻辑后,能够避免抽取单一的例如早餐丰富的语句,更能够抽取出产品自身的特点的语句,如阳台酒吧、爵士酒吧、酒廊等等实体词汇。

3.3 语义匹配

在 AI 挖掘平台上,用户抽取推荐理由是基于主题语境的的,即用户给出一些列的关键词,然后算法依据这些关键词对候选语料进行召回。因此需要模型来判断主题和结果的语义匹配度,进而对结果根据语义匹配度进行重排。


在做语义匹配模型时候我们分两步进行,在缺少标注数据时候首先使用无监督的方法,直接计算平均词向量的余弦值作为匹配分值。在阶段二,利用标注数据训练了匹配模型,将匹配模型的得分作为最终的匹配分数。



图 14 语义匹配的两个阶段


目前匹配模型从 q,a(q 是问句,a 是回答语句)分别抽取特征后到计算相似度之间是否反生交互过程,分为并行方式,交互方式两类;而按照 loss 函数设计又分为 pointwise 和 pairwise 方法。


在并行方式中 q,a 一般使用同样的网络抽取特征,但是两者并不相互产生关系;而在交互方式中,两者会进行一些计算比如 ATTENTION,pooling 等然后计算相似度。


pointwise 和 pairwise 的主要区别在于 loss 的设计,前者会将问题转化为 2 分类问题,loss 函数使用交叉熵,模型的结果是判断两个文本是否匹配;后者一条训练记录包含 q 和匹配语句 a+和不匹配的语句 a-,然后分别计算相似度 sim,损失函数为 loss = max{(margin+sim(q,a+)-sim(q,a-)),0}。


这 loss 的具体意义是令匹配的得分高,不匹配的得分尽可能低,margin 表示超出这个区间就认为能够区分匹配与不匹配的界限。从结果可以看到如果两者差值超过这个 margin,loss 为 0 训练停止。另外其中 SIM 为相似值,一般会用 cos 计算距离。


在实践中我们分别根据图 15 和图 16 使用 lstm+attention 和 CNN 方法搭建匹配模型框架,然后根据图 17 的网络结构将两阶段拼接,最后同时训练两者的 loss。



图 15 语义匹配 lstm+attention



图 16 语义匹配-cnn



图 17 语义匹配完整网络结构



图 18 语义匹配重排效果图


我们使用 1000 个匹配的 q,a,然后每个匹配的 q,a 随机增加 3-4 条不匹配的数据。评判标准为分别使用监督学习和费监督学习的方法为每个 q,a 计算匹配得分,判断最高得分的 q,a 是否为真是匹配对。最终的结果表明,监督学习的方法正确率为 94.2%,远高于费监督学习的正确率 83.5%。

四、推荐理由生成

4.1 copynet

随着深度学习在 NLP 上的大放异彩,我们也基于深度学习的 seq2seq 框架在文本生成方面做了一些探索。因为仅仅做抽取的话,结果就只能从原始语料产生,因此结果太过生硬,并且可能出现语法问题。


NLP 深度学习的发展特别是 seq2seq 的发展,让文本生成成为了较为容易实现的事情。因此我们也希望能够利用生成的方法克服抽取的缺点,为了保证一定的限制性的输出,才用了 copynet 的方法。翻阅受限生成的方法,其实在 encoder 的改动不大,最多是增加一些新的信息或者机制进行 encoder,主要的改动都在 decoder 端,在生成部分倾向于某些词汇进行生成,接下来借助 copynet 讲解。



图 19 copynet 结构图



图 20 结果概率公式



图 21 状态更新

4.2 TA-seq2seq


图 22 TA-seq2seq 网络结构


该算法全名为 Topic Aware Neural ResponseGeneration,基本思想是引入主题词来影响结果的生成,让生成结果更有”营养”。具体做法是在 encoder 端不仅输入常规的语句,还输入一些列的主题关键词,这些关键词是通过 LDA 模型得来,这两部分都需要和 decoder 每一步状态做 attention;并且再预测端设计两个概率函数进预测,一个是常规高频词,一个是主题词组成,而两者的结果作为最后的概率。


具体的改变如下图所示:



图 23 decoder 端联合 attention



图 24 概率函数


优点:


1)引入了 topic 的影响,提高指定词的生成概率;


2)topic attention 利用 topic words 的状态信息和 input message 的最终状态作为额外的输入来减弱不相关主题词并加强相关主题词的概率;


3)在最后对话生成的过程中,采取了有偏于 topic words 的生成概率来增大 topic words 的出现几率;


4)不同于传统的 seq2seq 模型,在生成对话的第一个单词时,采用了两者组合,可以产生更为准确的第一个词,来给后续的词及整个句子的产生带来了更好的效果,因为后续词的产生会依赖于前面生成的词。

五、场景展示

经过上述的处理经过,通过算法模型抽取/生成的推荐理由主要的上线场景如图 25 所示。主要是四个场景——酒店首页二屏,酒店短亮点轮播,餐厅的推荐理由和 IM+的酒店推荐理由。通过算法和模型能够帮助产品特点的露出,吸引消费者的停留和转化,并且也大大的降低了运营人员的工作和运营周期。



图 25 线上应用场景效果图

六、总结

通过上文分享的方法及流程,我们完成了多场景的抽取及生成工作,并且在诸多的场景中上线,取得了较好的效果。通过算法和模型能够帮助产品特点的露出,吸引消费者的停留和转化,并且也大大的降低了运营人员的工作和运营周期。


但是同时实践中也存在一些不足:


1)结果中还是存在很多的比较单一的语句,例如在抽取部分存在例如:早餐丰富,孩子喜欢等缺乏细节或者特色的语句;在生成部分还存在句子句法错误的问题。


2)缺少用户 CTR(点击率)数据,所有的流程和算法的结果验证主要是依赖业务及运营人员检验,因此不能真实了解用户的喜好和意图。


3)模型更新问题,大量的数据还是希望能使用更加深层的模型,但是现在又因为 spark 结合,整个项目较大,大的模型或造成内存溢出或者效率不能满足生产需要的情况,暂时还不能解决这个问题。


4)抽取和生成结合:后面的方向需要生成方式的探索。并且还需要合理的将生成结果和抽取结果进行融合。


面对现有的不足,我们在实践中也会重点在这几方面进行探索和突破。</p


作者介绍


朱登龙,携程 AI 研发部高级算法工程师。负责 NLP 内容化的相关工作,主要专注领域为文本分类,文本抽取,文本生成,文本内容信息挖掘等。协同完成多场景智能内容抽取和生成项目,并交付多业务线的不同场景使用。


本文转载自公众号携程技术中心(ID:ctriptech)


原文链接


https://mp.weixin.qq.com/s?__biz=MjM5MDI3MjA5MQ==&mid=2697268973&idx=1&sn=71288219c4ad0de8358dcab01b3a1532&chksm=8376f1d9b40178cf33344c9ea67e75edf6494616ee7fa343514480929d68686ba4912359c693&scene=27#wechat_redirect


2019-10-24 08:001523

评论 1 条评论

发布
用户头像
请问酒店的短亮点是从酒店评论中抽取出的吗
2019-11-04 20:50
回复
没有更多了
发现更多内容

AI界的革命!终于可以自动标注了!

百度开发者中心

AI 自动标注工具

盲盒开发盲盒系统开发定制

华为云GaussDB NoSQL云原生多模数据库的超融合实践

华为云数据库小助手

GaussDB 华为云数据库 GaussDB NoSQL

有一说一,阿里内部SpringBoot王者晋级之路全彩小册开源,让我开了眼

热爱java的分享家

Java 架构 面试 程序人生 编程语言

一网打尽!音乐高手都在使用的打谱软件不藏私推荐!

懒得勤快

ABAP 和 Java 的单元测试 Unit Test

汪子熙

Java abap 11月日更 JavaSAP

SOLID原则之 单一职责原则

面向对象的猫

SOLID

CSS奇技淫巧之滤镜(二)drop-shadow

Augus

CSS 11月日更

从0到10彻底搞懂信息流【投放系统】

水泽山林

系统架构 推荐系统 智能投放 内容平台

Ustore在openGauss闪亮登场,重构openGauss数据存储的灵魂

openGauss

“太白”团队加入OpenInfra Labs,联合社区成员共同完善多云管理技术

基于MySQL binlog日志,实现Elasticsearch近实时同步实践

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

这个无敌设计,可以解析并运算任意数学表达式

Tom弹架构

Java 架构 设计模式

为何飞书成了先进企业的标配?

ToB行业头条

我就获取个时间,机器就down了

安第斯智能云

Linux 后端

HBase shell get命令从二进制还原真实值

WindFlying

如何用EasyRecovery恢复中毒U盘中丢失的文件

淋雨

EasyRecovery

低代码——不应该只是玩具

行云创新

云原生 低代码 开发 高效

45岁程序员发求职贴:精通各种技术体系,却连个面试机会都没有…

Java高级开发

Java 程序员 面试 职场

盲盒app开发盲盒小程序开发

关于openGauss账本数据库:你想知道的这里都有

openGauss

解决文件存储难题 openGauss隆重推出段页式特性

openGauss

Hadoop实战篇-集群版(2)

进击的梦清

大数据 hadoop zookeeper

Python代码阅读(第59篇):根据value查询字典key值

Felix

Python 编程 阅读代码 字典 Python初学者

快速剪辑-助力度咔智能剪辑提效实践

百度Geek说

架构 后端

dart系列之:元世界pubspec.yaml文件详解

程序那些事

flutter dart 程序那些事 11月日更

987页的Java面试宝典,看完才发现,应届生求职也没那么难

热爱java的分享家

Java 架构 面试 程序人生 编程语言

制作 Flask 程序容器镜像

wong

Python flask k8s Dockerfile

论文解读丨LayoutLM: 面向文档理解的文本与版面预训练

华为云开发者联盟

CV 预训练 LayoutLM模型 无标注 文档理解

肝!Spring JDBC持久化层框架“全家桶”教程

热爱java的分享家

Java 架构 程序人生 编程语言 架构师

使用 Node.js 消费SAP Cloud for Customer上的Web service

汪子熙

node.js SAP C4C 11月日更

数据质量良莠不齐?携程是这样来做多场景下的内容智能发现的_文化 & 方法_朱登龙_InfoQ精选文章