2

计算机如何理解事物的相关性-文档的相似度判断

 2 years ago
source link: https://codeshellme.github.io/2020/11/ml-space-vector-model/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

公号:码农充电站pro

主页:https://codeshellme.github.io

生活中,我们经常会对比两个事物的相关性,也可以叫做相似度

  • 如果一件事物与另一件事物的相似度比较高,那这两件事物的相关性就比较大。

  • 如果一件事物与另一件事物的相似度比较低,那这两件事物的相关性就比较小。

人类会根据自己的经验,很容易的判断两件事物是否相似,或者相似度是多少。那如何让计算机也能够进行这样的判断呢?

1,空间向量模型

我们都知道,计算机并没有思维,它只能理解数字。所以,如果想让计算机理解我们现实世界中的事物,必须先把现实事物转换成数字。

空间向量模型假设,任何事物都可以转换成 N 维空间中的一个点,这个点称为向量,然后通过计算向量之间的距离或夹角,来判断向量的之间相关性,进而判断事物之间的相关性。

  • 向量之间的距离越大,事物就越不相关;距离越小就越相关。
  • 向量之间的夹角越大,事物就越不相关;夹角越小就越相关。

什么是向量

向量代表了事物的特征。

向量是相对标量而言,标量只是单个数字,没有方向性。向量也叫矢量,由一组数字构成,具有方向性。

例如,用下图中的 x 表示向量,其中 n 表示向量的维度:

2,向量之间的距离

两个向量所对应的两点之间的距离就是向量的距离,距离可以描述不同向量在向量空间中的差异,也就是现实事物之间的差异。

常用的计算距离的方法有四种:

  • 麦哈顿距离
  • 切比雪夫距离
  • 闵可夫斯基距离

其中使用最多的是欧氏距离,下面一一介绍。

麦哈顿距离

麦哈顿距离可以理解为街道距离,或者出租车距离。

可以看到下图中,从A 点到B 点,不管是走1线路 还是2线路,距离都是一样的,这个线路的距离就是麦哈顿距离。

二维空间中的两个点A(x1, x2)B(y1, y2),麦哈顿距离的计算公式为:

n 维空间中的两个点A(x1...xn)B(y1...yn),麦哈顿距离的计算公式为:

欧式距离

欧式距离也叫欧几里得距离,比较好理解,就是直线距离。

如下图,A 点到B 点的直线距离就是欧式距离。

对于二维空间中的两个点A(x1, x2)B(y1, y2),欧式距离的计算公式为:

对于n 维空间中的两点A(x1...xn)B(y1...yn),欧式距离的计算公式为:

切比雪夫距离

切比雪夫距离可以类比为在方格中走格子,怎样走的格子数最少。

如下图中,从A 格子走到B 格子,先斜线走,再直线走,最终走的格子数就是切比雪夫距离。

对于二维空间中的两个点A(x1, x2)B(y1, y2),切比雪夫距离的计算公式为:

上面公式的含义是,∣x1 − y1∣∣x2 − y2∣ 两者的最大者。

对于n 维空间中的两点A(x1...xn)B(y1...yn),切比雪夫距离的计算公式为:

闵可夫斯基距离

闵可夫斯基距离也叫做闵氏距离,它并不是一种单独的距离,而是上面三种距离的统一。

对于二维空间中的两个点A(x1, x2)B(y1, y2),闵可夫斯基距离的计算公式为:

对于n 维空间中的两点A(x1...xn)B(y1...yn),闵可夫斯基距离的计算公式为:

根据p 取值的不同,闵可夫斯基距离表示不同的距离:

  • p=1 时,就是曼哈顿距离;
  • p=2 时,就是欧氏距离;
  • p 趋近于无穷大的时候,就是切比雪夫距离。

3,向量的长度

向量也是有大小的,向量的大小就是向量的长度。

向量的长度也叫向量的模,它是向量所对应的点到空间原点的距离,通常使用欧氏距离来表示向量的长度。

数学中有一个概念叫做范数,范数常被用来衡量向量的长度。

范数有4 种,分别对应向量的4 种距离:

  • L1 范数,用 ||x|| 表示,对应于麦哈顿距离。
  • L2 范数,用 ||x||2 表示,对应于欧式距离。
  • L∞ 范数,用 ||x||∞ 表示,对应于切比雪夫距离。
  • Lp 范数,用 ||x||p 表示,对应于闵可夫斯基距离。

4,向量的夹角

向量的夹角经常用余弦值表示。

对于二维空间中的两个点A(x1, x2)B(y1, y2),余弦的计算公式为:

对于n 维空间中的两点A(x1...xn)B(y1...yn),余弦的计算公式为:

夹角的余弦取值范围是[-1, 1],那么:

  • 当两个向量的方向重合时,余弦值最大,为1
  • 当两个向量的方向相反时,余弦值最小,为 -1
  • 余弦值越大,说明夹角越小,两点相距就越近。
  • 余弦值越小,说明夹角越大,两点相距就越远。

5,向量距离与夹角的使用

我们可以将向量的距离与夹角展现在同一个N 维坐标系中,如下:

向量的余弦取值范围是[-1, 1],余弦值越大,表示越相似,正好与相似度成正比。

对于向量之间的距离,通常用欧式距离 ED表示,ED 越小,表示越相似,与相似度成反比,而且ED 的取值范围非常大。

所以通常会将欧式距离进行 1/(ED+1) 归一化处理,用ED' 表示。ED'的取值范围是[0, 1],并且与相似度成正比:

  • 当 ED 为 0 时,ED'值是 1,表示相似度为 1,事物完全相同。
  • 当 ED 趋近于无穷大时,ED'值是 0,表示相似度为 0,事物完全不同。

应用空间向量模型的机器学习算法有 K 近邻(KNN)分类、K 均值(K-Means) 聚类等。

6,如何判断文档的相似度

为了让计算机能够判断现实事物的相似度,我们引出了空间向量的概念。

下面我们来看如何使用空间向量,来判断文档相似度

比如,现在我们有两个中文句子,要判断这两个句子的相似度:

  • 句子1:我去过北京,也去过天安门。
  • 句子2:我也去过北京,但没去过天安门。

要想将文档转换成向量,首先需要对文档进行分词。

分词

我们可以使用 jieba 对这两个句子进行分词,结果如下:

  • 句子1:[‘我’, ‘去过’, ‘北京’, ‘也’, ‘去过’, ‘天安门’]
  • 句子2:[‘我’, ‘也’, ‘去过’, ‘北京’, ‘但’, ‘没’, ‘去过’, ‘天安门’]

可以得到所有词的集合:

  • 分词集合:[‘没’, ‘但’, ‘北京’, ‘我’, ‘去过’, ‘天安门’, ‘也’]

计算每个句子的分词的词频:

  • 句子1:{‘没’:0, ‘但’:0, ‘北京’:1, ‘我’:1, ‘去过’:1, ‘天安门’:1, ‘也’:1}
  • 句子2:{‘没’:1, ‘但’:1, ‘北京’:1, ‘我’:1, ‘去过’:1, ‘天安门’:1, ‘也’:1}

从而可以得到词频向量:

  • 句子1:[0, 0, 1, 1, 1, 1, 1]
  • 句子2:[1, 1, 1, 1, 1, 1, 1]

上文中,我们介绍了,可以通过向量的距离或者余弦夹角来度量向量之间的相似度。这里我们使用余弦夹角来计算。我们知道 N 维空间的余弦公式为:

从而可以计算余弦夹角为:

可以看到,最终算出的余弦夹角为 0.85,比较接近1,说明这两个句子还是很相近的。

本篇文章主要介绍了以下几点:

  • 要想让计算机理解现实世界中的事物,需要将其转换成空间向量的形式。
  • 可以通过计算空间向量之间的距离或者夹角,来衡量事物之间的相似度。
  • 向量之间的夹角通常使用余弦夹角值
  • 向量之间的距离有4 种,分别是:
    • 麦哈顿距离
    • 欧式距离(最常用)
    • 切比雪夫距离
    • 闵可夫斯基距离
  • 案例:如何使用空间向量模型判断文档相似度。

(本节完。)


推荐阅读:

决策树算法-理论篇-如何计算信息纯度

决策树算法-实战篇-鸢尾花及波士顿房价预测

朴素贝叶斯分类-理论篇-如何通过概率解决分类问题

朴素贝叶斯分类-实战篇-如何进行文本分类


欢迎关注作者公众号,获取更多技术干货。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK