word2vec可以作为预训练模型进行迁移学习文本特征提取吗
参考GPT和自己的思路:
是的,word2vec是一种非常常用的预训练模型,在自然语言处理领域有很高的应用价值。可以通过将预训练的模型作为初始模型,然后通过微调来提高模型在特定任务上的性能。因此,可以将word2vec作为预训练模型来进行迁移学习,用于文本特征提取。
针对word2vec的模型实现,又有两种不同的框架:
(1) 一种是 Hierarchical softmax 框架,这个框架的基础是Huffman 树,可以参考这个:word2vec 学习总结——基础知识。大概的过程是:
step 1:根据语料中的词频建立一颗Huffman 树,树的每个叶子节点对应词典中的一个词。
step 2:对于每一个训练样本 {x=(w_t-1,w_t+1,w_t-2,w_t+2 ),y=w_t},找到Huffman 树的根节点到叶子节点 w_t 的路径 l_w,这个路径上的每一个节点都是一个二分类器。
step 3:输入的 x 的几个词求和后形成新的向量作为输入,然后依次经过路径 l_w 上的每一个非叶子节点,最终到达w_t。
step 4:在这条路径的每一个节点上都会根据子节点的选择产生一个概率值,这些概率相乘之后作为最后的似然值,计算梯度,更新路径上非叶子节点的分类器的参数。
具体的目标函数、梯度计算、参数更新,可以参考这篇文章:word2vec 中的数学原理详解(四)基于 Hierarchical Softmax 的模型
(2)另一种是 negative sampling 框架。
这个框架的基础是负采样,感觉这个框架下的计算跟Hierarchical softmax 框架下的计算非常像,只是在构造目标函数时的方式不一样(感觉这句话好废话),主要的过程如下:
step 1:对于每一个输入的训练样本 {x=(w_t-1,w_t+1,w_t-2,w_t+2 ),y=w_t},把它当做正样本。在词典中采样m个词,和x一起形成负样本
step 2:针对每个目标词(包括正样本和负样本),都有其对应的一个参数 θ,训练样本的 x 与相应的θ相乘,然后经过sigmod计算到对应y的概率值
step 3:第二步中的概率值相乘得到似然值,根据梯度上升更新各个参数 θ,以及输入的词向量。
具体的负采样怎么做,目标函数、梯度计算、参数更新,可以参考这篇文章:word2vec 中的数学原理详解(五)基于 Negative Sampling 的模型
与Hierarchical softmax 框架相比,negative sampling 框架不再使用Huffman树,而是采用随机负采样,能大幅度提高性能,同时也能在词向量的质量上有所提高。
参考文章:
(1)word2vec 中的数学原理详解:超级详细的word2vec模型的讲解
(2)[NLP] 秒懂词向量Word2vec的本质:从另一种“输入向量”和“输出向量”的角度去理解word2vec,也是很经典的一种理解方式