刚开始学cs224n,虽然manning很可爱讲得也很慢但还是 听不懂,读完阅读材料感觉好了不少。
贴个pdf
算法
共现概率比例
共现矩阵中概率的比例可以编码词的meaning components
比如对于一个跟词i很接近但是跟词j不接近的词k,
P
i
k
/
P
j
k
P_{ik}/P_{jk}
Pik/Pjk 应当很大;如果k跟词j很接近但是跟i不接近,那么
P
i
k
/
P
j
k
P_{ik}/P_{jk}
Pik/Pjk 应该很小;如果k跟两个词都很接近或者都不太接近,那么
P
i
k
/
P
j
k
P_{ik}/P_{jk}
Pik/Pjk 应该接近于1。记为
F
(
w
i
,
w
j
,
w
~
k
)
=
P
i
k
P
j
k
F(w_i,w_j,\tilde w_k)=\frac{P_{ik}}{P_{jk}}
F(wi,wj,w~k)=PjkPik
Log-bilinear model
作者希望F可以将这个概率比例的信息编码到词向量空间,而词向量空间是线性空间,所以我们可以基于向量的差距改写F,
F ( w i − w j , w ~ k ) = P i k P j k F(w_i-w_j,\tilde w_k)=\frac{P_{ik}}{P_{jk}} F(wi−wj,w~k)=PjkPik
并且,函数的输入是向量,而输出是标量。理论上可以将F定义为一个类似于神经网络的函数,但为了保留线性的性质和防止混淆向量维数,作者使用点积
F ( ( w i − w j ) T w ~ k ) = P i k P j k F((w_i-w_j)^T\tilde w_k)=\frac{P_{ik}}{P_{jk}} F((wi−wj)Tw~k)=PjkPik
考虑到在共现矩阵中,一个词可以作为中心词和上下文交换出现,因此词向量需要满足
w
↔
w
~
w\leftrightarrow \tilde w
w↔w~ ,共现矩阵需要满足
X
↔
X
T
X\leftrightarrow X^T
X↔XT.为了达到这种对称性,(下面这段没看懂)需要F在两个组
(
R
,
+
)
,
(
R
>
0
,
×
)
(R,+),(R_{>0},\times)
(R,+),(R>0,×)上同构
F
(
(
w
i
−
w
j
)
T
w
~
k
)
=
F
(
w
i
T
w
~
k
)
F
(
w
j
T
w
~
k
)
F((w_i-w_j)^T\tilde w_k)=\frac{F(w_i^T\tilde w_k)}{F(w_j^T\tilde w_k)}
F((wi−wj)Tw~k)=F(wjTw~k)F(wiTw~k)
满足上述形式的函数是指数函数,因此函数的输入就是输出(P)取log,
w i T w ~ k = log ( P i k ) = log ( X i k ) − log ( X i ) w_i^T \tilde w_k=\log (P_{ik})=\log (X_{ik})-\log (X_{i}) wiTw~k=log(Pik)=log(Xik)−log(Xi)
如果没有减去的 log ( X i ) \log (X_i) log(Xi),上式就对称了。由于它与k无关,所以可以被吸收到词向量 w i w_i wi 的偏置项中去。再加入一个词向量 w ~ k \tilde w_k w~k 的偏置项,就得到了对称表达
w i T w ~ k + b i + b ~ k = log ( X i k ) w_i^T \tilde w_k+b_i+\tilde b_k=\log (X_{ik}) wiTw~k+bi+b~k=log(Xik)
由于log在参数靠近0的地方发散,可以为此添加1。
这称为Log-bilinear model,即有两个线性的算子。这种模型用两个词向量的点积衡量共现概率,大义为 w i ⋅ w j = log P ( i ∣ j ) w_i\cdot w_j=\log P(i|j) wi⋅wj=logP(i∣j)。
最小二乘回归
log-bilinear模型事实上依然均等地考虑了整个共现矩阵,即使共现矩阵是非常稀疏的,但显然经常出现在一起的词组含有更多的信息。
w
i
T
w
~
k
+
b
i
+
b
~
k
=
log
(
X
i
k
)
w_i^T \tilde w_k+b_i+\tilde b_k=\log (X_{ik})
wiTw~k+bi+b~k=log(Xik)
可以将上式视作最小二乘问题,为此定义一个损失函数,衡量LHS和RHS的差距,并引入权重系数 f ( X i j ) f(X_{ij}) f(Xij)
J = ∑ i , j = 1 V f ( X i j ) ( w i T w j + b i + b ~ j − log X i j ) 2 J=\sum_{i,j=1}^V f(X_{ij})(w_i^T w_j+b_i+\tilde b_j-\log X_{ij})^2 J=i,j=1∑Vf(Xij)(wiTwj+bi+b~j−logXij)2
由于同样的pair(word i, word j)可能出现多次,所以直接以 X i j X_{ij} Xij 为权重。但我们不希望过于常见的词,比如功能词,的权重太大,所以对 X i j X_{ij} Xij 进行映射
f ( x ) = { ( x / x m a x ) α i f x < x m a x 1 o t h e r w i s e f(x)= \begin{cases} (x/x_{max})^{\alpha} & if \ x<x_{max} \\ 1 & otherwise \end{cases} f(x)={(x/xmax)α1if x<xmaxotherwise
以削弱它们的作用。
f ( X i j ) f(X_{ij}) f(Xij) 需要满足的要求如下
与其他算法的对比
以skip-gram中的negative-softmax方法为例, Q i j Q_{ij} Qij 表示词j在词i的上下文中出现的概率大小,使用softmax
Q i j = exp ( w i T w ~ j ) ∑ k = 1 V exp ( w k T w ~ j ) Q_{ij}=\frac{\exp {(w_i^T\tilde w_j)}}{\sum_{k=1}^V \exp {(w_k^T\tilde w_j)}} Qij=∑k=1Vexp(wkTw~j)exp(wiTw~j)
最小化负log损失函数,并将ij相同的组合并,
J = − ∑ i ∑ j X i j log Q i j J=-\sum_i\sum_j X_{ij}\log Q_{ij} J=−i∑j∑XijlogQij
根据 X i = ∑ k X k , P i j = X i j / X i X_i=\sum_k X_k, P_{ij}=X_{ij}/X_i Xi=∑kXk,Pij=Xij/Xi ,
J = − ∑ i X i ∑ j P i j log Q i j = − ∑ i X i H ( P i , Q i ) J=-\sum_i X_i\sum_j P_{ij}\log Q_{ij}=-\sum_i X_i H(P_{i},Q_{i}) J=−i∑Xij∑PijlogQij=−i∑XiH(Pi,Qi)
H为分布P和Q的交叉熵。但这样运算量太大了,依然可以用最小二乘处理,以略去规范项(分母)
J ^ = − ∑ i , j X i ( P ^ i j − Q ^ i j ) 2 \hat J=-\sum_{i,j} X_i (\hat P_{ij}-\hat Q_{ij})^2 J^=−i,j∑Xi(P^ij−Q^ij)2
其中
P
^
i
j
=
X
i
j
,
Q
^
i
j
=
exp
(
w
i
T
w
~
j
)
\hat P_{ij}=X_{ij},\quad \hat Q_{ij}=\exp {(w_i^T\tilde w_j)}
P^ij=Xij,Q^ij=exp(wiTw~j)
但 X i j X_{ij} Xij 可能很大,所以把他们都log一下,再把 X i j X_{ij} Xij 映射一下,
J
^
=
−
∑
i
,
j
X
i
(
log
P
^
i
j
−
log
Q
^
i
j
)
2
=
−
∑
i
,
j
X
i
(
w
i
T
w
~
j
−
log
X
i
j
)
2
\begin{aligned} \hat J &= -\sum_{i,j} X_i (\log\hat P_{ij}-\log\hat Q_{ij})^2 \\ &= -\sum_{i,j} X_i (w_i^T\tilde w_j-\log X_{ij})^2 \end{aligned}
J^=−i,j∑Xi(logP^ij−logQ^ij)2=−i,j∑Xi(wiTw~j−logXij)2
J
^
=
−
∑
i
,
j
f
(
X
i
j
)
(
w
i
T
w
~
j
−
log
X
i
j
)
2
\hat J= -\sum_{i,j} f(X_{ij}) (w_i^T\tilde w_j-\log X_{ij})^2
J^=−i,j∑f(Xij)(wiTw~j−logXij)2
和glove的损失函数相比只差一个偏置项