NLP学习笔记「第三章」Clustering(聚类)

Measure vector space distance

在高维空间里,一个文档向量的每一个维度代表了这个文档某个方面的语义属性,他可以通过一个词汇表里的词对这个文档的重要性来表达,比如说,一个运动类的文档,那么运动相关的词汇出现比重比较大的可能性比较高,我们通过文档向量在空间的相对位置,就可以直观的得到文档之间的语义相似度,在几何运算中,有两类常用的距离计算方式

  • Euclidean distence(欧氏距离):两个向量直接的直线距离长短,或两个向量的差的长度。
unstructed texts and NLP structures
vector space distance
semantic similarities
  • Cosine distance(夹角距离):它衡量的是两个向量之间的夹角的大小

从计算的角度讲:
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

Euclidean distence(欧氏距离)

向量(各个维度的差)坐标差的平方求和再开根号得到
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 )=(x1y1)2+(x2y2)2+...+(xnyn)2

Cosine distance(夹角距离)

可以通过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 )=1cos(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+...+xn2 y12+y22+...+yn2 x1y1+x2y2+...+xnyn

所以夹角距离是一个正则化以后的距离度量方式,假如把一个文档重复三次,拷贝粘贴三次,得到的新文档与原来的文档依然是零,但是欧式距离就会很大,

两种距离对于不同的任务各有优势。

现在现在先看欧式距离:

​ 从欧氏距离的意义,给定了一组文档以后,如果它们所对应的向量很自然的聚成了一些簇,那么这些文档所定义的语义主题呢,也很自然的聚成了不同的类,从算法上讲,如果我们知道了每一个簇的中心点,我们就很容易的可以把向量归结到距离最近的中心簇里面。

然而,给定一组中心向量,我们并不能直观的计算出聚簇的中心点,一个经典的聚簇方法 K − M e a n s   C l u s t e r i n g K-Means \ Clustering KMeans Clustering(k均值聚类)通过迭代的方式来解决上述问题。

3.1.2 K-means Clustering

这个算法有一个假定,我们要把一组文档聚成k个类,这个k值是事先给定的,给定k以后,我们就可以随机的从一组向量里选择k个,作为初始化的k个聚簇的中心点,之后,我们进行迭代操作,知道了中心点,就可以把每一个向量归到距离最近的中心点所对应的类里面。有了这一组的向量聚类以后呢,又可以重新计算每一个新类的中心点是谁,这样我们就可以迭代的去更新聚类和每一类的中心点,最后,当中心点和聚类不再改变的时候,聚类就结束了。

详细看:【【西湖大学 张岳老师|自然语言处理在线课程 第三章 - 1节】聚类(Clustering)-哔哩哔哩】 https://b23.tv/8ckYWT8

文档分类
k
形成k个聚类中心点
文档A
k
Y
N
向量
中心点聚类
新的聚类
重新计算中心点
中心点和聚类不再改变
聚类结束

3.1.3 Classification(支持向量机)

Clustering vs classification

聚类问题:二均值聚类的话,不能事先知道整个聚类的结果是工作休闲还是旅行非旅行

分类问题:事先通过想应的邮件去训练一个分类器。事先知道分类标准

聚类问题之所以不能控制分类体系的原因,是因为我们唯一的依据是文档在向量空间的表示

假如 class A和B 代表工作和休闲两类邮件,我事先并不知道AB在向量空间是不是最远的两个簇,所以聚类无法把控。

但是我分类的时候有了数据的标注我就能切分数据,分开AB

这种切分是怎么做到的呢?

可以参考3.1 Vector Space Model

你可能感兴趣的:(NLP,聚类,自然语言处理,学习)