信息流是目前大众点评除搜索以外的第二大用户获取信息的入口,以优质内容来辅助用户消费决策并引导发现品质生活。整个大众点评信息流(下文简称点评信息流)围绕个性化推荐去链接用户和信息,把更好的内容推荐给须要的用户。信息流推荐系统涉及内容挖掘、召回、精排、重排、创意等多层机制和排序。本文主要围绕创意部分的工做展开,并选取其中重要的文本创意优化作介绍,分为三个部分:第一部分阐述几个重点问题,包括创意优化是什么,为何作,以及挑战在哪里;第二部分讲述领域内的应用及技术进展;第三部分介绍咱们创意优化的实践,最后作个总结。算法
创意是一个宽泛的概念,它做为一种信息载体对受众展示,能够是文本、图像、视频等任何单一或多类间的组合,如新闻的标题就是经典的创意载体。而创意优化,做为一种方法,指在原有基础上进一步挖掘和激活资源组合方式进而提高资源的价值。在互联网领域产品中,每每表现为经过优化创意载体来提高技术指标、业务目标的过程,在信息流中落地重点包括三个方向:网络
核心目标与推荐问题类似,提高包括点击率、转化率在内的通用指标,同时须要兼顾考量产品的阅读体验包括内容的导向性等。关于“阅读体验”的部分,这里不做展开。框架
首先文本创意自己为重要的业务发展赋能。在互联网下半场,大众点评平台(下称点评平台)经过内容化去提高用户停留时长,各种分发内容类型在不停地增长,经过优化创意来提高内容的受众价值是必由之路。其次,目前不少内容类型还主要依赖运营维护,运营内容自然存在覆盖少、成本高的问题,没法彻底承接须要内容化改造的场景。最后,近几年深度学习在NLP(Natural Language Processing,天然语言处理)的不一样子领域均取得了重大突破。更重要的是,点评平台历经多年,积淀了大量可用的内容数据。从技术层面来讲,咱们也有能力提供系统化的文本创意生成的解决方案。dom
对此,咱们从文本创意面向对象的角度定义了两类应用形态,分别是面向内容的摘要标题,以及面向商户的推荐文案与内容化聚合页。前者主要应用信息流各主要内容场景,后者则主要应用在信息流广告等内容化场景。这里提早作下产品的简单介绍,帮助你们创建一个立体化的感知。ide
最后须要明确的是,咱们作文本创意优化最大的初心,是但愿经过创意这个载体显式地链接用户、商户和内容。咱们可以知道用户关注什么,知道哪些内容说什么,如何引导用户看,知道哪些商户好、好在哪里,将信息的推荐更进一步。而非为了生成而生成。函数
文本创意优化,在业务和技术上分别面临着不一样的挑战。首先业务侧,启动创意优化须要两个基础前提:性能
其次,在技术层面,业界不一样的应用都面临不同的挑战,而且尝试和实践对应的解决方案。对文本创意生成来讲,咱们面临的最大的挑战包括如下三点:学习
咱们总体的技术方案演进,能够视做近两年NLP领域在深度学习推进下发展的一个缩影。因此在展开以前,先谈一谈整个领域的应用及技术进展。优化
在学界相关领域,文本生成被称为NLG,其相关任务目标是根据输入数据生成天然语言的文本。而咱们在NLP领域使用更多的通常是NLU(Nature Language Understanding 天然语言理解)类任务,如文本分类、命名实体识别等,NLU的目标则是将天然语言文本转化成结构化数据。NLU和NLG二者表向上是一对相反的过程,但实际上是紧密相连的,甚至目前不少NLU的任务都受到了生成式模型中表示方法的启发,它们更多只在最终任务上有所区别。编码
文本生成也是一个较宽泛的概念,以下图所示,广义上只要输出是天然语言文本的各种任务都属于这个范畴。但从不一样的输入端能够划分出多种领域应用,从应用相对成熟的链接人和语言的NMT(神经机器翻译),到2019年初,能续写短篇故事的GPT2都属于Text2Text任务。给定结构化数据好比某些信息事件,来生成文本好比赛事新闻的属于Data2Text类任务,咱们的商户文案也属此类。另外还有Image2Text等,这块也逐渐在出现一些具备必定可用性又让人眼前一亮的应用,好比各类形式的看图说话。
文本生成包含文本表示和文本生成两个关键的部分,它们既能够独立建模,也能够经过框架完成端到端的训练。
文本生成要解决的一个关键问题,是根据给定的信息如何生成一段文本句子。这是一个简单输入复杂输出的任务,问题的复杂度太大,至今在准确和泛化上都没有兼顾的很是好的方法。2014年提出的Seq2Seq Model,是解决这类问题一个很是通用的思路,本质是将输入句子或其中的词Token作Embedding后,输入循环神经网络中做为源句的表示,这一部分称为Encoder;另外一部分生成端在每个位置一样经过循环神经网络,循环输出对应的Token,这一部分称为Decoder。经过两个循环神经网络链接Encoder和Decoder,能够将两个平行表示链接起来。
另一个很是重要的,就是Attention机制,其本质思想是获取两端的某种权重关系,即在Decoder端生成的词和Encoder端的某些信息更相关。它也一样能够处理多模态的问题,好比Image2Text任务,经过CNN等将图片作一个关键特征的向量表示,将这个表示输出到相似的Decoder中去解码输出文本,视频语音等也使用一样的方式(以下图所示)。
可见Encoder-Decoder是一个很是通用的框架,它一样深刻应用到了文本生成的三种主流方法,分别是规划式、抽取式和生成式,下面看下这几类方法各自的优劣势:
目前的主流的评估方法主要基于数据和人工评测。基于数据能够从不一样角度衡量和训练目标文本的相近程度,如基于N-Gram匹配的BLUE和ROUGE等,基于字符编辑距离(Edit Distance)等,以及基于内容Coverage率的Jarcard距离等。基于数据的评测,在机器翻译等有明确标注的场景下具备很大的意义,这也是机器翻译领域最早有所突破的重要缘由。但对于咱们创意优化的场景来讲,意义并不大,咱们更重要的是优化业务目标,多以线上的实际效果为导向,并辅以人工评测。
另外,值得一提的是,近两年也逐渐涌现了不少利用GAN(Generative Adversarial Networks,生成对抗网络)的相关方法,来解决文本生成泛化性多样性的问题。有很多思路很是有趣,也值得尝试,只是GAN对于NLP的文本生成这类离散输出任务在效果评测指标层面,与传统的Seq2Seq模型还存在必定的差距,可视为一类具备潜力的技术方向。
前文提到,在Encoder端包括有些模型在Decoder端都须要对句子进行建模,那如何设计一个比较好的模型作表示,既可让终端任务完成分类、序列生成,也能够作语义推理、类似度匹配等等,就是很是重要的一个部分。那在表示方面,整个2018年有两方面很是重要的工做进展:
该部分介绍从2017年末至今,咱们基于文本生成来进行文本创意优化的一些探索和实践。
启动文本生成,首先要了解内容自己,数据的数量和质量对咱们的任务重要性无须赘述,这是一切模型的基础。目前咱们使用到的数据和大体方法包括:
但这些内容的不一样特色,也带来了不一样的挑战:
因此,文本创意优化要在业务侧落地产生效果,还需应用到NLP领域诸多方向的技术。下图是抽象的整个文本生成应用的基础能力模块,包括用于源和端质量控制的文本质量层,构建Context表示的文本表示层,以及面向业务优化的端到端模型层,其中不少技术应用了公司其余兄弟团队包括内容挖掘组、NLP中心、离线计算组的出色成果。如针对负面内容过滤的情感分析,多项针对性的文本分类,针对商户表示的标签挖掘等,在这里特别向他们表示感谢。
双平台的内容须要在信息流分发,在创意上最早优化的就是标题,这是用户仅能看到两个要素之一(另外一个为首图),而咱们超过95%的内容并无原生标题,同时原生标题也存在诸如多样性差非场景导向等问题,还有二次优化的空间。
可是,有两点比较大的挑战,在不一样任务上具象可能不同。它们的本质并无改变,部分也是业界难点:
对此,咱们经过抽取式和生成式的相结合互补的方式,并在流程和模型结构上着手进行解决。
抽取式方法在用户内容上有比较明显的优点:首先控制力极强,对源内容相关性好,改变用户行文较少,也不容易形成体验问题,能够直接在句子级别作端到端优化。对此,咱们把整个标题建模转变为一个中短文本分类的问题,但也没法规避上文提到两个大挑战,具体表如今:
整个抽取式的流程,能够抽象为四个环节+一个在线机制:
咱们初版Bi-LSTM+Attention整个结构并不复杂。咱们的输入层是PreTrain的Word Embedding,通过双向LSTM给到Attention层,Dropout后全链接,套一个交叉熵的Sigmod,输出判别,但它的意义很是明显,既能够对整句序列作双向语义的建模,同时能够经过注意力矩阵来对词级进行加权。这个在线上来看,不管是对体感仍是点击转化率都较召回打分的原始版本,有了巨大提高。然后,咱们还在这个Base模型基础上,尝试添加过ELMo的Loss,在模型的第一层双向LSTM进行基于ELMo Loss的Pre Train做为初始化结果,在线上指标也有小幅的提高。
可是上述这个结构,将中短文本脱离原文独立建模,显然没法更好地兼顾原文受限这个条件。一个表现,就是容易出现“标题党”、原文不相关等对体验形成影响的问题。对此,咱们在原文与候选标题结合的表示建模方面,作了很多探索,其中以CNN+Bi-LSTM+Attention的基模型为表明,但其在相关性建模受原文自己长度的影响较大,并且训练效率也不理想。
通过一段时间的探索分析,在原文受限问题上,最终既经过深度模型来表征深层的语义,也辅以更多的特征工程,如属性、Topic等挖掘特征咱们统称为Context,来表征用户能感知到的浅层信息,“两条腿走路”才能被更好的学习,这个在文案生成和标题生成的探索中反过来为抽取式提供了借鉴。
在效率上,咱们总体替换了RNN-LSTM的循环结构,采用了谷歌那时新提出的自注意力的机制,来解决原文表征训练效率和长依赖问题。采用这个结构在效果和效率上又有了较大的提高。主要问题是,咱们的Context信息如何更好地建模到Self-Attention的结构中。它与生成式模型结构很是相似,在下文生成式部分有所介绍。
另外,须要说明的一点是,除非有两个点以上的巨大提高,通常咱们并不会以离线评测指标来评价模型好坏。由于前面提到,咱们的标注数据存在不一样程度的扰动,并且只是线上预测很小的一个子集,没法避免的与线上存在必定的Gap,因此咱们更关注的是模型影响的基础体验(人工检测经过率即非Bad Case率),效率表现(训练预测的时效)最重要的仍是线上实际的业务效果。在咱们这几个版本的迭代中,这三个方面都分别得到了不一样程度的优化,尤为是包括点击率、总点击量等在内的业务指标,都累计得到了10%以上的提高。
抽取式标题在包括业务指标和基础体验上都获取了不错的效果,但仍有明显的瓶颈。第一,没有彻底脱离原文,尤为在大量质量欠优内容下没法实现创意的二次优化;第二,更好的经过创意这个载体显式的链接用户、商户和内容,这个是生成式标题能够有能力实现的,也是必由之路。
生成式标题,能够抽象描述为:在给定上文并在必定受限条件下,预估下个词的几率的问题。在信息流标题场景,抽取式会面临的问题生成式所有会继承,且在受限优化上面临更大的挑战:
在表示上,前面已经提到,咱们经历过目标单独建模和结合原文建模的过程,主要缘由仍是在于仅针对Target的理解去构建Context衔接,很是容易出现原文相关性问题。因此咱们在描述的泛化性方向也作了很多的尝试,好比尽量地描述广而泛主题。诸如“魔都是轻易俘获人心的聚餐胜地”,由于只面向上海的商户,内容符合聚餐主题,泛化能力很强,但仍然不能做为一个普适的方案解决问题。
下图为咱们一个有初步成效的RNN-Base的Seq2Seq模型的总体结构。Encoder端使用的是,包括前面提到的主题(包括商户信息)表示以及原文的双向语义表示,两部分的拼接构成的Context,输出给注意力层。Decoder端生成文本时,经过注意力机制学习主题和原文表示的权重关系,这个结构也完整应用到了文案生成,其中控制结构会在文案中展开介绍。
在序列建模上,咱们经历了一个从RNN到自注意力的过程。简单介绍下,序列建模一个核心要点是如何建模序列间的长依赖关系。影响它的重要因素是,信号在网络正向和反向计算中传递的长度(也就是计算次数),较长的依赖关系消失越严重。而在自注意力结构中,每一层都直接与前一层的全部位置直接链接,所以依赖长度均为O(1),最大程度保留了序列间的依赖关系。
能够看到,Encoder包括两部分,一部分是Source原文,一部分是基于原文和商户理解的主题Context,二者共同组成。为此,咱们借鉴了NMT的一部分研究思想,调整了Transformer的结构,在原结构上额外引入了Context Encoder,而且在Encoder和Decoder端加入了Context的Attention层,来强化模型捕捉Context信息的能力。
咱们在生成式方向探索过程当中,对低质内容的标题生成,在线上得到了接近10%的效果提高,但仍有不少值得进一步的尝试和深挖的空间。
在咱们的场景中,有两种Combine的思路,一个是以业务效果为导向的偏工程化方法,另一个是咱们正在探索的一种Copy方法。
工程化的思想很是简洁,在推荐问题上扩充候选,是提高效果的一个可行途径,那生成内容即做为新增的候选集之一,参与总体的预估排序。这个方法能保证最终线上效果不会是负向的,实际上也取得了必定的提高。
另外一种方法也是学业界研究的子方向之一,即Copy机制,咱们也在作重点探索,这里仅做思路的介绍,再也不进行展开。
使用Copy机制的原始目的,是为了解决生成式的OOV(超出词表范围)问题。但对于咱们的场景来讲,大部分的“内容-标题”对数据是来自于抽取式,即咱们不少标题数据,其实参考了原文。那如何继承这个参考机制,针对业务目标学习什么时候Copy以及Copy什么,来更优雅地发挥生成式的优点,就是咱们探索Copy方法的初衷。咱们的方向是对Copy和Generate几率作独立建模,其中重点解决在受限状况下的“Where To Point”问题。
咱们知道生成式模型其本质是一个Language Model,它的训练目标是最小化Word级别的交叉熵Loss,而最终咱们的须要评价的实际上是业务相关的句子级别点击率,这就致使了训练目标和业务指标不一致。
解决这个问题,在咱们的场景中有三个可行的方向,第一是在Context中显式地标注抽取式模型的Label,让模型学习到二者的差别;第二是在预测Decoder的Beam Search计算几率的同时,添加一个打分控制函数;第三则是在训练的Decoder中,创建一个全局损失函数参与训练,相似于NMT中增长的Coverage Loss。
考虑到稳定性和实现成本,咱们最终尝试了第一和第二种方式,其中第二种方式仍是从商户文案迁移过来的,也会在下文进行介绍。在线上,这个尝试并无在Combine的基础上取得更好的效果,但一样值得更加深刻的探索。
最后,介绍一下前面提到过的标题E&E(Explore and Exploit,探索与利用)机制,用来持续获取标注数据,并提高在线自动纠错的能力。咱们采用了一种贪心的Epsilon Greedy策略,并作了一点修改,相似经典的Epsilon算法,区别是引入创意状态,根据状态将Epsilon分红多级。目的是将比较好的创意能够分配给较大几率的流量,而不是均分,差的就淘汰,以此来提高效率。在初期优化阶段,这种方式发挥了很大的做用。
具体咱们根据标题和图片的历史表现和默认相比,将状态分红7档,从上到下效果表现依次递减,流量分配比例也依次下降,这样能够保证整个系统在样本有噪音的状况下实现线上纠偏。
文案做为一个常见的创意形式,在O2O以商户为主要载体的场景下有三点须要:第一,赋予商户之内容调性,丰富创意;第二,经过内容化扩展投放的场景;最后,赋能平台的内容化升级,主要业务目标包括点击率、页面穿透率等等。
文案生成和标题生成可以通用总体的生成模型框架,能够归为Data2Text类任务,最大区别是由文案的载体"商户"所决定。不一样于内容,准确性的要求低不少,复杂度也大大下降,但同时为泛化能力提出了更高的要求,也带来了与内容生成不一样的问题。首先在表示上,对商户的结构化理解变得尤为关键;其次在控制上,有D2T任务特有且很是重要的控制要求。前文也提到了生成一段文本历来不是难点,重要的是如何按照不一样要求控制Seq生成的同时,保证很好的泛化性。下文也会分别介绍卖点控制、风格控制、多样性控制控制等几个控制方法。实现这样的控制,也有不少不一样的思路。
商户的表示抽象为Context,以下图中所示,主要分两部分。
第一部分来源于商户的自身理解,一部分则来源于目标文本,两部分有必定交集。其中商户理解的数据为卖点或者Topic,在初期,为了挖掘商户卖点和Topic,咱们主要使用成本较低、无需标注的LDA。可是它的准确性相对不可控,同时对产出的卖点主题仍须要进行人工的选择,以便做为新的标注,辅助后续扩展有监督的任务。咱们经过Key和Value两个Field,来对卖点和主题进行共同表达(也存在不少只有Value的状况),好比下图这个商户“菜品”是个Key,“雪蟹”是Value,“约会”则仅是Value。随着时间的推移,后续咱们逐渐利用平台商户标签和图谱信息,来扩展商户卖点的覆盖,以此丰富咱们的输入信息。该部分在内容挖掘和NLP知识图谱的相关介绍中都有涉及,这里再也不进行展开。
第二部分目标文原本源,特地添加这部分进入Context,主要有三方面缘由:
控制,在解码端表现为两类,一类咱们称之为Hard Constrained(强控制),即在数据端给定(或没有给定)的信息,必定要在解码端进行(或不进行)相应描述,这个适用于地域类目等不能出错的信息。好比这家商户在上海,生成时不能出现除上海之外的地域信息,不然容易形成歧义。另外一类称之为Soft Constrained(弱控制),不一样于NMT问题,在文案生成上即使是彻底相同的输入,不一样的输出都是容许的,好比同一商户,最终的文案能够选择不一样的卖点去描述不一样的内容。
这类同属受限优化的问题,前文提到过有两个思路方向:第一,经过构建机制来让模型本身学习到目标;第二,在Decoder的Beam Search阶段动态地加入所需的控制目标。咱们使用二者相结合的方法,来完成最终的不一样控制的实现。
咱们在预测Beam Search阶段,除了计算模型几率外,额外增长下图中绿色部分的Fuction。输入为以前已生成的序列,具体计算逻辑取决于控制目标,能够自由实现。
下面简单介绍两个重要的控制实现:
多样性,在文案生成上是一个比较重要和广泛的问题,尤为对于同一个店铺、同一个卖点或主题同时生成N条内容的聚合页来讲,更为突出。本质缘由是,在解码预测Beam Search时永远选择几率最大的序列,并不考虑多样性。可是若是预测时采用Decoder几率Random Search的方法,则在通顺度上会存在比较大的问题。
对此,咱们直接对全局结果进行优化,在预测时把一个聚合页Context放到同一个batch中,batch_size即为文案条数,对已经生成序列上进行实体重复检测和n-gram重复检测,将检测判重的加一个惩罚性打分,这个简单的思想已经能很是好的解决多样性问题。
目前,不少搜索推荐等排序优化场景,都会将创意信息做为特征工程一部分添加进精排或召回模型。那若是把创意优化近似为一个内容级创意排序问题,也能够无缝衔接经常使用的Wide&Deep、DNN、FNN等CTR预估模型。可是这以前,须要明确一点很是重要的问题,即它与推荐精排模型的差别,它们之间甚至可能会相互影响,对此,提供下咱们的思考。
最后,咱们回到用户视角,当用户在浏览信息流时,其实看到的只有创意自己(标题、图片、做者等信息),但用户却能从中感知到背后的诸多隐含信息,也就是CTR预估中的重要内容/商户类特征,诸如类目、场景、商户属性等。这个现象背后的本质在于,创意能够表征不少高阶的结构化信息。
基于这一点,在创意优化的特征工程上,方向就很明确了:强化User/Context,弱化Item/POI,经过创意表征,来间接学习到弱化的信息从而实现创意层面的最优排序。该部分工做不只仅涉及到文本,在本文中再也不展开。
动态创意为文本生成提供了全新的空间,也提出了更高的要求。动态创意提高受众价值,不只仅只能经过排序来实现,在正篇介绍的最后部分,咱们抛出一个可能性的问题,供各位同行和同窗一块儿思考。也但愿能看到更多业界的方案和实践,共同进步。
整个2018年,大众点评信息流在核心指标上取得了显著的突破。创意优化做为其中的一部分,在一些方面进行了不少探索,也在效果指标上取得了较为显著的收益。不过,将来的突破,更加任重而道远。
2018年至2019年初,NLP的各个子领域涌现了很是多使人惊喜的成果,而且这些成果已经落地到业界实践上。这是一个很是好的趋势,也预示着在应用层面会有愈来愈多的突破。好比2019年初,可以续写短篇小说的GPT2问世,虽然它真实的泛化能力还未可知,但让咱们真切看到了在内容受限下高质量内容生成的可能性。
最后,回到初心,咱们但愿经过创意的载体显式地链接用户、商户和内容。咱们能了解用户关注什么,知道某些内容表达什么,获知哪些商户好,好在哪里,将信息的推荐更进一步。