計算機如何理解事物的相關性-文件的相似度判斷
阿新 • • 發佈:2020-11-27
> **公號:碼農充電站pro**
> **主頁:**
生活中,我們經常會對比兩個事物的**相關性**,也可以叫做**相似度**。
- 如果一件事物與另一件事物的相似度比較高,那這兩件事物的相關性就比較大。
- 如果一件事物與另一件事物的相似度比較低,那這兩件事物的相關性就比較小。
人類會根據自己的經驗,很容易的判斷兩件事物是否相似,或者相似度是多少。那如何讓**計算機**也能夠進行這樣的判斷呢?
### 1,空間向量模型
我們都知道,計算機並沒有思維,它只能理解數字。所以,如果想讓計算機理解我們現實世界中的事物,必須先把現實事物轉換成數字。
空間向量模型假設,任何事物都可以轉換成 **N 維空間中的一個點**,這個點稱為**向量**,然後通過計算**向量之間的距離或夾角**,來判斷向量的之間相關性,進而判斷事物之間的相關性。
- 向量之間的距離越大,事物就越不相關;距離越小就越相關。
- 向量之間的夾角越大,事物就越不相關;夾角越小就越相關。
***什麼是向量***
向量代表了事物的特徵。
向量是相對標量而言,標量只是單個數字,沒有方向性。向量也叫向量,由一組數字構成,具有方向性。
例如,用下圖中的 `x` 表示向量,其中 `n` 表示向量的維度:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126105634340.png#pic_center)
### 2,向量之間的距離
兩個向量所對應的兩點之間的距離就是向量的距離,距離可以描述不同向量在向量空間中的差異,也就是現實事物之間的差異。
常用的計算距離的方法有四種:
- 麥哈頓距離
- 歐式距離
- 切比雪夫距離
- 閔可夫斯基距離
其中使用最多的是歐氏距離,下面一一介紹。
***麥哈頓距離***
**麥哈頓距離**可以理解為街道距離,或者計程車距離。
可以看到下圖中,從A 點到B 點,不管是走**1線路** 還是**2線路**,距離都是一樣的,這個線路的距離就是麥哈頓距離。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126150844921.png#pic_center)
二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,麥哈頓距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126151118739.png#pic_center)
`n` 維空間中的兩個點`A(x1...xn)` 和`B(y1...yn)`,麥哈頓距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126151537145.png#pic_center)
***歐式距離***
**歐式距離**也叫歐幾里得距離,比較好理解,就是直線距離。
如下圖,A 點到B 點的直線距離就是歐式距離。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152331839.png#pic_center)
對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,歐式距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020112615245910.png#pic_center)
對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,歐式距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152629735.png#pic_center)
***切比雪夫距離***
**切比雪夫距離**可以類比為在方格中走格子,怎樣走的格子數最少。
如下圖中,從A 格子走到B 格子,先斜線走,再直線走,最終走的**格子數**就是切比雪夫距離。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152845911.png#pic_center)
對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,切比雪夫距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020112615313465.png#pic_center)
上面公式的含義是,`∣x1 − y1∣` 和 `∣x2 − y2∣` 兩者的最大者。
對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,切比雪夫距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153148563.png#pic_center)
***閔可夫斯基距離***
**閔可夫斯基距離**也叫做閔氏距離,它並不是一種單獨的距離,而是上面三種距離的統一。
對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,閔可夫斯基距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153612679.png#pic_center)
對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,閔可夫斯基距離的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153620989.png#pic_center)
根據`p` 取值的不同,閔可夫斯基距離表示不同的距離:
- 當 `p=1` 時,就是曼哈頓距離;
- 當 `p=2` 時,就是歐氏距離;
- 當 `p` 趨近於無窮大的時候,就是切比雪夫距離。
### 3,向量的長度
向量也是有大小的,向量的大小就是向量的長度。
向量的長度也叫**向量的模**,它是向量所對應的**點到空間原點的距離**,通常使用**歐氏距離**來表示向量的長度。
數學中有一個概念叫做**範數**,範數常被用來衡量向量的長度。
範數有4 種,分別對應向量的4 種距離:
- `L1` 範數,用 **||x||** 表示,對應於麥哈頓距離。
- `L2` 範數,用 **||x||2 ** 表示,對應於歐式距離。
- `L∞` 範數,用 **||x||∞** 表示,對應於切比雪夫距離。
- `Lp` 範數,用 **||x||p** 表示,對應於閔可夫斯基距離。
### 4,向量的夾角
向量的夾角經常用**餘弦值**表示。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126162220818.png?#pic_center)
對於二維空間中的兩個點`A(x1, x2)` 和 `B(y1, y2)`,餘弦的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163139924.png#pic_center)
對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,餘弦的計算公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163249480.png?#pic_center)
夾角的餘弦取值範圍是`[-1, 1]`,那麼:
- 當兩個向量的方向重合時,餘弦值最大,為`1`。
- 當兩個向量的方向相反時,餘弦值最小,為 `-1`。
- 餘弦值越大,說明夾角越小,兩點相距就越近。
- 餘弦值越小,說明夾角越大,兩點相距就越遠。
### 5,向量距離與夾角的使用
我們可以將向量的距離與夾角展現在同一個`N` 維座標系中,如下:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126165059162.png?#pic_center)
向量的餘弦取值範圍是`[-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](https://github.com/fxsjy/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` 維空間的餘弦公式為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163249480.png?#pic_center)
從而可以計算餘弦夾角為:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126223801142.png?#pic_center)
可以看到,最終算出的餘弦夾角為 **0.85**,比較接近**1**,說明這兩個句子還是很相近的。
### 7,總結
本篇文章主要介紹了以下幾點:
- 要想讓計算機理解現實世界中的事物,需要將其轉換成**空間向量**的形式。
- 可以通過計算空間向量之間的**距離**或者**夾角**,來衡量事物之間的相似度。
- 向量之間的夾角通常使用**餘弦夾角值**。
- 向量之間的距離有4 種,分別是:
- 麥哈頓距離
- 歐式距離(最常用)
- 切比雪夫距離
- 閔可夫斯基距離
- 案例:如何使用空間向量模型判斷文件相似度。
(本節完。)
---
**推薦閱讀:**
[***決策樹演算法-理論篇-如何計算資訊純度***](https://www.cnblogs.com/codeshell/p/13948083.html)
[***決策樹演算法-實戰篇-鳶尾花及波士頓房價預測***](https://www.cnblogs.com/codeshell/p/13984334.html)
[***樸素貝葉斯分類-理論篇-如何通過概率解決分類問題***](https://www.cnblogs.com/codeshell/p/13999440.html)
[***樸素貝葉斯分類-實戰篇-如何進行文字分類***](https://www.cnblogs.com/codeshell/p/14034097.html)
---
歡迎關注作者公眾號,獲取更多技術乾貨。
![碼農充電站pro](https://img-blog.csdnimg.cn/20200505082843773.png?#pic