对于RL for Text Generation的一些理解

前言

新手上路,都是一些不成熟的见解,之后还会不断修改本篇,不断提升自我。

关于Text Generation

在讲强化学习在文本生成方面的应用之前,首先应该先从文本生成任务开始讲起,相较classification或者extraction方面的任务,generation会更加困难,我们普遍会在建立模型、建立loss function以及最后的evaluation中遇到困难。现如今的text generation模型主要建立在Seq2seq model上,所以我认为应该先从Seq2seq开始。

Seq2seq

Seq2seq模型主要建立在Encoder-decoder架构上。在encoder部分中,对于给定的一段输入 [ x 1 , x 2 , … , x n ] [x_1, x_2, \dots, x_n] [x1,x2,,xn],我们在句子的头和尾加入起始和终止符,然后将输入扔进word embedding,得到对应的词向量。

关于Reinforcement Learning

Free-running&Teacher-forcing

在文本生成任务当中,对于loss function的选择通常会成为一个问题。相较于free-running方法将模型的上一个state的输出作为下一个state的输入,teacher-forcing更加快速有效。
例如,在讲一段文本输入到Seq2seq的encoder中并且得到了encoder隐层的信息后,在decoder中每个词向量的输出都是基于encoder的隐层信息与上一个预测得到的输出词向量,在使用free-running的情况下,如果第一个预测得到的词向量对应的单词是错误的(即与应该得到的单词不符),后续的预测都基于这个错误的预测,在根基偏移的情况下之后的预测只会错的越来越离谱。
相比之下,如果使用teacher-forcing,每次decoder的输出都是基于encoder的隐层信息与上一个预测词向量的真实值(即上一个应该得到的单词),这样保证即使之前的预测出现错误,也不会对后续的预测产生影响。
但是使用teacher-forcing也是有坏处的,在减少之前预测结果对于当前预测的影响的同时,模型输出对于训练集输出目标的依赖也变得更强,当测试集与训练集的输出内容有明显差距的数据集中,这样的缺点会被放大。对于这样的缺点,同样有一些方法在一定程度上进行弥补,例如使用beam search,在每次预测时保留多个候选的输出序列。

Policy Gradient

在《A DEEP REINFORCED MODEL FOR ABSTRACTIVE
SUMMARIZATION》一文中,作者在建立生成模型时同样遇到了定义loss function的问题,作者首先使用了supervised learning with teacher forcing。对应的loss function如图所示,作者在文中同样描述到,teacher-forcing有两个弊端:

  • 使用时过于依赖训练集的目标结果,模型的泛化能力很差,在测试集没有目标结果的情况下表现不佳
  • 当数据集量非常大的时候,可能得到的输出token以及输出顺序应该有很多,因此也应该有很多可行的答案在这里插入图片描述

因此作者在此基础上引入了policy learning的loss function作为另一个指标,最后将两者混合得到最后的mixed training objective function。
与传统的监督学习中,我们通过比较模型预测值与真实值之间的差距进行梯度回传,调整模型参数使得模型预测值不断拟合真实值,但是许多情况下我们没有一个具体的差值来进行梯度回传,任务希望我们的模型在做出决策之后根据得到反馈的好坏来评估当前模型,这就是policy gradient的任务。
对于传统的监督学习的交叉熵函数,我们引入一个reward值来代替原有的标签值,对于可能采取的不同策略,我们采样一定的样本数,并且对可能的情况以及相对应得到的reward值进行加权求和去平均值,这样就得到了policy learning的loss function(如图)。


在本文中,作者采用类似的策略,将ROGUE值作为reward,得到了对应的loss function。考虑到使用policy gradient作为loss function得到的结果的质量和可读性可能会较差,作者将teacher-forcing的loss function与之加权平均,得到最后的混合loss function如下。在这里插入图片描述
在这里插入图片描述
在《Generating Better Search Engine Text Advertisements with Deep Reinforcement Learning》一文中,作者为了得到更加吸引人的广告生成模型同样使用了RL的loss function。模型是一个多输入多输出的encoder-decoder架构,采用了CTR(click through rate,点击率)作为reward function,可以得到一下的loss function:
在这里插入图片描述
然后将其与另外得到的交叉熵的损失函数进行加权平均,与前文相似,交叉熵损失函数更加有利于生成语句的质量与正确性,而policy gradient的损失函数更有利于提高CTR。

小结

RL的policy gradient方法在缺少连续label,而是在做出决策之后得到反馈的一些情况中有较好的适用性,其loss function建立的难点就在于找到合适的reward function。在本文中提到的两篇论文中,一篇将ROGUE作为reward,一篇将CTR作为reward,分别对不同的模型有不同的效果,可见reward的选取对policy gradient能否work有很大的影响。此外,policy gradient得到的结果对reward score有着较大提升的同时并不能对生成结果的正确性和可读性有保证,因此采用与传统的监督学习中交叉熵函数相结合的方法是比较好的做法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值