CS224N-2019笔记1.Word Vector

寒假时间花了十多天看完了CS22N 2019的19节课程,边看视频边做笔记写了20多页的A4纸,纸质稿写完了就容易记完就丢弃了,所以把它写成电子版一并再写写个人心得整理一下。


1. Word Vector

one-hot向量
vw1=[1,0,0,0,0,0,...]Rvocabsize v_{w1} = [1,0,0,0,0,0,...]\in R^{vocabsize}
vw2=[0,1,0,0,0,0,...]Rvocabsize v_{w2} = [0,1,0,0,0,0,...]\in R^{vocabsize}
该单词对应所在元素为1,向量中其他元素均为0
one-hot十分稀疏 ,维度较大。sparse vector,人们希望构建dense vector,大多数元素不为零且维度较小的向量,并且希望在相似的context下的word vector也较为相似。

于是有了Word2Vec(2013)
核心思想就是已知我们有了很大的文本库(corpus),当我们用固定窗口不断的扫过文本库的句子时,我们有位于中间的center word c及其周边的单词们context words o, 而它们的相似度可用给定c的情况下o的条件概率来表示,我们不断的调整word vector使得这个概率最大化。

P(O=oC=c)=exp(uoTvc)wVocabexp(uwTvc) P(O=o| C=c) = \frac {exp(u_{o}^{T}v_{c})}{\sum_{w\in Vocab}exp(u_{w}^{T}v_{c})}

条件概率就可写作center word和context word的dot product再对其做softmax运算
分母可以看作是center word对每个词都做点积在求其exp再把所有加和

为了运用到neutral network中,机器学习领域通用招数都是对问题考虑后建模构造出目标函数,从而求得一组最优的参数,利用这个参数用模型进行预测。(这里模型是Skip-Gram model,另一种word2Vec是CBOW模型)
利用最大似然可把目标函数写成
L(θ)=wCp(Context(w)w)L(θ)=\prod_{w \in C} p(Context(w)|w)
C代表Corpus,Context(w)代表w的上下文(CBOW模型把w和Context(w)换个位置就行了)
这里CS224N中的整体的似然率表示成了

L(θ)=t=1Tmjmp(wt+jwt;θ)L(θ)=\prod_{t=1}^T\prod_{-m≤j≤m} p(w_{t+j}|w_{t};θ)
为了方便计算将目标函数添加了log和负号,变成累加和和转化为求极小值

J(θ)=1TlogL(θ)=1Tt=1Tmjmlogp(wt+jwt;θ)J(θ)=-\frac {1}{T}\log L(θ) = -\frac {1}{T} \sum_{t=1}^T\sum_{-m≤j≤m} \log p(w_{t+j}|w_{t};θ)

有了目标函数以及每个条件概率的表现形式,我们就可以利用梯度下降算法来逐步求得使目标函数最小的word vector的形式了。

通俗理解word2vec (shik-gram模型)
word2vec其实是很简单的只有三层结构的神经网络
CS224N-2019笔记1.Word Vector
skip-gram网络结构,V是vocabSize,x是one-hot编码,y是这个V个词上输出的概率
x,yRVx,y \in R^{V}
在skip-gram中y再经过softmax后其实就是预测的每个环境词的概率,我们希望和真实的y的one-hot编码一致,其实这一步就对应着极大化目标函数argmax L(θ)或者是极小化损失函数argmin J(θ),其中
L(θ)=t=1Tmjmp(wt+jwt;θ)L(θ)=\prod_{t=1}^T\prod_{-m≤j≤m} p(w_{t+j}|w_{t};θ)

J(θ)=1TlogL(θ)=1Tt=1Tmjmlogp(wt+jwt;θ)J(θ)=-\frac {1}{T}\log L(θ) = -\frac {1}{T} \sum_{t=1}^T\sum_{-m≤j≤m} \log p(w_{t+j}|w_{t};θ)

p(O=oC=c)=exp(uoTvc)wVocabexp(uwTvc) p(O=o| C=c) = \frac {exp(u_{o}^{T}v_{c})}{\sum_{w\in Vocab}exp(u_{w}^{T}v_{c})}

当模型训练完后,最后得到的其实是神经网络的权重(lookup table),每一行就对应着一个word embedding vector。

边角料(鬼周刊):每次计算出的隐藏层其实就是公式中的vc,公式中的uw,uo其实是输出向量,这也是为什么中心词向量和环境词向量用不同字母表示的原因,它们不在同一个矩阵中,其实隐含层到输出层的权重也可以作为lookup Table,也是一种词向量的表示方式,不过我们一般使用的是输入层到隐藏层的权重(Mikolov, Distributed Representations of Sentences and Documents),手绘理解图如下:
CS224N-2019笔记1.Word Vector

当y由多个词时,网络结构如下CS224N-2019笔记1.Word Vector
CS224N-2019笔记1.Word Vector
可以看成是 单个x->单个y 模型的并联,cost function 是单个 cost function 的累加(取log之后)(Xin Rong,『word2vec Parameter Learning Explained』)