Fine-tuning Word Embeddings 是如何工作的?

How does Fine-tuning Word Embeddings work?

我看了一些NLP with Deep Learning的论文,发现Fine-tuning似乎是一个简单但又容易混淆的概念。 here 也有人问过同样的问题,但还是不太清楚。

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

我的问题是:

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

但据我所知,在训练过程中,反向传播所做的只是更新模型的权重(W),它不会改变输入特征(X),所以究竟如何原始词嵌入是否得到微调?这些经过微调的向量从何而来?

是的,如果您将嵌入向量作为输入,则无法微调嵌入(至少很容易)。但是,所有框架都提供了某种类型的 EmbeddingLayer,它将一个整数作为输入,该整数是 word/character/other 输入标记的 class 序数,并执行嵌入查找。这样的嵌入层与全连接层非常相似,全连接层被输入单热编码 class,但效率更高,因为它只需要 fetch/change 来自矩阵的一行和回传球。更重要的是,它允许学习嵌入的权重。

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

一种热编码是构建嵌入初始层的基础。一旦你训练了网络,一个热编码基本上用作 table 查找。在微调步骤中,您可以 select 特定作品的数据,并在使用类似这样的方法定义优化器时提及需要微调的变量

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.