計算機如何理解事物的相關性-文件的相似度判斷

碼農充電站發表於2020-11-27

公號:碼農充電站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,事物完全不同。

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,說明這兩個句子還是很相近的。

7,總結

本篇文章主要介紹了以下幾點:

  • 要想讓計算機理解現實世界中的事物,需要將其轉換成空間向量的形式。
  • 可以通過計算空間向量之間的距離或者夾角,來衡量事物之間的相似度。
  • 向量之間的夾角通常使用餘弦夾角值
  • 向量之間的距離有4 種,分別是:
    • 麥哈頓距離
    • 歐式距離(最常用)
    • 切比雪夫距離
    • 閔可夫斯基距離
  • 案例:如何使用空間向量模型判斷文件相似度。

(本節完。)


推薦閱讀:

決策樹演算法-理論篇-如何計算資訊純度

決策樹演算法-實戰篇-鳶尾花及波士頓房價預測

樸素貝葉斯分類-理論篇-如何通過概率解決分類問題

樸素貝葉斯分類-實戰篇-如何進行文字分類


歡迎關注作者公眾號,獲取更多技術乾貨。

碼農充電站pro

相關文章