目录
- Vector Space Models
- Word by Word and Word by Doc
- Word by Document Design
- Word by Document Design
- Vector Space
- Euclidean Distance
- Euclidean distance for n-dimensional vectors
- Euclidean distance in Python
- Cosine Similarity: Intuition
- Cosine Similarity
- Previous definitions
- Cosine Similarity
- Manipulating Words in Vector Spaces
- Visualization and PCA
- Visualization of word vectors
- Principal Component Analysis
- PCA Algorithm
Vector Space Models
在实际生活中,经常会出现以下两种场景:
相同文字不同含义:
不同文字相同含义:
这些是之前的语言模型无法处理的问题,而向量空间模型不但可以区分以上场景,还能捕获单词之间的依赖关系。
You eat cereal from a bowl
麦片和碗是强相关
You buy something and someone else sells it
这里的买依赖于卖
这个优点使得向量空间模型可以用于下面任务:
著名语言学学者(Firth, J. R. 1957:11)说过:
“You shall know a word by the company it keeps”
指出了上下文对当前词的表达有很大影响。
Word by Word and Word by Doc
构建共现矩阵(W/W and W/D 两种),并为语料库的单词提取向量表示。
Word by Document Design
两个不同单词的共现是它们在语料库中在一个特定的词距内一起出现的次数。
Number of times they occur together within a certain distance
k
k
k
例如,假设语料库有以下两个句子。
假设
k
=
2
k=2
k=2,则单词data的共现次数如下:
这里n取值在1到词表大小之间。data和simple在第一句话距离是1,第二句话距离是2:
Word by Document Design
计算来自词汇表的单词在属于特定类别的文档中出现的次数。
Number of times a word occurs within a certain category
例如下图中,语料库包含三类文档,然后可以计算某个单词分别在三类文档中出现的次数。
Vector Space
完成多组文档或单词的表示后,接下来可以构建向量空间。
以上面的矩阵为例
可以用行来表示单词,列表示文档,若以data和film构建坐标系,则可以根据矩阵中的数值得到向量表示:
从向量空间表示中可以看到,economy的ML的文档相似度要更大一些
当然这个相似度可以用计算Angle Distance来数字化度量。
Euclidean Distance
Euclidean Distance允许我们确定两个点或两个向量彼此之间的距离。
书接上回,假设有两个语料的向量表示为:
放到二维空间中:
用点表示他们后,可以用欧氏距离很衡量二者的相似度:
具体公式:
d
(
B
,
A
)
=
(
B
1
−
A
1
)
2
+
(
B
2
−
A
2
)
2
d(B,A)=\sqrt{(B_1-A_1)^2+(B_2-A_2)^2}
d(B,A)=(B1−A1)2+(B2−A2)2
B
1
−
A
1
B_1-A_1
B1−A1和
B
2
−
A
2
B_2-A_2
B2−A2分别对应上图中水平和垂直距离。
本例中带入数字:
d
(
B
,
A
)
=
(
−
8820
)
2
+
(
6000
)
2
≈
10667
d(B,A)=\sqrt{(-8820)^2+(6000)^2}\approx10667
d(B,A)=(−8820)2+(6000)2≈10667
Euclidean distance for n-dimensional vectors
对于高维向量,欧氏距离仍然适用,例如:
想要计算ice-cream和boba的欧氏距离,则可以使用以下公式:
d
(
v
⃗
,
w
⃗
)
=
∑
i
=
1
n
(
v
i
−
w
i
)
2
等价于求范数Norm of
(
v
⃗
,
w
⃗
)
d(\vec{v},\vec{w})=\sqrt{\sum_{i=1}^n(v_i-w_i)^2}等价于求范数\text{Norm of}(\vec{v},\vec{w})
d(v,w)=i=1∑n(vi−wi)2等价于求范数Norm of(v,w)
ice-cream和boba的欧氏距离可以写为:
(
1
−
0
)
2
+
(
6
−
4
)
2
+
(
8
−
6
)
2
=
1
+
4
+
4
=
3
\sqrt{(1-0)^2+(6-4)^2+(8-6)^2}=\sqrt{1+4+4}=3
(1−0)2+(6−4)2+(8−6)2=1+4+4=3
Euclidean distance in Python
在这里插入代码片
# Create numpy vectors v and w
v np. array([1, 6, 8])
w np. array([0, 4, 6])
# Calculate the Euclidean distance d
d = np.linalg.norm(v-w)
# Print the result
print (("The Euclidean distance between v and w is: ", d)
Cosine Similarity: Intuition
先给结论:当语料库中文章包含单词数量差异较大时,使用Cosine Similarity
余弦相似度使用文档之间的角度,因此不依赖于语料库的大小。
假设我们有eggs和disease两个单词在三个语料库中图像如下:
语料库中各个类型的文章单词数量不相同,这里的Agriculture和History文章单词数量基本相同,而Food文章单词较少。Agriculture与其他两类文章的欧式距离分别写为:
d
1
d_1
d1和
d
2
d_2
d2
从图中可以看到
d
2
<
d
1
d_2<d_1
d2<d1,表示Agriculture和History文章相似度更高。
余弦相似度是指The cosine of the angle between the vectors. 当角度接近90度时,余弦接近于0。
从余弦相似度上看,
β
>
α
\beta>\alpha
β>α,表示Agriculture和Food文章相似度更高。
Cosine Similarity
Previous definitions
先回顾两个定义:
Vector norm,向量的模(范数)可以表示为:
∣
∣
v
⃗
∣
∣
=
∑
i
=
1
n
v
i
2
||\vec{v}||=\sqrt{\sum_{i=1}^nv_i^2}
∣∣v∣∣=i=1∑nvi2
Dot product点乘可以表示为:
v
⃗
⋅
w
⃗
=
∑
i
=
1
n
v
i
⋅
w
i
\vec{v}\cdot \vec{w}=\sum_{i=1}^nv_i\cdot w_i
v⋅w=i=1∑nvi⋅wi
下面是点乘推导:
设有两个向量
a
\mathbf{a}
a 和
b
\mathbf{b}
b,在
n
n
n维空间中的坐标分别为
(
a
1
,
a
2
,
…
,
a
n
)
(a_1, a_2, \ldots, a_n)
(a1,a2,…,an) 和
(
b
1
,
b
2
,
…
,
b
n
)
(b_1, b_2, \ldots, b_n)
(b相关文章