从今天开始对cs224n的学习进行记录,争取可以把每一个内容弄明白!!!
关于word2vec 以前只知道是一种得到词向量的算法:
两个算法:
- Skip-grams (SG):预测上下文
- Continuous Bag of Words (CBOW):预测目标单词
两种稍微高效一些的训练方法:
- Hierarchical softmax
- Negative sampling
Skip-gram理解
这里是已banking为中心词 预测前后的四个词,窗口大小是5
目标函数是希望所有位置的预测结果的乘积最大:
取负对数得到损失函数(Loss function = cost function = objective function 都是损失函数):
老师的这张图真的太好了,把我多年的困惑给搞明白:最左边是中心词
的one-hot向量维度是V*1(V是训练的词向量词库的大小,很大!!!),乘以center word的W参数,维度是d*V(d是我希望得到的词向量的长度,一般是300左右)。得到一个hidden layer的结果
,一个d*1维的向量,
乘以另一个context word的矩阵W'得到中心词对于词库中每一个词的“相似度”,这里得到的是一个V*1的列,每一行的大小是
,这里的
代表 w' 的第i 行
是hidden layer的结果。然后对相似度取softmax得到概率,与答案对比计算损失。
这两个矩阵都含有V个词向量,也就是说同一个词有两个词向量,哪个作为最终的、提供给其他应用使用的embeddings呢?有两种策略,要么加起来,要么拼接起来。在CS224n的编程练习中,采取的是拼接起来的策略:
这里 预测到的某个上下文条件概率
可由softmax得到:
这里o是输出的上下文词语中的确切某一个,c是中间的词语。
是词向量(参数矩阵w' 对应的第o行),
是词向量(参数矩阵w' 对应的第w行),
是中心词的one-hot向量乘以参数矩阵W得到的hidden layer 词向量。
W中的向量叫input vector,W'中的向量叫output vector。
训练模型:计算参数向量的梯度
把所有参数写进向量θ,对d维的词向量和大小V的词表来讲,有:
因为是有W、W'两个参数矩阵,所以所有参数θ的维度是2d*V
然后计算梯度。
跟着manning老师手推了一下,加强理解
更新参数
大概就是这样吧,主要跟着老师把公式捋了一下。
接下来试试把
- Skip-grams (SG):预测上下文
- Continuous Bag of Words (CBOW):预测目标单词
- Hierarchical softmax
- Negative sampling
这两种算法和两种训练方法结合捋一下。