本文由罗周杨原创,转载请注明作者和出处。未经授权,不得用于商业用途
斯坦福经典NLP教材Speech and Language Processing-Vector Semantics学习笔记。
我们该如何表示一个单词的意思呢?你可能会想到其中的一种,用一个向量来表示一个单词!没错,这个章节就是讲单词的表示。
文档和向量
如果用向量来表示一个文档,该怎么表示呢?
假设现在有四个文档,我们统计各个单词在文档中出现的次数,可以得到一张表格:
- | As You Like It | Twelfth Night | Julius Caesar | Henry V |
---|---|---|---|---|
battle | 1 | 0 | 7 | 13 |
good | 114 | 80 | 62 | 89 |
fool | 36 | 58 | 1 | 4 |
wit | 20 | 15 | 2 | 3 |
当然实际上文档的单词数量远不止这几个。
上面表中,有4个单词,所以每一个文档可以表示成一个由单词频率组成的向量:
As You Like It ------> [ 1,114,36,20]
Twelfth Night ------> [ 0, 80,58,15]
Julius Caesar ------> [ 7, 62, 1, 2]
Henry V ------> [13, 89, 4, 3]
如果单词有很多个,假设是N
,那么每个文档就可以表示成一个N
维的向量。可见,这样的向量表示是稀疏的(sparse)。
单词和向量
除了文档可以表示成一个向量,单词也可以。
和文档类似,我们可以统计出一张表格,但是不同的是,我们不是统计单词的个数,而是统计两个单词出现在一起的频数。看一张表格你就知道了:
- | aardvark | … | computer | data | pinch | result | sugar |
---|---|---|---|---|---|---|---|
apricot | 0 | … | 0 | 0 | 1 | 0 | 1 |
pineapple | 0 | … | 0 | 0 | 1 | 0 | 1 |
digital | 0 | … | 2 | 1 | 0 | 1 | 0 |
information | 0 | … | 1 | 6 | 0 | 4 | 0 |
… |
这个表格是一个 V × V V\times V V×V的表格,每个数字表示当前列的单词出现在当前行单词后面的次数,这就构成了上下文,所以这个表格其实就是一个上下文矩阵,其中V
就是总的词典的大小,也就是单词的数量。
我们取出每一行,就可以得到一个单词的向量表示,例如:
digital ------> [ 0,..., 2, 1, 0, 1, 0]
同样的,这样的表示也是稀疏的。
Cosine计算相似度
现在我们已经有文档或者单词的向量表示了,那么该如何计算它们之间的相似度呢?一个很常见的方法就是余弦相似度(Cosine similarity)。
学过高中数学就知道,两个向量的**点积(dot-product)或者内积(inner product)**可以由以下公式计算:
dot-produtc ( v → , w → ) = ∑ i = 1 N v i w i = v 1 w 1 + v 2 w 2 + ⋯ + v N w N \text{dot-produtc}(\overrightarrow{v},\overrightarrow{w}) = \sum_{i=1}^Nv_iw_i=v_1w_1+v_2w_2+\dots+v_Nw_N dot-produtc(v,w)=i=1∑Nviwi=v1w1+v2w2+⋯+vNwN
而**向量的模(vector length)**为:
∣ v → ∣ = ∑ i = 1 N v i 2 \vert\overrightarrow{v}\vert = \sqrt{\sum_{i=1}^Nv_i^2} ∣v∣=i=1∑Nvi2
又:
a → ⋅ b → = ∣ a → ∣ ∣ b → ∣ cos θ \overrightarrow{a}\cdot\overrightarrow{b} = \vert{\overrightarrow{a}}\vert \vert{\overrightarrow{b}}\vert \cos\theta a⋅b=∣a∣∣b∣cosθ
即:
cos θ = a → ⋅ b → ∣ a → ∣ ∣ b → ∣ \cos\theta = \frac{\overrightarrow{a}\cdot\overrightarrow{b}}{\vert{\overrightarrow{a}}\vert \vert{\overrightarrow{b}}\vert} cosθ=∣a∣∣b∣a⋅b
所以,我们可以计算 v → \overrightarrow{v} v和 w → \overrightarrow{w} w的余弦值:
cos ( v → , w → ) = v → ⋅ w → ∣ v → ∣ ∣ w → ∣ = ∑ i = 1 N v i w i ∑ i = 1 N v