Technology-机器学习-Word Vectors

Word Vectors 词向量

词义

定义

传统的语言学认为:

意符 (Signifier) 和意指 (Signified) 可以互相推出。

检测

WordNet 是一个人工管理的词义库,可以用其来检测上下位 (is - a) 关系和近义词:

NLP-DL-Meaning-WordNet

但是这种离散的呈现方式,有很多问题:

  • 无法区分一些细微的区别,例如:adept,expert,good,practiced,proficient,skillful;
  • 需要人力进行维持,并无法一直保持更新;
  • 属于主观的判断;
  • 很难准确计算单次的相似性。

离散的表示方式

绝大多数这种基于规则和统计的 NLP 方法将单词识别成单个原子(不可分割)的符号,例如 hotel, conference, walk。这样的方式,在向量空间里面,是类似以下的表示:

NLP-DL-Meaning-WordNet-Onehot

这种离散的表示方式 (Distributed Representations) ,称为 “one-hot”, 这会导致词库文件非常大。另外,其无法检测相似性。

例如,当我们输入 “Seattle motel” 时,我们其实是想搜索 “Seattle hotel”,然而,”motel” 与 “hotel” 的向量表示方式为:

NLP-DL-Meaning-WordNet-Onehots

两者是正交的。

基于离散相似性的表示方式

基于离散相似性的表示方式 (Distributional Similarity based Representations) 指的是结合上下文,进行语义的理解。

NLP-DL-Meaning-WordNet-DistributionalSimilarityBasedRepresentations

将词义定义成向量,再通过向量来对上下文的其他单词进行预测,从而达到理解的目的。

NLP-DL-Meaning-WordNet-DistributionalSimilarityBasedRepresentations-Example

词嵌入的学习神经网络

我们定义好一个模型,用于预测一个单词 $w_t$ 的上下文单词的概率为:

$$p(context|w_t)=…$$

同时,定义好其错误率函数,例如:

$$J = 1 - p(w_{-t}|w_t)$$

这里的, $w_{-t}$ 代表除了 $w_t$ 以外的所有单词。

那么, 我们的目标在于,在一个大的语言集中,检索非常多 t 的位置,并调整单词的向量表示方式,来最小化错误率。

Word2vec

定义

Word2vec 可以预测每个单词的上下文词汇的概率。

两个算法,SG(Skip-grams) 和 CBOW(Continuous Bag of Words)。

两个训练方法,Hierarchical Softmax 和 Negative Sampling。

Skip-grams

对于任一个单词 $t = 1 … T$ ,建立一个半径为 $m$ 的窗口,预测该窗口中每个单词的出现概率,然后,我们尽可能地通过不断尝试单词的向量表示的方式,来最大化其概率分布。

NLP-DL-SG-Example

函数(Objective/Loss/Cost Funtion)为:

NLP-DL-SG-Function

其中,$θ$ 代表要优化的变量,即是向量表示方式,下方是对数的表示方式,”-“ 号代表将最大转换成最小,这是机器学习比较喜欢的表达方式,例如错误率越低越好。

Softmax 函数

Softmax 函数用于将 $R^v$ 空间映射成概率分布:

NLP-DL-SG-Softmax

好处在于,通过幂函数,让结果变成正数,另外,让结果控制在 $[0, 1]$ 之间,实现正则化。另外,通过 $e$ 的幂函数,实现两极化,正样本的结果趋向于 $1$, 而负样本的结果趋向于 $0$。

点积

点积(Dot Product)可用于计算两个向量的相似性。

例如,向量 $u$ 和 $v$:

$$u^Tv = u.v = \sum_{i=1}^nu_iv_i$$

Word2Vec

结合 Softmax 函数和点积函数,可以预测出每个单词的半径为 $m$ 的窗口的上下文单词的出现概率。

例如,对于 $p(w_{t+j}|w_t)$ ,最简单的公式为:

$$p(o|c) = \frac{exp(u_o^Tv_c)}{\sum_{w=1}^vexp(u_w^Tv_c)}$$

其中,$o$ 代表上下文单词的索引,$c$ 代表关键字单词的索引,$v_c$ 和 $u_o$ 分别代表其向量。

为了计算方便,每个单词维持两个向量,一个是其本身的表示向量,另一个是上下文向量。

用图来表示 SG 算法如下:

NLP-DL-SG-Result

最后,通过计算 Softmax 结果与真实位置的单词向量比较,看其错误率,并进行参数调优。

我们将所有参数的集合定义为一个长向量 $θ$ ,如果在一个 $d$ 维的向量空间中,有 $V$ 个单词,则:

NLP-DL-SG-Model