论文信息
- Paper: Generating Better Search Engine Text Advertisements with Deep Reinforcement Learning
- Source: KDD 2019
- Link: https://dl.acm.org/doi/pdf/10.1145/3292500.3330754
引言
强化学习经常被用于直接优化一些不可微分的奖励函数,例如在游戏中agent的得分等。本文中,作者将强化学习应用于广告文案生成,希望模型生成的广告文案在语义通顺的前提下更加的吸引人。模型通过将点击率(Click-through Rate)作为强化学习的reward应用于传统的LSTM模型,使得模型结果的点击率提升了6.7个百分点,同时保持了和目标结果的交叉熵没有明显的下滑,人工标注同样证明生成的广告文案相较于原本更加的吸引人。
任务是什么
模型的目标是生成一段广告文案,包括一个标题和一段广告文案主体,模型的输入是商品的Landing Page,一段长文本,其中包含了很多关于商品的信息(商品特征、价格、官网地址、线下商城信息等),同样给出了人工撰写的对应的广告文案供模型进行监督学习。模型为每个页面生成的独特的广告文案可以使得互联网巨头同时推销数千件商品,妈妈再也不用担心广告文案来不及写啦!
为什么要用强化学习
传统的监督学习下的语言模型(例如seq2seq)是将源文件和目标文件输入,语言模型往往学习到的是原始商品信息和广告语之间的关系,可想而知,一个好的语言模型最终生成的文案会十分接近人们自己手写的。但是!没错,模型的表现永远没有办法超越人类,而目标是星辰大海的我们想要一个比人类更优秀的文案写手,于是强化学习成为了解决的方法。具体操作我们之后介绍!
模型长什么样
模型的主体由两部分组成,第一部分是一个LSTM的Seq2seq模型,有意思的是由于需要生成文案的标题和主体,两者是分别做encode和decode的,两者的联系主要体现在hidden state的叠加。给定一段输入x由标题和主体两部分组成,预测的结果y也由标题和主体组成。
Seq2seq的loss即为简单的预测结果和目标之间的交叉熵,loss function可以表示为最小化以下的公式。
模型的第二部分是强化学习,作者使用了一个预训练好的模型来对生成的广告文案进行打分,这个预训练模型也是在类似的广告文案上训练得到的,用来预测文案的点击率,我们需要达成一个共识,当一条文案的点击率较高时,代表着这条文案同样是吸引人的。在这里,打分模型仅用于打分,换句话说,他是不参与模型的梯度回传的,他就像一个冷酷无情的评委,不会因为上一句广告文案太差就优待之后的文案。同样,我们定义强化学习部分的loss function。
最终模型优化的总体loss function由以上两个loss加权求和得到,权值由 γ \gamma γ控制,来平衡两者的权重。
我全都要
为什么我们需要两个部分相结合,而不是取其中的一部分?或者干脆用rl来做文本生成?实验发现,当模型对rl过拟合时,生成的结果会出现语句不通顺,出现较多重复词的现象,这是由于rl打分模型本身的缺陷导致的,在rl模型学习预测点击率时,他发现一些分数较高的文案中普遍存在着一些“积极正面”的词汇,在为我们的模型打分时,他更倾向于生成了这些词汇的文案,结果可想而知,模型生成的文案遍布着这些词汇,非常影响我们的阅读体验,大家都不买我们的产品啦!
一些有意思的细节
可并行的Encoder与Decoder
作者使用了两个双向的LSTM分别encode标题和主体,所得的hidden vector由正反的LSTM hidden state拼接得到,这样的做法在Bert中也有体现。
在完成标题和主体的encode之后将两者的hidden state拼接得到整体的hidden state,用于decode生成文案。
Attention的使用
本文同样使用了时髦的attention机制,由Luong attention以及scale过的 self-attention计算得到,虽然加入了attention,不过综合表现还是远远不如bert,在之后的一些工作中,大家也都更倾向于使用bert加rl的方式进行文本生成。
Self Critic很重要
本文的一大亮点是使用了self critic算法,之前在介绍模型时我们介绍了模型的两个部分,却没有提及模型时怎样进行连接的,根据直觉,我们将模型的decode结果输入到rl模型中进行打分,在decode时,我们的模型总是趋向于生成最好的结果(在LSTM预测的词表分布中选择概率最高的词汇作为输出),看似最佳的结果同样是最死板的,他就像班里的学霸每次考试都选正确的答案,却不关注那些虽然是错误的但是可能有奇效的答案(没错我还是会选正确答案的)。作者在decode时除了将概率最高的词汇作为输出,还会另外decode一个序列,其中的词汇都是根据词表词汇概率采样出来的,这样decode结果不会总是选择概率最高的词汇,而是可能选择一些其他的单词。在rl打分时,如果采样结果得分高于概率最高的结果,就采用采样结果当作答案。
实验
本文的实验使用的是Bing Ads的数据集,其中训练集有30w条,此外测试集和检验集分别都是1w条。作者先在没有rl的基础上训练了一个baseline模型,又在rl的基础上训练了一段时间,得到了以下的结果。相较于之前的模型,结果的点击率有了很明显的提升。
这个实验结果还是告诉了我们很多信息的,第一, γ \gamma γ作为平衡模型两部分权重的参数,对结果的影响还是很大的。第二,模型还有很大的提升空间,human written的结果相比于模型生成结果,点击率还是高出很多的,这说明减少和人工撰写的文案的交叉熵的目标和提升结果点击率其实不是完全冲突的,至少在超过人工结果的点击率之前,我们依旧可以将减少交叉熵作为我们模型的目标之一。在人工标注的2000条实验结果中我们可以得出相似的结论。
我的一些观点
看完对本文的总结之后,似乎会觉得强化学习真不错,点击率确实提升显著,我把LSTM换成bert又可以发论文啦?其实仔细一想还是存在着一些问题,首先作为强化学习的打分模型和作为评判标准的打分器是同一个模型,颇有些参加大赛却发现比赛裁判竟然是平时的教练的感觉,当然作为弥补作者采用了人工标注的介入。
在进行论文复现时,发现模型的计算成本过大,没训练一句文本,模型就要decode4次(标题和主体,两种采样方式),导致模型训练一个epoch就要大量的时间,这些问题都是有待解决的。
不过总体而言,模型还是做出了一些有意思的贡献,为之后强化学习应用于文本生成提供了很多新的思路。
参考文献
J Weston Hughes, Keng-hao Chang, and Ruofei Zhang. Generating better search engine text advertisements with deep reinforcement learning.In Proceedings of the 25th ACM SIGKDD International Conference onKnowledge Discovery & Data Mining, pages 2269–2277, 2019.