词向量
NLP 处理文本,所以在进行处理之前,要先解决文本的表示。文本由词组成,本文讨论了表示词汇的几种方案。
WordNet
这种方法基于如下思想:用词汇的意义来代表词。所以我们可以建立若干个集合,每个集合代表一组同义词,每个词都可以映射到某个集合中,表示这个词汇的意思。
其优点在于可以很好的处理词汇之间的联系,即同义词。但是缺点同样明显:
- 忽略了同义词之间的差异,忽略了一词多义性
- 难以迭代更新,忽略词语的新含义
- 基于主观判断
- 需要专家进行手动构造
- 不能准确计算词汇间的相关性
Discrete Symbols (one-hot code)
这种方法即对词汇进行独热编码,用一个数字来表示一个词,但是这种方法中,任何两个词的编码都是完全独立的,也就是说这种方法无法表征词汇之间的相关性。自然语言中一个词汇和其他词汇的关系对词语意义的解释有着很大的影响,所以这种方法的局限性也很大。
Word Vector
我们希望得到一种既简单又能够很好的表示词汇间关系的编码方式。所以我们可以将先前两种方案的思想结合起来,得到词向量的编码方式。这种方法基于如下假设:一个词汇的含义可以由经常在其边上出现的词汇决定。
思想
基于这种编码方式,我们有Word2Vec框架的核心思想如下:
- 有一个巨大的语料库
- 每个词语都被一个定长的向量表示
- 对语料库中每个词,称其为中心词(center) c c c,其周围定长距离内的词称为上下文(outside) o o o
- 使用词向量来表示 P ( o ∣ c ) P(o|c) P(o∣c)
- 迭代每个词对应的向量来优化系统
如图所示,我们可以做出如下陈述,into的词义由problems,turning,banking,crises等其附近的词给出。类似地,随着中心词后移,可以产生多组这种关系。
定义式
接下来给出这种概念的定量描述:
定义整个词汇空间为 V V V 表示所有词汇的集合,其中第 i i i 个词为 v i v_i vi ;向量空间为 θ \theta θ 表示所有词汇对应的词向量构成的集合。定义 T T T 为语料库,其中第 i i i 个词为 w i w_i wi 。 我们定义相似度 L ( θ , T ) L(\theta,T) L(θ,T) 为词向量集 θ \theta θ 在语料库 T T T 上的拟合程度。我们可以认为 T T T 是一个常量,所以只考虑参数 θ \theta θ ,相似度有计算式如下:
L ( θ ) = Π t = 1 ∣ T ∣ Π − m ≤ j ≤ m , j ≠ 0 P ( w t + j ∣ w t , θ ) L(\theta) = \Pi_{t=1}^{|T|}\Pi_{-m\leq j\leq m,j\not=0}P(w_{t+j}|w_{t},\theta)