其他分享
首页 > 其他分享> > 大众点评信息流基于文本生成的创意优化实践

大众点评信息流基于文本生成的创意优化实践

作者:互联网

1. 引言

信息流是目前大众点评除搜索之外的第二大用户获取信息的入口,以优质内容来辅助用户消费决策并引导发现品质生活。整个大众点评信息流(下文简称点评信息流)围绕个性化推荐去连接用户和信息,把更好的内容推荐给需要的用户。信息流推荐系统涉及内容挖掘、召回、精排、重排、创意等多层机制和排序。本文主要围绕创意部分的工作展开,并选取其中重要的文本创意优化做介绍,分为三个部分:第一部分阐述几个重点问题,包括创意优化是什么,为什么做,以及挑战在哪里;第二部分讲述领域内的应用及技术进展;第三部分介绍我们创意优化的实践,最后做个总结。

什么是创意优化

创意是一个宽泛的概念,它作为一种信息载体对受众展现,可以是文本、图像、视频等任何单一或多类间的组合,如新闻的标题就是经典的创意载体。而创意优化,作为一种方法,指在原有基础上进一步挖掘和激活资源组合方式进而提升资源的价值。在互联网领域产品中,往往表现为通过优化创意载体来提升技术指标、业务目标的过程,在信息流中落地重点包括三个方向:

  1. 文本创意:在文本方面,既包括了面向内容的摘要标题、排版改写等,也包括面向商户的推荐文案及内容化聚合页。它们都广泛地应用了文本表示和文本生成等技术,也是本文的主要方向。
  2. 图像创意:图像方面涉及到首图或首帧的优选、图像的动态裁剪,以及图像的二次生成等。
  3. 其他创意:包括多类展示理由(如社交关系等)、元素创意在内的额外补充信息。

核心目标与推荐问题相似,提升包括点击率、转化率在内的通用指标,同时需要兼顾考量产品的阅读体验包括内容的导向性等。关于“阅读体验”的部分,这里不作展开。

图1 创意优化的整体应用

为什么要做文本生成

首先文本创意本身为重要的业务发展赋能。在互联网下半场,大众点评平台(下称点评平台)通过内容化去提升用户停留时长,各类分发内容类型在不停地增加,通过优化创意来提升内容的受众价值是必由之路。其次,目前很多内容类型还主要依赖运营维护,运营内容天然存在覆盖少、成本高的问题,无法完全承接需要内容化改造的场景。最后,近几年深度学习在NLP(Natural Language Processing,自然语言处理)的不同子领域均取得了重大突破。更重要的是,点评平台历经多年,积淀了大量可用的内容数据。从技术层面来说,我们也有能力提供系统化的文本创意生成的解决方案。

对此,我们从文本创意面向对象的角度定义了两类应用形态,分别是面向内容的摘要标题,以及面向商户的推荐文案与内容化聚合页。前者主要应用信息流各主要内容场景,后者则主要应用在信息流广告等内容化场景。这里提前做下产品的简单介绍,帮助大家建立一个立体化的感知。

图2 文本创意的应用场景

最后需要明确的是,我们做文本创意优化最大的初心,是希望通过创意这个载体显式地连接用户、商户和内容。我们能够知道用户关注什么,知道哪些内容说什么,如何引导用户看,知道哪些商户好、好在哪里,将信息的推荐更进一步。而非为了生成而生成。

面临的挑战

文本创意优化,在业务和技术上分别面临着不同的挑战。首先业务侧,启动创意优化需要两个基础前提:

其次,在技术层面,业界不同的应用都面临不一样的挑战,并且尝试和实践对应的解决方案。对文本创意生成来说,我们面临的最大的挑战包括以下三点:

2. 文本生成问题综述

我们整体的技术方案演进,可以视作近两年NLP领域在深度学习推动下发展的一个缩影。所以在展开之前,先谈一谈整个领域的应用及技术进展。

2.1 相关领域应用

在学界相关领域,文本生成被称为NLG,其相关任务目标是根据输入数据生成自然语言的文本。而我们在NLP领域使用更多的一般是NLU(Nature Language Understanding 自然语言理解)类任务,如文本分类、命名实体识别等,NLU的目标则是将自然语言文本转化成结构化数据。NLU和NLG两者表向上是一对相反的过程,但其实是紧密相连的,甚至目前很多NLU的任务都受到了生成式模型中表示方法的启发,它们更多只在最终任务上有所区别。

文本生成也是一个较宽泛的概念,如下图所示,广义上只要输出是自然语言文本的各类任务都属于这个范畴。但从不同的输入端可以划分出多种领域应用,从应用相对成熟的连接人和语言的NMT(神经机器翻译),到2019年初,能续写短篇故事的GPT2都属于Text2Text任务。给定结构化数据比如某些信息事件,来生成文本比如赛事新闻的属于Data2Text类任务,我们的商户文案也属此类。另外还有Image2Text等,这块也逐渐在出现一些具有一定可用性又让人眼前一亮的应用,比如各种形式的看图说话。

图3 从输入端划分文本生成的领域应用

2.2 相关技术与进展

文本生成包含文本表示和文本生成两个关键的部分,它们既可以独立建模,也可以通过框架完成端到端的训练。

文本生成

文本生成要解决的一个关键问题,是根据给定的信息如何生成一段文本句子。这是一个简单输入复杂输出的任务,问题的复杂度太大,至今在准确和泛化上都没有兼顾的非常好的方法。2014年提出的Seq2Seq Model,是解决这类问题一个非常通用的思路,本质是将输入句子或其中的词Token做Embedding后,输入循环神经网络中作为源句的表示,这一部分称为Encoder;另一部分生成端在每一个位置同样通过循环神经网络,循环输出对应的Token,这一部分称为Decoder。通过两个循环神经网络连接Encoder和Decoder,可以将两个平行表示连接起来。

另外一个非常重要的,就是Attention机制,其本质思想是获取两端的某种权重关系,即在Decoder端生成的词和Encoder端的某些信息更相关。它也同样可以处理多模态的问题,比如Image2Text任务,通过CNN等将图片做一个关键特征的向量表示,将这个表示输出到类似的Decoder中去解码输出文本,视频语音等也使用同样的方式(如下图所示)。

图4 Seq2Seq结构图示

可见Encoder-Decoder是一个非常通用的框架,它同样深入应用到了文本生成的三种主流方法,分别是规划式、抽取式和生成式,下面看下这几类方法各自的优劣势:

目前的主流的评估方法主要基于数据和人工评测。基于数据可以从不同角度衡量和训练目标文本的相近程度,如基于N-Gram匹配的BLUE和ROUGE等,基于字符编辑距离(Edit Distance)等,以及基于内容Coverage率的Jarcard距离等。基于数据的评测,在机器翻译等有明确标注的场景下具有很大的意义,这也是机器翻译领域最先有所突破的重要原因。但对于我们创意优化的场景来说,意义并不大,我们更重要的是优化业务目标,多以线上的实际效果为导向,并辅以人工评测。

另外,值得一提的是,近两年也逐渐涌现了很多利用GAN(Generative Adversarial Networks,生成对抗网络)的相关方法,来解决文本生成泛化性多样性的问题。有不少思路非常有趣,也值得尝试,只是GAN对于NLP的文本生成这类离散输出任务在效果评测指标层面,与传统的Seq2Seq模型还存在一定的差距,可视为一类具有潜力的技术方向。

文本表示

前文提到,在Encoder端包括有些模型在Decoder端都需要对句子进行建模,那如何设计一个比较好的模型做表示,既可以让终端任务完成分类、序列生成,也可以做语义推理、相似度匹配等等,就是非常重要的一个部分。那在表示方面,整个2018年有两方面非常重要的工作进展:

图5 GPT ELMo BERT模型结构

3. 探索与实践

该部分介绍从2017年底至今,我们基于文本生成来进行文本创意优化的一些探索和实践。

3.1 内容源

启动文本生成,首先要了解内容本身,数据的数量和质量对我们的任务重要性无须赘述,这是一切模型的基础。目前我们使用到的数据和大致方法包括:

但这些内容的不同特点,也带来了不同的挑战:

图7 双平台内容特点与挑战

3.2 基础能力模块

所以,文本创意优化要在业务侧落地产生效果,还需应用到NLP领域诸多方向的技术。下图是抽象的整个文本生成应用的基础能力模块,包括用于源和端质量控制的文本质量层,构建Context表示的文本表示层,以及面向业务优化的端到端模型层,其中很多技术应用了公司其他兄弟团队包括内容挖掘组、NLP中心、离线计算组的出色成果。如针对负面内容过滤的情感分析,多项针对性的文本分类,针对商户表示的标签挖掘等,在这里特别向他们表示感谢。

图8 文本生成应用的基础能力模块

3.3 信息流标题实践

双平台的内容需要在信息流分发,在创意上最先优化的就是标题,这是用户仅能看到两个要素之一(另一个为首图),而我们超过95%的内容并没有原生标题,同时原生标题也存在诸如多样性差非场景导向等问题,还有二次优化的空间。

但是,有两点比较大的挑战,在不同任务上具象可能不一样。它们的本质并没有改变,部分也是业界难点:

对此,我们通过抽取式和生成式的相结合互补的方式,并在流程和模型结构上着手进行解决。

抽取式标题

抽取式方法在用户内容上有比较明显的优势:首先控制力极强,对源内容相关性好,改变用户行文较少,也不容易造成体验问题,可以直接在句子级别做端到端优化。对此,我们把整个标题建模转变为一个中短文本分类的问题,但也无法规避上文提到两个大挑战,具体表现在:

整个抽取式的流程,可以抽象为四个环节+一个在线机制:

图9 抽取式生成标题流程

  1. 源数据在内容中台完成可分发分析后,针对具体内容,进行系统化插件式的预处理,包括分句拼句、繁简转换、大小写归一等,并进行依存分析。
  2. 而后将所有可选内容作质量评估,包括情感过滤、敏感过滤等通用过滤,以及规则判别等涉及表情、冗余字符处理与语法改写的二次基础优化。
  3. 在召回模块中,通过实体识别+TF-IDF打分等方式来评估候选内容标题基础信息质量,并通过阈值召回来保证基础阅读体验,从而避免一些极端的Bad Case。
  4. 最后,针对候选标题直接做句子级别的点击/转化率预估,负责质感、相关性及最终的业务目标的优化。为此,我们先后尝试了诸多模型结构来解决不同问题,下面重点在这方面做下介绍。

我们第一版Bi-LSTM+Attention整个结构并不复杂。我们的输入层是PreTrain的Word Embedding,经过双向LSTM给到Attention层,Dropout后全连接,套一个交叉熵的Sigmod,输出判别,但它的意义非常明显,既可以对整句序列做双向语义的建模,同时可以通过注意力矩阵来对词级进行加权。这个在线上来看,无论是对体感还是点击转化率都较召回打分的原始版本,有了巨大提升。而后,我们还在这个Base模型基础上,尝试添加过ELMo的Loss,在模型的第一层双向LSTM进行基于ELMo Loss的Pre Train作为初始化结果,在线上指标也有小幅的提升。

图10 Bi-LSTM+Attention

但是上述这个结构,将中短文本脱离原文独立建模,显然无法更好地兼顾原文受限这个条件。一个表现,就是容易出现“标题党”、原文不相关等对体验造成影响的问题。对此,我们在原文与候选标题结合的表示建模方面,做了不少探索,其中以CNN+Bi-LSTM+Attention的基模型为代表,但其在相关性建模受原文本身长度的影响较大,而且训练效率也不理想。

图11 CNN+Bi-LSTM+Attention

经过一段时间的探索分析,在原文受限问题上,最终既通过深度模型来表征深层的语义,也辅以更多的特征工程,如属性、Topic等挖掘特征我们统称为Context,来表征用户能感知到的浅层信息,“两条腿走路”才能被更好的学习,这个在文案生成和标题生成的探索中反过来为抽取式提供了借鉴。

在效率上,我们整体替换了RNN-LSTM的循环结构,采用了谷歌那时新提出的自注意力的机制,来解决原文表征训练效率和长依赖问题。采用这个结构在效果和效率上又有了较大的提升。主要问题是,我们的Context信息如何更好地建模到Self-Attention的结构中。它与生成式模型结构非常类似,在下文生成式部分有所介绍。

另外,需要说明的一点是,除非有两个点以上的巨大提升,一般我们并不会以离线评测指标来评价模型好坏。因为前面提到,我们的标注数据存在不同程度的扰动,而且只是线上预测很小的一个子集,无法避免的与线上存在一定的Gap,所以我们更关注的是模型影响的基础体验(人工检测通过率即非Bad Case率),效率表现(训练预测的时效)最重要的还是线上实际的业务效果。在我们这几个版本的迭代中,这三个方面都分别获得了不同程度的优化,尤其是包括点击率、总点击量等在内的业务指标,都累计获得了10%以上的提升。

图13 效果数据

受限生成式标题

抽取式标题在包括业务指标和基础体验上都获取了不错的效果,但仍有明显的瓶颈。第一,没有完全脱离原文,尤其在大量质量欠优内容下无法实现创意的二次优化;第二,更好的通过创意这个载体显式的连接用户、商户和内容,这个是生成式标题可以有能力实现的,也是必由之路。

生成式标题,可以抽象描述为:在给定上文并在一定受限条件下,预估下个词的概率的问题。在信息流标题场景,抽取式会面临的问题生成式全部会继承,且在受限优化上面临更大的挑战:

在表示上,前面已经提到,我们经历过目标单独建模和结合原文建模的过程,主要原因还是在于仅针对Target的理解去构建Context衔接,非常容易出现原文相关性问题。所以我们在描述的泛化性方向也做了不少的尝试,比如尽可能地描述广而泛主题。诸如“魔都是轻易俘获人心的聚餐胜地”,因为只面向上海的商户,内容符合聚餐主题,泛化能力很强,但仍然不能作为一个普适的方案解决问题。

下图为我们一个有初步成效的RNN-Base的Seq2Seq模型的整体结构。Encoder端使用的是,包括前面提到的主题(包括商户信息)表示以及原文的双向语义表示,两部分的拼接构成的Context,输出给注意力层。Decoder端生成文本时,通过注意力机制学习主题和原文表示的权重关系,这个结构也完整应用到了文案生成,其中控制结构会在文案中展开介绍。

图14 LSTM Attention Based Seq2Seq模型结构

在序列建模上,我们经历了一个从RNN到自注意力的过程。简单介绍下,序列建模一个核心要点是如何建模序列间的长依赖关系。影响它的重要因素是,信号在网络正向和反向计算中传递的长度(也就是计算次数),较长的依赖关系消失越严重。而在自注意力结构中,每一层都直接与前一层的所有位置直接连接,因此依赖长度均为O(1),最大程度保留了序列间的依赖关系。

可以看到,Encoder包括两部分,一部分是Source原文,一部分是基于原文和商户理解的主题Context,两者共同组成。为此,我们借鉴了NMT的一部分研究思想,调整了Transformer的结构,在原结构上额外引入了Context Encoder,并且在Encoder和Decoder端加入了Context的Attention层,来强化模型捕捉Context信息的能力。

图15 Transformer Based Seq2Seq Model

我们在生成式方向探索过程中,对低质内容的标题生成,在线上获得了接近10%的效果提升,但仍有很多值得进一步的尝试和深挖的空间。

抽取与生成Combine

在我们的场景中,有两种Combine的思路,一个是以业务效果为导向的偏工程化方法,另外一个是我们正在探索的一种Copy方法。

工程化的思想非常简洁,在推荐问题上扩充候选,是提升效果的一个可行途径,那生成内容即作为新增的候选集之一,参与整体的预估排序。这个方法能保证最终线上效果不会是负向的,实际上也取得了一定的提升。

另一种方法也是学业界研究的子方向之一,即Copy机制,我们也在做重点探索,这里仅作思路的介绍,不再进行展开。

使用Copy机制的原始目的,是为了解决生成式的OOV(超出词表范围)问题。但对于我们的场景来说,大部分的“内容-标题”对数据是来自于抽取式,即我们很多标题数据,其实参考了原文。那如何继承这个参考机制,针对业务目标学习何时Copy以及Copy什么,来更优雅地发挥生成式的优势,就是我们探索Copy方法的初衷。我们的方向是对Copy和Generate概率做独立建模,其中重点解决在受限情况下的“Where To Point”问题。

业务指标与生成式目标的Gap

我们知道生成式模型其本质是一个Language Model,它的训练目标是最小化Word级别的交叉熵Loss,而最终我们的需要评价的其实是业务相关的句子级别点击率,这就导致了训练目标和业务指标不一致。

解决这个问题,在我们的场景中有三个可行的方向,第一是在Context中显式地标注抽取式模型的Label,让模型学习到两者的差异;第二是在预测Decoder的Beam Search计算概率的同时,添加一个打分控制函数;第三则是在训练的Decoder中,建立一个全局损失函数参与训练,类似于NMT中增加的Coverage Loss。

考虑到稳定性和实现成本,我们最终尝试了第一和第二种方式,其中第二种方式还是从商户文案迁移过来的,也会在下文进行介绍。在线上,这个尝试并没有在Combine的基础上取得更好的效果,但同样值得更加深入的探索。

在线E&E机制

最后,介绍一下前面提到过的标题E&E(Explore and Exploit,探索与利用)机制,用来持续获取标注数据,并提升在线自动纠错的能力。我们采用了一种贪心的Epsilon Greedy策略,并做了一点修改,类似经典的Epsilon算法,区别是引入创意状态,根据状态将Epsilon分成多级。目的是将比较好的创意可以分配给较大概率的流量,而不是均分,差的就淘汰,以此来提升效率。在初期优化阶段,这种方式发挥了很大的作用。

具体我们根据标题和图片的历史表现和默认相比,将状态分成7档,从上到下效果表现依次递减,流量分配比例也依次降低,这样可以保证整个系统在样本有噪音的情况下实现线上纠偏。

图17 在线E&E选优

3.4 商户文案实践

文案作为一个常见的创意形式,在O2O以商户为主要载体的场景下有三点需要:第一,赋予商户以内容调性,丰富创意;第二,通过内容化扩展投放的场景;最后,赋能平台的内容化升级,主要业务目标包括点击率、页面穿透率等等。

文案生成和标题生成能够通用整体的生成模型框架,可以归为Data2Text类任务,最大区别是由文案的载体"商户"所决定。不同于内容,准确性的要求低很多,复杂度也大大降低,但同时为泛化能力提出了更高的要求,也带来了与内容生成不同的问题。首先在表示上,对商户的结构化理解变得尤其关键;其次在控制上,有D2T任务特有且非常重要的控制要求。前文也提到了生成一段文本从来不是难点,重要的是如何按照不同要求控制Seq生成的同时,保证很好的泛化性。下文也会分别介绍卖点控制、风格控制、多样性控制控制等几个控制方法。实现这样的控制,也有很多不同的思路。

商户表示

商户的表示抽象为Context,如下图中所示,主要分两部分。

第一部分来源于商户的自身理解,一部分则来源于目标文本,两部分有一定交集。其中商户理解的数据为卖点或者Topic,在初期,为了挖掘商户卖点和Topic,我们主要使用成本较低、无需标注的LDA。但是它的准确性相对不可控,同时对产出的卖点主题仍需要进行人工的选择,以便作为新的标注,辅助后续扩展有监督的任务。我们通过Key和Value两个Field,来对卖点和主题进行共同表达(也存在很多只有Value的情况),比如下图这个商户“菜品”是个Key,“雪蟹”是Value,“约会”则仅是Value。随着时间的推移,后续我们逐渐利用平台商户标签和图谱信息,来扩展商户卖点的覆盖,以此丰富我们的输入信息。该部分在内容挖掘和NLP知识图谱的相关介绍中都有涉及,这里不再进行展开。

第二部分目标文本来源,特意添加这部分进入Context,主要有三方面原因:

图18 商户表示

控制端实现

控制,在解码端表现为两类,一类我们称之为Hard Constrained(强控制),即在数据端给定(或没有给定)的信息,一定要在解码端进行(或不进行)相应描述,这个适用于地域类目等不能出错的信息。比如这家商户在上海,生成时不能出现除上海以外的地域信息,否则容易造成歧义。另一类称之为Soft Constrained(弱控制),不同于NMT问题,在文案生成上即便是完全相同的输入,不同的输出都是允许的,比如同一商户,最终的文案可以选择不同的卖点去描述不同的内容。

这类同属受限优化的问题,前文提到过有两个思路方向:第一,通过构建机制来让模型自己学习到目标;第二,在Decoder的Beam Search阶段动态地加入所需的控制目标。我们使用两者相结合的方法,来完成最终的不同控制的实现。

我们在预测Beam Search阶段,除了计算模型概率外,额外增加下图中绿色部分的Fuction。输入为之前已生成的序列,具体计算逻辑取决于控制目标,可以自由实现。

图19 Decoder Beam_Search控制

下面简单介绍两个重要的控制实现:

3.5 内容聚合

多样性控制

多样性,在文案生成上是一个比较重要和普遍的问题,尤其对于同一个店铺、同一个卖点或主题同时生成N条内容的聚合页来说,更为突出。本质原因是,在解码预测Beam Search时永远选择概率最大的序列,并不考虑多样性。但是如果预测时采用Decoder概率Random Search的方法,则在通顺度上会存在比较大的问题。

对此,我们直接对全局结果进行优化,在预测时把一个聚合页Context放到同一个batch中,batch_size即为文案条数,对已经生成序列上进行实体重复检测和n-gram重复检测,将检测判重的加一个惩罚性打分,这个简单的思想已经能非常好的解决多样性问题。

图20 聚合页多样性控制

4. 动态创意

目前,很多搜索推荐等排序优化场景,都会将创意信息作为特征工程一部分添加进精排或召回模型。那如果把创意优化近似为一个内容级创意排序问题,也可以无缝衔接常用的Wide&Deep、DNN、FNN等CTR预估模型。但是这之前,需要明确一点非常重要的问题,即它与推荐精排模型的差异,它们之间甚至可能会相互影响,对此,提供下我们的思考。

与精排模型的差异

最后,我们回到用户视角,当用户在浏览信息流时,其实看到的只有创意本身(标题、图片、作者等信息),但用户却能从中感知到背后的诸多隐含信息,也就是CTR预估中的重要内容/商户类特征,诸如类目、场景、商户属性等。这个现象背后的本质在于,创意可以表征很多高阶的结构化信息。

基于这一点,在创意优化的特征工程上,方向就很明确了:强化User/Context,弱化Item/POI,通过创意表征,来间接学习到弱化的信息从而实现创意层面的最优排序。该部分工作不仅仅涉及到文本,在本文中不再展开。

用户兴趣与文本生成结合的可能性

动态创意为文本生成提供了全新的空间,也提出了更高的要求。动态创意提升受众价值,不仅仅只能通过排序来实现,在正篇介绍的最后部分,我们抛出一个可能性的问题,供各位同行和同学一起思考。也希望能看到更多业界的方案和实践,共同进步。

5. 总结与展望

整个2018年,大众点评信息流在核心指标上取得了显著的突破。创意优化作为其中的一部分,在一些方面进行了很多探索,也在效果指标上取得了较为显著的收益。不过,未来的突破,更加任重而道远。

2018年至2019年初,NLP的各个子领域涌现了非常多令人惊喜的成果,并且这些成果已经落地到业界实践上。这是一个非常好的趋势,也预示着在应用层面会有越来越多的突破。比如2019年初,能够续写短篇小说的GPT2问世,虽然它真实的泛化能力还未可知,但让我们真切看到了在内容受限下高质量内容生成的可能性。

最后,回到初心,我们希望通过创意的载体显式地连接用户、商户和内容。我们能了解用户关注什么,知道某些内容表达什么,获知哪些商户好,好在哪里,将信息的推荐更进一步。

参考资料

作者简介

标签:信息流,商户,优化,生成,内容,文本,创意
来源: https://blog.51cto.com/u_15197658/2769404