小叽导读:淘系购物平台主要依靠淘宝达人撰写商品推荐文案以吸引买家,但这项工作需要高昂的人力成本,且对于同一件商品,无法为偏好不同属性的买家创作有针对性的推荐文案。
1688作为B2B的平台,面向的用户是以商人为主体的买家,此前在个性化推荐方面数据积累处于空白状态,靠人力来填补这一空白并不现实,因此,智能文案生成将在此发挥巨大作用。接下来,我们一起探寻。
一、应用场景
我们计划将智能文案生成应用于1688平台的以下场景:
一是多商品智能清单生成,该场景目前已经上线,应用于每日商机的商机推荐理由。如下图所示:
前面采用一段B类风格的模板匹配,后面的“减龄背带裙,让你重返十八岁”即为生成得到。同时,该技术还将应用于920大促的智能清单生成。
二是个性化副标题生成,计划应用于个推场景中,目标是实现副标题的千人千面,让每个用户看到对自己最有吸引力的副标题,如下图所示:
三是单商品推荐文案生成,计划应用于应用于智慧市场的单品推荐,该场景是本文的重点优化方向。
如何提高文案生成的准确性与多样性,一直是智能文案生成在1688平台上落地应用过程中的业务痛点,而重复问题也是NLG问题的通病。本文将着重从这三个方面,提出生成算法的改进方案。
二、相关工作
自然语言生成(NLG)技术已被广泛应用于对话系统、文本摘要、图像描述等领域。自Seq2Seq模型提出以来,学术界与工业界都以其为基础做了很多改进,如attention机制的引入、copy机制的触发、coverage的限制等。本文以带attention机制的Seq2Seq模型为Baseline。
在训练时,为了保证效率,我们需要压缩词表,一些低频长尾词就会变成unknown,为了解决这种未登录词的问题,Abigail See等人提出了Pointer-Generator [1],其本质是带attention的Seq2Seq模型与pointer network的融合模型,一方面通过Seq2Seq部分保持模型的抽象能力,另一方面通过pointer network,按一定概率直接从原文中取词,缓解oov问题,提高准确度。这在我们的应用场景中也十分必要,比如标题中出现的品牌词、属性词,以及当下热点比如抖音、ins上的新词,我们在生成的推荐文案时就可以直接copy过来。Pointer-Generator模型的网络结构如下:
模型的encoder部分采用一个单层双向的LSTM,输入embedding后的词向量序列,输出编码后的状态序列;decoder部分采用一个单层单向LSTM,输出解码的状态序列,用于当前步的预测;attention是针对原文的概率分布,目的在于告诉模型在当前步的预测过程中,原文中的哪些词更重要,其计算公式为:
在计算出当前步的attention分布后,对encoder输出的隐层做加权求和,获得原文的动态表示,称为语境向量:
Seq2Seq部分预测得到的词表概率分布由decoder输出的解码状态序列和语境向量共同决定:
模型最终的词表概率分布,由Seq2Seq部分与point network部分分别输出的词表分布按概率组合得到,其中,point network部分的输出直接采用了前面计算的attention分布,实现了参数复用:
其中生成概率由预测的每一步动态计算得到:
三、模型存在的问题与改进方案
1. 生成的文案与商品类目不匹配
在之前的智能文案生成过程中,我们时常会遇到生成的文案与其类目不匹配的问题。这是由于标题中部分attention较高的词,可能同时适用于不同类目商品的描述。例如,输入标题为“精品国货 抗皱 通用 去眼袋 去黑眼圈 广东省 弹力 眼霜 提拉紧致 眼纹”,之前的生成模型输出的推荐文案为想要拥有大长腿,眼霜少不了。根据输出的attention信息,可以得知是“提拉紧致”一词让文案有了“大长腿”的错误生成,原因是其同时可用于女装类目下紧身裤等的描述。
针对这一问题,我们的解决方案是在decoder端后接Text-CNN分类网络,将每一步decoder输出的概率最大的词连接起来,embedding后作为分类网络的输入,将商品的叶子类目信息编号并one-hot处理后作为标签,分类loss采用交叉熵。考虑到训练起始时生成结果较差,会影响分类模型的收敛,这里先训练生成模型至收敛,再加入分类loss做fine-tune,具体结构如下:
2. 生成的文案缺乏多样性
之前的生成模型还会出现对关键词相似的标题产生相同推荐文案的问题。例如,根据标题 “打底 高档 2016 女装 仿羊绒 灯笼袖 秋冬 羊毛 新款 韩版 针织衫 高领 套头与标题米白 羊绒衫 黑色 混纺类 针织衫 女款毛衣 羊毛衣 明星同款 修身 普通毛线 套头 百搭 打底 高领 深灰色 纯色 ”生成的文案均为100纯山羊绒,手感柔软,织法细腻,羊毛材质保暖性好,穿着舒适服帖,高领设计,穿着柔软贴脖。这是由于两个标题attention偏高的词“羊绒”、“羊毛”、“高领”等均相同所致。原模型只以标题分词的id序列为输入,而商品标题较短,输入信息非常有限,且标题中关键词重复度高,正是导致生成文案多样性不足的直接原因。
为丰富输入信息,我们希望加入标题的n-gram特征,具体做法是将分词的id序列通过不同卷积核大小的卷积层。这里需要注意的是,由于模型存在copy机制,且在实现中以attention分布作为从原文中取词的词表概率分布,若直接在输入端加卷积层,会导致触发copy机制时无法匹配到原文中的词。因此,我们的做法是,保留原模型Bi-LSTM的encoder结构,同时加入不同卷积核大小的Conv + Bi-LSTM的encoder结构,将多个encoder输出的state合并后输入decoder端,具体结构如下:
此外,生成的推荐文案要追求千人千面,可以考虑通过在decoder端加入用户特征(如:用户的相关搜索词)来解决。由于1688平台缺乏相关文案的积累,我们的训练数据采用的是淘宝网的商品标题与达人推荐文案,这会导致生成的推荐文案更多面向的是普通消费者群体而非商人群体,采用在decode端加入用户特征的方式,加入B(Business people)类用户的常用搜索词等,还可以在一定程度上解决生成文案偏C(Customer)的问题。
3. 重复问题
重复问题是NLG领域的通病。我们的想法是从模型端和beam search端两个层面去解决这个问题。从模型端去解决是为了让beam search时有更多的优质解,而从beam search端去解决其实是从已有的解中尽可能选出排序最优的。这就相当于我们的推荐场景中,前者是在优化召回,而后者是在优化排序。模型层面上,我们参考了Pointer-Generator模型提出的方案,在训练至收敛的生成模型上采用coverage attention + coverage loss的方式做fine-tune。coverage attention最先由Tu等人 [2]提出,引入coverage向量:
即过去所有预测步计算的attention分布的累加和,记录了模型已经关注过原文的哪些词,将其加入到当前步的attention计算中:
如此,模型在计算当前步的attention分布时,会考虑之前已关注的词,从而避免连续关注同样的词。原文中还定义了coverage loss以惩罚重复关注同一位置:
值得注意的是,其中的是无边界的增长函数,而由softmax得到,上限为1,当decode序列足够长时,可能大于1,该loss项将趋于无用,虽然它在模型原应用场景(文本摘要)中有效,但并不适用于我们由短标题生成长推荐文本的应用场景。
因此,最终我们没有采用原文中fine-tune的方式,而是在训练一开始就将coverage向量加入到attention的计算中,取得了较好的实验效果。
而在Beam Search端,我们参考了《Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation》提出的score计算方式 [3]:
其中,用对长度做归一化,否则只按概率值算,越长的句子往往概率越小,得分越低。我们可以通过调节α的值来选择对长句或短句的偏好,在0-1范围内,α越小模型越倾向于选择短句输出。用约束重复关注,但该约束项同样存在上文提到的问题,即当decode序列较长时,可能超过1,起不到约束作用,因此,我们在实现的时候改成了对之前每步的attention求均值而非求和,改进后的重复约束项如下:
同时,我们加入了不重复生成的词数占总生成词数的比例作为新的重复约束项,使重复指标得到了大幅优化。
综合上述方案,我们改进后的模型结构图如下:
中间虚线框出的是带Attention机制的Seq2Seq结构,即我们的Baseline,红色部分为加入的copy机制,黄色部分为我们对模型添加的优化结构。
四、实验结果
1. 准确性评估
本文主要采用的是BLEU和Word Accuracy两项指标评估生成文案的准确性。BLEU采用N-gram的匹配规则,比较生成文本和reference之间n元词组相似性的占比。Word accuracy为正确预测的词占总词数的比例。不同算法的准确性指标统计如下:
从上表可以看出,我们可以看到,与不带copy机制的Attention Seq2Seq相比,Pointer-Generator在各项指标上都有大幅度的提升。而加入了Text CNN和卷积输入之后,指标有了进一步的提升,可见,无论是对生成文案的类目进行约束,还是加入卷积特征,丰富输入信息都能提高文案生成的准确性。
关于之前类目生成不准确的例子,现模型的生成结果如下:
标题:精品国货 抗皱 通用 去眼袋 去黑眼圈 广东省 弹力 眼霜 提拉紧致 眼纹
原模型生成结果:想要拥有大长腿,眼霜少不了
现模型生成结果:这款提拉紧致抗皱通用眼霜,可有效改善眼周老化,皮肤松弛,皱纹等问题。
可见生成文案类目混淆的问题已得到较好的解决。
2. 多样性评估
考虑到前人没有给出过多样性情况的公开评价指标,本文通过统计3000条测试样本中生成重复样本的比例来评估生成的多样性,如下表所示:
我们可以看到,加入copy机制和加入卷积输入都可以降低对不同标题生成相同文案的比例,提高生成的多样性。同样以之前的bad case为例:
标题1:打底 高档 2016 女装 仿羊绒 灯笼袖 秋冬 羊毛 新款 韩版 针织衫 高领 套头
标题2:米白 羊绒衫 黑色 混纺类 针织衫 女款毛衣 羊毛衣 明星同款
原模型生成结果:100纯山羊绒,手感柔软,织法细腻,羊毛材质保暖性好,穿着舒适服帖,高领设计,穿着柔软贴脖
现模型生成结果1:高密高纯棉面料,亲肤舒适,高领套头设计,时尚大气
现模型生成结果2:明星同款羊毛衣,修身百搭,穿着舒适简约
原先的生成相同文案的两个标题,在改进后的模型下,也能生成各具自身特性的文案了。
3. 重复情况评估
重复情况通用的评价指标,是统计unigram、bigram、trigram在每行的重复数的累加和,分别除以总行数和总词数,除以总行数记为line rate,除以总词数记为word rate,从模型端与beam search端优化后的结果对比见下表:
从上表可以看出,加入Coverage Attention后,重复情况得到了轻微的改善,而最有效的是在beam search端加入约束,加入之后重复问题基本就不存在了。同时我们发现,加入卷积输入也能进一步改善重复情况。还是通过之前的bad case来看一下改进后的效果:
标题:套头 藏青色 黑色 打底 休闲 女式毛衣 腈纶 中长款 冬季 2017 羊毛衫 高温定型 酒红色 中老年 针织衫
原模型生成结果:这是一款非常百搭的一款打底针织衫,采用优质的纯棉面料,柔软舒适,亲肤透气,亲肤透气,柔软舒适,亲肤透气,舒适透气。
现模型生成结果:黑色与白色的完美结合,在视觉上给人温暖舒适的感觉 ,良好的吸湿透气性与实用性。
可以看到现在生成的文案非常通顺连贯,完全没有重复问题。
五、总结与展望
1.本文工作总结
本文主要根据智能文案生成在1688平台上落地应用时遇到的业务痛点——生成的文案与商品类目不匹配、生成的文案缺乏多样性以及NLG问题的通病——重复问题,提出了合理的模型改进方案,提升了生成的准确性与多样性,改善了生成文本的重复情况。
2. 未来的优化方向
运行效率的提升。目前在Beam Size=4的情况下,生成一条数据大概需要1s的时间,若需要在全量的数据上去做生成和更新,可能尚不能达到T+1的时效性。考虑将模型改成分布式decode,并行生成提升效率。
B类风格的优化。生成文案偏C仍然是一个亟待解决的问题,由于B类用户与C类用户的关键性差别在搜索词上体现并不明显,通过在decoder端对B类用户热门搜索词做加权的方式并不能彻底解决该问题,还需要更多数据层面的支持,使生成文案的风格可控。
希望未来智能文案生成能在1688平台上发挥更大的作用,将落地应用扩展到广告文案生成、节日清单个性化祝福语生成等更多的场景中,降低人力与运营成本。
致谢
感谢霍博和CBU新零售算法团队的小伙伴们一个多月以来的鼓励与支持,特别感谢琎捷师兄、顾岩师兄的指导!
原文发布时间为:2018-08-22
本文作者:王姿雯
本文来自云栖社区合作伙伴“阿里巴巴机器智能”,了解相关信息可以关注“ 阿里巴巴机器智能”。