论文学习:word2vec Parameter Learning Explained
这篇论文详细的介绍了 word2vec 参数的计算更新步骤,就像作者在摘要里所写的一样,Mikolov 的论文简化了公式的推导,所以文章显得比较晦涩。整篇论文可以分为三个部分吧,分别是:
- CBOW模型以及Skip-Gram模型在单输入以及多输入的情况下参数更新过程(这是没有使用优化计算技巧的情况)
- 两种优化计算的方式:Hierarchical Softmax 以及 Native Sampling 情况下参数的更新过程
- BP算法参数的更新过程(这一部分在附录里,算是补充内容,姑且算作第三部分吧)
其中,因为很多方式的计算过程是一样的,所以论文着重点在第一部分,准确说是 CBOW模型的在单个输入的情况下参数的更新过程。下面简单介绍我在学习论文时候的一些小问题,当然,具体的计算过程还是要看原论文。
第一部分 CBOW模型以及Skip-Gram模型的参数计算过程
我觉得注意点有:
-
首先要明确的是几个参数的含义,像 VVV 表示的是我们词汇表的长度, NNN 是最终训练得到的词向量的维数,也就是对于每个单词(字),对应的是一个 (1, N) 或者说是 (N, 1) 的词向量。
-
第二点要注意这里计算过程中使用的向量都是列向量的形式,例如输入是一个 (V, 1) 的 one-hot 编码的列向量,在 input vector 和 output vector 之间的中间结果也是一个 (N, 1)的列向量,可能是我刚开始学习论文的原因,总觉得这样计算过程不算很直观,这样的结果是公式中出现了很多转置符号来保证结果的尺寸,不过,要理解计算过程也不难,例如 在得到中间变量 hhh 的计算中: h=WT.xh = WT.xh=WT.x 这里结合每一部分的意义来理解,也就是从矩阵 WWW (也就是 input vector 矩阵)中拿出来要训练的那个词向量。第二个过程也是类的意义,其实理解一下矩阵乘法就好。
-
第三点是参数的更新过程,注意这里的损失函数的定义方式,在这里,对于输入的一个样本,输出的是一个长度为 VVV 的向量,表示的是对于这个输入的样本属于某个单词的度量,例如 V=(1.2, 3.4, 0.3, −2.3...)V = (1.2,\ 3.4,\ 0.3,\ -2.3...)V=(1.2, 3.4, 0.3, −2.3...),当然为了更直观,这些数据会通过softmax方式处理为一个概率分布,因此,将目标定为使得正确的分类概率最大即可,也就是论文中的:
max(wO∣wI)=max yj∗ max(w_{O}|w_{I})= max \ y_{j^{*}} max(wO∣wI)=max yj∗
这里的 yj∗y_{j^{*}}yj∗ 也就是输入数据正确对应的分类(具体来说,比如在“天气好”,如果分成“天气”和“好”两个词语的话,在CBOW中可能是使用“天气”来预测“好”,那么输入是“天气”,那么经