文本分类的一种对抗训练方法
最近阅读了有关文本分类的文章,其中有一篇名为《Adversarail Training for Semi-supervised Text Classification》, 其主要思路实在文本训练时增加了一个扰动因子,即在embedding层加入一个小的扰动,发现训练的结果比不加要好很多。 模型的网络结构如下图: 下面就介绍一下这个对抗因子r的生成过程: 在进入lstm网络前先进行从w到v的计算,即将wordembedding 归一化: 然后定义模型的损失函数,令输入为x,参数为θ,R adv 为对抗训练因子,损失函数为: 其中一个细节,虽然 θ ˆ 是θ的复制,但是它是计算扰动的过程,不会参与到计算梯度的反向传播算法中。 然后就是求扰动: 先对表达式求导得到倒数g,然后对倒数g进行l2正则化的线性变换。 至此扰动则计算完成然后加入之前的wordembedding中参与模型训练。 下面则是模型的代码部分: #构建adversarailLSTM模型 class AdversarailLSTM(object): def __init__(self, config, wordEmbedding, indexFreqs): #定义输入 self.inputX = tf.placeholder(tf.int32, [None, config.sequenceLength], name=