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

作者简介

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

一、背景


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

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

一般而言,内容智能发现可以分为抽取式和生成式两种方法,其中抽取式是指从数据源数据中抽取高质量的语句并且不会改变语句的原始结构;而生成式是指利用深度学习基于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)抽取和生成结合:后面的方向需要生成方式的探索。并且还需要合理的将生成结果和抽取结果进行融合。

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