查看原文
其他

58智能写稿机器人实践

陈佩利 周维 58技术 2022-03-15


背景介绍

传统的公关宣传,需要雇佣写手在公众平台发文,这种方式效率低下且费用高昂,为提高58公关的宣传效率,构建一个面向多业务的写稿机器人很有必要。由此我们AI Lab设计实现了58同城智能写稿机器人,旨在提高58公关部门对各业务的宣传效率。写稿机器人项目结合了模板匹配和深度学习技术,支持素材库构建和文章自动生成,目前已广泛应用于房产与二手车业务宣传文档的创作中。

文章生成流程

写稿机器人通过文本挖掘和人工撰写等渠道获取写作素材,利用AI技术自动生成文章正文和标题。文章生成可以分为素材获取、正文生成和标题生成三个步骤,素材包括首尾句子与文章模板等内容,素材内容由公关部人员撰写,这些内容保存在素材库中。文章生成的整体流程如下图所示:

写稿机器人接收到生成文章的请求之后,会根据文章主题查找相应类别的首尾句子以及模板,同时检索相应的结构化属性数据。结构化数据在帖子中出现,通过API获取,将结构化数据填入模板,并且与头尾句子进行整合,即可得到文章正文内容。对于二手车文章,这些结构化数据包括品牌、车系、排量等数据,如下图所示。

文章标题由文本生成模型自动生成,文章生成完毕之后,通过系统导出文章链接文件,供给公关部门分发给写手,进行文章审核与发布。下面将分别从标题生成与正文生成两部分进行展开,详细介绍写稿机器人的设计与实现。

标题生成

一个好标题能吸引读者的眼球,让文章从大量的信息中脱颖而出,从而提高品牌推广效果。在标题生成任务中,我们既要确保内容真实可信,反映实际,又要保证标题的吸睛程度,产生尽量多的阅读量,这给标题生成任务增加了挑战性。

在项目前期,我们积累了一批由写手撰写的文章标题与自动生成的正文内容,以此作为文本生成任务的训练数据,进行文章标题生成,使用BLEU作为标题生成评测指标。BLEU常用于机器翻译任务中,支持语言的独立性,可以与多个专家翻译比较,且支持合理程度上的词序的不同。在写稿机器人场景下,我们将生成的标题与写手写作的标题作比较,BLEU分数越高,表示生成的的标题越合理。 

第一版模型

我们在本任务中使用的是Google在2014年提出的seq2seq模型,通过引入Attention和BeamSearch机制提高生成效果。seq2seq是Encoder-Decoder结构的网络,其输入与输出均为不定长序列,可用于机器翻译、文本摘要、智能问答等任务中。下面是模型结构图:

基于seq2seq的Encoder-Decoder结构的优点是能够从大量优质文章中学习标题的句式以及标题与正文在语义上的关联性,形成端到端的文本生成模型,与模板相比大大增加了多样性。但是,过分地使用模型将会导致生成的标题不够稳定,经常出现标题与正文不匹配和句子不通顺的现象,所以在预测阶段,我们使用了BeamSearch解码方法进行优化。

seq2seq的解码过程是每次从词典中选择一个词语,常用的贪婪式解码是在每生成一个词语时做出当时的最优选择,所得到的结果不总是最优的回复。而BeamSearch解码每次生成N个最优的候选字,然后基于这N个候选完成整句话的解码,最终会得到N句话供选择,在最大程度上接近了最优解。

BeamSearch的解码过程如上图所示,其中纵轴为词典(Vocab),横轴为时间(time),此图中N=3。预测过程中,每得到一个字的同时,还会得到对应的置信度(概率的-log值),最终得到三个候选,并综合每一步的得分计算出整句话的预测概率,即图中的Score,通常情况下选择概率最高的即为最优标题。

在第一版模型中,我们将正文作为模型输入,标题作为模型输出,下面是生成标题的效果。

可以看到模型生成的标题语句通顺,但是其中红字部分标出的关键信息与正文不一致,例如文章正文中提到的汽车品牌车系是“现代维拉克斯”,而生成的标题却是“5门5座的丰田汉兰达来了解一下吧,价格才13万!”,标题中的品牌型号与正文的不相符。

我们注意到这些不一致的信息往往是槽位值,例如汽车品牌、型号、排量等,基于这个观察,我们进行了第二次的模型迭代。 

第二版模型

为了解决生成的标题中关键信息与正文不一致的问题,我们在第二版模型中采用槽位名替换关键信息的方式进行模型训练。

对训练数据,我们对标题做了槽位替换处理,将标题中出现的槽位值替换成槽位名,用带有槽位名的标签参与模型训练。在预测阶段,再将槽位名替换成具体的槽位值。这样,在保证生成标题的通顺性的前提下,大大提高了槽位值的准确性。最终的处理流程如下图所示:

第二版模型生成的标题效果如下图所示:

下图是两版模型的对比。

可以看到,相比第一版模型,第二版模型生成的标题既保证了语句的通顺程度,也保持了正文与标题的一致性。

两版模型的平均BLEU均较低,第二版模型的平均BLEU为0.2725,而第一版模型的平均BLEU为0.3103,这说明模型生成标题与真实标题相似度并不高,这是可以接受的结果。对于同一个正文,可使用的标题可以成百上千,但是它们不一定相似。BLEU只是作为一个调试模型的参考指标,而最终我们需要从公关部反馈的阅读量和推荐量来看标题生成的实际效果。从结果来看,第二版的模型保持了正文与标题的一致性以及语句的通顺程度,满足了我们的基本需求。

目前第二版模型已经投入线上使用,模型生成的标题作为写手写标题的参考,我们还会根据后续反馈的数据,对模型进一步地优化。另外,训练数据中低阅读量的数据占比较多,这导致自动生成的标题与爆款标题相比仍有一定的差距,后续累积到更多阅读量高的数据后,能够使模型标题与爆款标题差距更小。

正文生成

文章的正文由段落、首尾句子与图片组成。为了使文章能够批量、快速地生成,我们使用不同的帖子数据填入模板的方式来得到段落。这里提到的模板是一段长文本,它由多段通用性较强的句子拼接而成,每一类文章有多个模板。模板中包含了待填入数据的槽位,例如对于二手车类文章,槽位就包括品牌、价格、上牌时间等类型。如下图所示:

图中的红字部分即待填入的槽位,需要生成某一类文章的时候,查询相应的帖子的结构化数据,将数据处理成所需格式后填入模板中的槽位,得到段落。将段落与首尾句子组合,并从同一篇帖子选取4至6张图片,按照段落分布插入图片,最终得到正文。

写稿机器人接收到生成文章的请求后,会根据所生成的文章类别查询符合条件的帖子,获取帖子中的结构化数据,调整槽位所需的格式后将数据填入模板中的槽位,即可得到文章的正文。文章生成的流程设计如下图所示:

经过正文生成与标题生成这两个步骤之后,得到符合相关平台要求的文章格式,最终由写手发布到相关平台,效果图如下所示:


总结

本文重点介绍了58智能写稿机器人的设计与实现,并按照标题生成与正文生成两部分进行了展开。58智能写稿机器人项目上线后为公司公关部的业务宣传提供支持,周均发布数千篇文章并可获得数百万阅读量。标题生成还有很大的提升空间,例如可以引入阅读量、推荐量等特征,并利用反馈数据对模型进行迭代。后续我们将不断优化文章内容丰富性、标题生成的多样性,支持更多的业务与类目,助力公司的品牌与业务推广。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存