微调Word嵌入如何工作?

时间:2016-10-31 15:41:29

标签: machine-learning deep-learning word-embedding

我一直在阅读一些带有深度学习论文的NLP,发现微调似乎是一个简单但却令人困惑的概念。问here同样问题,但仍然不太清楚。

将预先训练过的单词嵌入微调到任务特定的单词嵌入,如 Y等论文中所述。 Kim,“用于句子分类的卷积神经网络”, K. S. Tai,R。Socher和C. D. Manning,“改进了树结构长短期记忆网络的语义表示”,只是简单提及而没有详细说明。

我的问题是:

使用word2vec或Glove生成的Word嵌入作为预训练的单词向量用作输入要素(X),用于解析或情感分析等下游任务,这意味着这些输入向量插入到某个特定任务的新神经网络模型中,在训练这个新模型的同时,我们可以以某种方式获得更新的特定于任务的单词嵌入。

但据我所知,在训练过程中,反向传播的作用是更新模型的权重(W),它不会改变输入要素(X),所以具体如何原始字嵌入得到微调?这些微调的载体来自哪里?

2 个答案:

答案 0 :(得分:5)

是的,如果您将嵌入向量作为输入,则无法微调嵌入(至少很容易)。但是,所有框架都提供某种EmbeddingLayer作为输入的整数,它是单词/字符/其他输入标记的类序数,并执行嵌入查找。这样的嵌入层非常类似于馈送单热编码类的完全连接层,但是更有效,因为它只需要在前后通道上从矩阵中获取/改变一行。更重要的是,它允许学习嵌入的权重。

所以经典的方法是将实际的类提供给网络而不是嵌入,并在整个网络前面加上一个嵌入层,使用word2vec / glove初始化,并继续学习权重。在开始微调它们之前,在开始时将它们冻结几次迭代也是合理的,直到网络的其余部分开始对它们做一些合理的事情。

答案 1 :(得分:0)

一种热编码是构建嵌入初始层的基础。训练网络后,一种热编码本质上将用作表查找。在微调步骤中,您可以选择特定作品的数据,并提及在使用诸如此类的优化器定义优化器时需要微调的变量

embedding_variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope="embedding_variables/kernel")
ft_optimizer = tf.train.AdamOptimizer(learning_rate=0.001,name='FineTune')
ft_op = ft_optimizer.minimize(mean_loss,var_list=embedding_variables)

where "embedding_variables/kernel" is the name of the next layer after one-hot encoding.