Word2Vec

word2vec由Tomas Mikolov等人在《Distributed Representations of Words and Phrases and their Compositionality》中提出。word2vec根据语料库中单词的“共现关系”求出每一个单词的embedding。word2vec模型有两种形式,skip-gram和cbow。skip-gram根据中心词(target)预测上下文(context),而cbow根据上下文(context)预测中心词(target)。架构

skip-gram模型

skip-gram模型的架构以下,
skip-gram.jpg
图片转自[NLP] 秒懂词向量Word2vec的本质
模型的目标是最大化下式,
$$\frac{1}{T}\sum_{t=1}^{T}\sum_{-c \leq j \leq c, j \neq 0}\log p(w_{t+j}|w_t)$$
其中,$c$表示context的大小,以下图,当center word为"or"时,若是c=1,则context word为"living"和"get";若是c=2,则context word为"busy"、"living"、"get"和"busy"。$c$越大,训练样本越多,模型的准确度越高,但同时训练的时间成本也会增长。
context.png
基础形式的skip-gram使用softmax函数定义$p(w_{t+j}|w_t)$,
$$p(w_O|w_I)=\frac{exp({v^{'}}_{w_O}^\top v_{w_I})}{\sum_{w=1}^{W}exp({v^{'}}_{w}^\top v_{w_I})}$$
然而这种形式的skip-gram不具有可实现性,由于计算$\nabla\log p(w_O|w_I)$的代价是与单词总数W的大小成正比的,而W的数量级通常是$10^5-10^7$。函数

Hierarchical Softmax

以中国有效减少计算复杂度的方法是,使用Hierarchical Softmax近似full softmaxHierarchical Softmax是由Morin和Bengio在《Hierarchical probabilistic neural network language model》中提出。spa

二叉哈夫曼树

假设词汇表中有$W$个不一样的单词,单词$w_i$在语料库中出现的频率为$c_i$,能够构造出一个有$W$个叶子节点的二叉哈夫曼树(binary Huffman tree),每个叶子节点对应一个单词。构造方式以下:3d

  1. 将$\{(w_1, c_1), \cdots,(w_W,c_W)\}$当作$W$棵树(每棵树1个结点)组成的森林;
  2. 从森林中选择根结点权值最小的两棵树进行合并,权值大的做为左孩子结点,权值小的做为右孩子结点,获得一棵新树,新树的根结点权值为其左、右子树根结点权值之和。从森林中删除被选中的两棵子树,保留新树;
  3. 重复第2步和第3步,直至森林中只剩下一棵树为止。

例如,语料库中只有一句话:“get busy living or get busy dying”。则对应的词汇表为,{"get":2, "busy":2, "living":1, "or":1, "dying":1},构成以下图的二叉哈夫曼树,
huffman.png
对于每个单词$w_i$,都存在一条从根节点root到该单词对应叶子节点的路径,定义$L(w_i)$为单词$w_i$对应的路径,$n(w_i,j)$为路径上的第j的节点,显然有$n(w_i,1)=root,n(w_i,L(w_i))=w_i$,定义$ch(n)$表示节点$n$的左孩子节点(也能够定义为右孩子)。使用hierarchical softmax定义$p(w|w_I)$,
$$p(w|w_I) = \prod_{j=1}^{L(w)-1}\sigma(\mathbb{I}(n(w,j+1)==ch(n(w,j)))\cdot {v^{'}}_{n(w,j)}^\top v_{w_I})$$
其中,$\sigma$为sigmoid函数$\frac{1}{1+e^{-x}}$,$\mathbb{I}(\cdot)$为Indicator function。
使用二叉哈夫曼树的好处是,it assigns short codes to the frequent words which results in fast training。从图中能够看出,单词出现的频率越高,则对应该单词的叶子节点越靠近根节点(例如,$L("get")=3,L("living"=4)$)。code

相较于原始形式的skip-gram模型在计算$p(w_O|w_I)$时,须要考虑$W$个输出节点,使用hierarchical softmax的模型只须要考虑$\log(W)$个内部节点。blog

Negative Sampling

$$p(w_O|w_I)=\log\sigma({v^{'}}_{w_O}^\top v_{w_I})+\sum_{i=1}^k \mathbb{E}_{w_i\sim P_n(w)}[\log \sigma(-{v^{'}}_{w_i}^\top v_{w_I})]$$
相较于原始的skip-gram模型须要考虑全部的类别($w_1,\cdots,w_W$),使用negative sampling的模型只是预测整体类别的一个子集w_isim P_n(w)。图片

注意到,对于使用Hierarchical softmax的skip-gram模型,每个单词$w$只有一个对应的表示$v_w$,此外二叉哈夫曼树中的每一个内部节点$n$,也对应一个相应的表示$v_n$;而对于使用negtive sampling的skip-gram模型,每个单词$w$对应着两个向量表示,$v_w$和${v^{'}}_w$,其中$v_w$为target embedding,对应单词$w$为target的状况,${v^{'}}_w$context embedding,对应单词$w$为context的状况。ip

cbow模型

cbow模型的架构以下,
cbow.jpg
图片转自[NLP] 秒懂词向量Word2vec的本质
cbow在输入层,根据context words获得context embedding,而后对全部的输入embedding进行加和获得$h_i$,最后使用$h_i$来预测target word。实现方法与skop-gram模型相似。get

参考

  1. Distributed Representations of Words and Phrases and their Compositionality,https://arxiv.org/abs/1310.4546
  2. https://zhuanlan.zhihu.com/p/...
相关文章
相关标签/搜索