word2vec
0. 预备知识
需要了解的预备知识包括sigmoid激活函数即其导数形式;逻辑回归处理二分类问题;Huffman树编码
1. 词向量
目的是将自然语言数学化。最简单的一种词向量是one-hot向量,缺点是容易受到维数灾难的困扰,且不适用于深度学习,无法刻画词之间的相似性。
由此引入Distributed Representation,通过训练将某种语言的每一个词映射成一个固定长度的向量,所有的词向量构成一个向量空间,在这个向量空间中引入“距离”,反应词之间的相似性。
例如
2. 基于Hierarchical Softmax的模型
word2vec有两种重要的模型:CBOW模型和Skip-gram模型。
两个模型都包含三层:输入层、投影层和输出层。
- CBOW模型是在已知 w t w_{t} wt的上下文 w t − 2 , w t − 1 , w t + 1 , w t + 2 w_{t-2}, w_{t-1}, w_{t+1}, w_{t+2} wt−2,wt−1,wt+1,wt+2的前提下,预测当前词 w t w_{t} wt。
- Skip-gram模型是在已知当前单词的情况下,预测上下文
2.1 CBOW 模型
- 输入层:包括上文c个词向量,下文c个词向量
- 投影层:将输入层2c个向量做累加,传入输出层
- 输出层:构造Huffman树,以对数似然函数作为目标函数值。
对于某个词w, 从根节点到w所在叶子节点构成唯一一条0,1路径。例如4位的Huffman编码,意味着经过了4个分支,可以认为进行了4次二分类。相应的概率就是
p
(
d
j
w
∣
x
w
,
θ
j
−
1
w
)
p(d_{j}^{w}|x_{w}, \theta^{w}_{j-1})
p(djw∣xw,θj−1w),即在当前输入和当前非叶子结点权重的条件下,被分为d类的概率。用这个对数似然函数进行梯度上升(追求最大值)能达到更新参数(词向量、非叶子结点权重)。
CBOW伪代码
输入:(Context(x), w)
2.2 Skip-gram
- 输入层:只包含当前词w的词向量
- 投影层:恒等映射,多余的
- 输出层:Huffman树
Skip-gram伪代码
3. 基于Negetive Sampling的模型
不在利用Huffman树,而是采用随即负采样,可替代Hierarchical Softmax。
3.1 CBOW模型
已知上下文Context(w)需要预测w,则w就是一个正样本,其他词就是负样本。目标函数 p ( u ∣ C o n t e x t ( w ) ) = [ σ ( X w T θ u ) ] L w ( u ) ⋅ [ 1 − σ ( X w T θ u ) ] 1 − L w ( u ) p(u|Context(w)) = [\sigma(X^{T}_{w}\theta^{u})]^{L^{w}(u)} · [1-\sigma(X^{T}_{w}\theta^{u})]^{1-L^{w}(u)} p(u∣Context(w))=[σ(XwTθu)]Lw(u)⋅[1−σ(XwTθu)]1−Lw(u)。
伪代码
3.2 Skip-gram模型
标签
目标函数