在高维空间里,一个文档向量的每一个维度代表了这个文档某个方面的语义属性,他可以通过一个词汇表里的词对这个文档的重要性来表达,比如说,一个运动类的文档,那么运动相关的词汇出现比重比较大的可能性比较高,我们通过文档向量在空间的相对位置,就可以直观的得到文档之间的语义相似度,在几何运算中,有两类常用的距离计算方式
从计算的角度讲:
x ⃗ = ⟨ x 1 , x 2 , . . . , x n ⟩ y ⃗ = ⟨ y 1 , y 2 , . . . , y n ⟩ \vec x=\big \langle x_1,x_2,...,x_n\big \rangle\ \ \ \ \vec y=\big \langle y_1, y_2,...,y_n\big \rangle x=⟨x1,x2,...,xn⟩ y=⟨y1,y2,...,yn⟩
向量(各个维度的差)坐标差的平方求和再开根号得到
d i s e u ( x ⃗ , y ⃗ ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + . . . + ( x n − y n ) 2 dis^{eu}(\vec x,\vec y)=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2} diseu(x,y)=(x1−y1)2+(x2−y2)2+...+(xn−yn)2
可以通过1减去向量夹角的余弦值来得到
d i s c o s ( x ⃗ , y ⃗ ) = 1 − c o s ( x ⃗ , y ⃗ ) dis^{cos}(\vec x,\vec y)=1-cos(\vec x, \vec y) discos(x,y)=1−cos(x,y)
from cosine similarity
c o s ( x ⃗ , y ⃗ ) cos(\vec x, \vec y) cos(x,y)的计算
c o s ( x ⃗ , y ⃗ ) = x ⃗ ⋅ y ⃗ ∣ x ⃗ ∣ ∣ y ⃗ ∣ = x 1 y 1 + x 2 y 2 + . . . + x n y n x 1 2 + x 2 2 + . . . + x n 2 y 1 2 + y 2 2 + . . . + y n 2 \begin{aligned} cos(\vec x, \vec y)&=\frac {\vec x \cdot \vec y}{|\vec x||\vec y|}\\ &=\frac {x_1y_1+x_2y_2+...+x_ny_n}{\sqrt{x_1^2+x_2^2+...+x_n^2}\sqrt{y_1^2+y_2^2+...+y_n^2}} \end{aligned} cos(x,y)=∣x∣∣y∣x⋅y=x12+x22+...+xn2y12+y22+...+yn2x1y1+x2y2+...+xnyn
所以夹角距离是一个正则化以后的距离度量方式,假如把一个文档重复三次,拷贝粘贴三次,得到的新文档与原来的文档依然是零,但是欧式距离就会很大,
两种距离对于不同的任务各有优势。
现在现在先看欧式距离:
从欧氏距离的意义,给定了一组文档以后,如果它们所对应的向量很自然的聚成了一些簇,那么这些文档所定义的语义主题呢,也很自然的聚成了不同的类,从算法上讲,如果我们知道了每一个簇的中心点,我们就很容易的可以把向量归结到距离最近的中心簇里面。
然而,给定一组中心向量,我们并不能直观的计算出聚簇的中心点,一个经典的聚簇方法 K − M e a n s C l u s t e r i n g K-Means \ Clustering K−Means Clustering(k均值聚类)通过迭代的方式来解决上述问题。
这个算法有一个假定,我们要把一组文档聚成k个类,这个k值是事先给定的,给定k以后,我们就可以随机的从一组向量里选择k个,作为初始化的k个聚簇的中心点,之后,我们进行迭代操作,知道了中心点,就可以把每一个向量归到距离最近的中心点所对应的类里面。有了这一组的向量聚类以后呢,又可以重新计算每一个新类的中心点是谁,这样我们就可以迭代的去更新聚类和每一类的中心点,最后,当中心点和聚类不再改变的时候,聚类就结束了。
详细看:【【西湖大学 张岳老师|自然语言处理在线课程 第三章 - 1节】聚类(Clustering)-哔哩哔哩】 https://b23.tv/8ckYWT8
聚类问题:二均值聚类的话,不能事先知道整个聚类的结果是工作休闲还是旅行非旅行
分类问题:事先通过想应的邮件去训练一个分类器。事先知道分类标准
聚类问题之所以不能控制分类体系的原因,是因为我们唯一的依据是文档在向量空间的表示
假如 class A和B 代表工作和休闲两类邮件,我事先并不知道AB在向量空间是不是最远的两个簇,所以聚类无法把控。
但是我分类的时候有了数据的标注我就能切分数据,分开AB
这种切分是怎么做到的呢?
可以参考3.1 Vector Space Model