关于nlp:词向量技术

2次阅读

共计 3166 个字符,预计需要花费 8 分钟才能阅读完成。

词向量根底

单词的示意

独热编码存在一下问题:

  • 无奈以一个向量的形式示意一个单词的含意
  • 向量维度高,且十分稠密
  • 没有掂量两个单词之间的语义类似度

因为独热编码的毛病,一种新的形式 - 词向量(也叫分布式示意)示意形式如下:

独热编码 词向量(分布式示意)
咱们 [1,0,0,0,0] [0.1,0.2,0.4,0.2]
爬山 [0,1,0,0,0] [0.2,0.3,0.1,0.2]

当有了词向量的分布式的示意之后,两个单词之间的类似度是能够算进去的,当然,成果取决于词向量的品质。这个词向量的维数是由训练词向量的模型人工定义的,学习词向量的模型如 Bert,Glove,SkipGram,ELMo
从上能够看到:

  • 分布式示意时向量是浓密的,很少有 0
  • 分布式示意时维数远远小于独热编码
  • 词向量肯定水平上能够示意这个单词的含意,则从肯定水平上就能够示意两个单词之间的类似度

总结如下:

独热编码 分布式示意
无奈示意单词额的含意 能够认为示意单词的含意
向量十分稠密 向量浓密
向量长度等于词库的长度 向量长度是超参数
不须要训练 须要训练

SkipGram 模型


参考论文:
Efficient Estimation of Word Representations in Vector Space

SkipGram 模型的外围是通过中心词来预测四周的单词。也就是说如果咱们的词向量训练地比拟精确,预测成果就比拟强,实际上这就是咱们的指标函数。

为了便于了解,为什么通过中心词能够预测出四周的单词?咱们来理解它背地的逻辑:
这里有一个假如叫做分布式的假如,这个分布式的假如意味着如果两个单词挨在一起,那有可能两个单词的含意是比拟相似的,所以我可能通过一个单词预测出它类似的单词。

上面记录 Skipgram 的推导:
假如咱们存在这样的数据集 {\(s_1,s_2,s_3,s_4,s_5\)}, 当然咱们的数据不可能这么少,数据通常都是一篇一篇的文章或者间接复制网页上的一段话也是咱们数据。

通过挨着的词语相相似的思维,用以上的样本想要训练出词向量,咱们能够这样做:最大可能上面的条件概率乘积:

$$
p(s2|s1)·p(s1|s2)·p(s3|s2)·p(s2|s3)·p(s3|s4)·p(s5|s4)·p(s4|s5)
$$

能够发现,咱们对咱们的 P(相邻词 | 中心词) 作了一个循环,由此能够推出更通用性的公式:
w- 中心词,c- 属于 w 上下文的词

$$
L(\theta) = MLE \prod_{w\in Text}\prod_{c\in Context}p(c|w;\theta)\tag{1}
$$

$$
\theta = arg\,\max_{\theta} \sum_{w\in Text} \sum_{c\in Context}log p(c|w;\theta)\tag{2}
$$

对于条件概率 \(p(c|w;\theta)\) 咱们心愿能示意为 \(\theta \) 的状态,所以咱们要晓得它的属性以写出适合的状态,个别它具备以下属性:

  • 概率值在 0~1 之间
  • \(\sum_{i=1}^n p(c|w;\theta) = 1 \)
  • (w,c) 类似的时候,咱们心愿它的值越大
  • (w,c) 不类似的时候,咱们心愿它的值越小

所以咱们能够采纳 softmax 的状态:

$$
softmax = \frac {e^{z_i}}{\sum\limits_{c=1}^c e^c}\tag{3}
$$

\(( p(c|w;\theta) \) 就能够写为下式(4):
c’ 示意 w 的全副相邻词,\(u_c \) 示意 c 的 embedding,\(v_w \) 示意中心词 w 的 embedding
当 w 和 c 类似的时候 \(u_c v_w \) 的内积也越大,反则相同。在这里,咱们采纳余弦类似度来掂量相似性,两向量愈类似,点积也愈大。

$$
(p(c|w;\theta) = \frac {e^{u_c v_w}} {\sum\limits_{c’} e^{u_{c’} v_w}}\tag{4}
$$

进一步:

$$
\begin{equation}\begin{split}
\theta &= arg\,\max_{\theta} \sum_{w\in Text} \sum_{c\in Context}log \frac {e^{u_c v_w}} {\sum\limits_{c’} e^{u_{c’} v_w}}\\
&= arg\,\max_{\theta}\sum_{w\in Text} \sum_{c\in Context} e^{u_c v_w}-log\sum_{c’} e^{u_{c’} v_w}\tag{5}
\end{split}\end{equation}
$$

上式五能够看出这个指标函数存在的一些问题:在减去的后一项那咱们作了一个内层循环,而这一项的工夫复杂度工夫上是 O(|V|),V 是咱们词库的大小,所以在咱们词库量很大的时候,代价会很大,精度也会损失,而且这个式子也不太容易优化,所以以下咱们们思考另一种思维形式,它也叫负采样,待会我解释为什么会叫负采样。

同样咱们存在一堆数据集 D{\(s_1,s_2,s_3,s_4…s_n\)}
咱们假如它的可能性:

D= 1 示意相邻,否则相同

$$
p(D=1|w,c;\theta)
$$

$$
p(D=0|w,c’;\theta)\tag{6}
$$

则咱们的指标函数能够 MLE 这个式子(7):

$$
L(\theta) = \prod p(D=1|w,c;\theta) p(D=0|w,c’;\theta)\tag{7}
$$

$$
\begin{equation}\begin{split}
\theta =& arg\,\max_{\theta}\prod p(D=1|w,c;\theta) p(D=0|w,c’;\theta)\\
=&arg\,\max_{\theta}\prod_{w,c\in D}p(D=1|w,c;\theta) \prod_{w,c’ \in \overline D} p(D=0|w,c’;\theta)\tag{8}
\end{split}\end{equation}
$$

接下来咱们又思考这个条件概率 p 应该满足什么条件:

  • 概率值在 0~1 之间
  • (w,c) 类似的时候,咱们心愿它的值越大
  • (w,c) 不类似的时候,咱们心愿它的值越小

故而咱们重新考虑 Sigmoid 函数, 以下是咱们写好后的指标函数:

$$
\ell(\theta) =arg\,\max_\theta \sum_{w,c\in D} log \sigma(u_cv_w)+\sum_{w,c’\in \overline D} log \sigma(-u_c’v_w)\tag{9}
$$

在理论样本中,负样本比正样本多很多,所以上式(9)能够革新为式(10)

$$
\ell(\theta) =arg\,\max_\theta \sum_{w,c\in D} [log \sigma(u_cv_w)+\sum_{c’\in N(w)} log \sigma(-u_c’v_w)]\tag{10}
$$

\(c’\in N(w)\) 示意属于 w 的 N 个负样本, 所以也叫负采样。

接下来应用梯度降落法求解 \(\theta \):

$$
\frac{\partial \ell(\theta)} {\partial u_c} = \sum_{w,c\in D}[1-\sigma(u_cv_w)]v_w\tag{11}
$$

$$
\frac{\partial \ell(\theta)} {\partial v_w} =\sum_{w,c\in D}\{[1-\sigma(u_cv_w)]u_c+\sum_{c’\in N(w)}[\sigma(-u_cv_w)-1]u_{c’}\}\tag{12}
$$

$$
\frac{\partial \ell(\theta)} {\partial u_{c}’} = \sum_{c’\in N(w)}[\sigma(-u_cv_w)-1]v_w\tag{13}
$$

未完待续 …

正文完
 0