向量數(shù)據(jù)庫(kù)的崛起:從矢量搜索到深度學(xué)習(xí) (二)

前言
在上一節(jié)中,我們簡(jiǎn)要介紹了向量數(shù)據(jù)庫(kù)的背景以及對(duì)非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行向量化的方法,即 Embedding。那么我們?nèi)绾螌⑦@些特征向量應(yīng)用于搜索任務(wù)呢?在搜索任務(wù)中,最常見的情況是從數(shù)據(jù)庫(kù)中查找與給定向量最相似的數(shù)據(jù)。因此,我們需要一種能夠衡量向量之間相似程度的算法,這也是本節(jié)將要介紹的內(nèi)容。
繼續(xù)上一節(jié)的例子,在如下詞頻向量中:
極限科技: [ 1 1 1 1 0 0 ]
科技公司: [ 0 0 1 1 1 1 ]
公司 : [ 0 0 0 0 1 1 ]
我們將尋找與“科技”最相似的單詞。
科技 : [ 0 0 1 1 0 0 ]
歐幾里德距離
歐幾里德距離<sup>[1]</sup>(Euclidean distance)是在歐幾里德空間中衡量?jī)蓚€(gè)點(diǎn)之間距離的一種度量方法。它是最常見和直觀的距離度量方法之一,用于計(jì)算實(shí)數(shù)向量空間中兩個(gè)點(diǎn)之間的直線距離。
對(duì)于給定兩個(gè)向量 x 和 y,歐幾里德距離的計(jì)算公式如下:

我們可以使用如下代碼:
import numpy as np
def distance(x, y):
?return np.sqrt(np.sum(np.square(x - y)))
來(lái)計(jì)算給定兩個(gè)向量的歐幾里德距離,例如,“科技”和“極限科技”之間的距離為 1.41:
distance(
?np.array([1, 1, 1, 1, 0, 0]),
?np.array([0, 0, 1, 1, 0, 0]),
)
除此之外,還有:
歐氏距離(Euclidean metric)
曼哈頓距離(Taxicab geometry)
切比雪夫距離(Chebyshev distance)
閔可夫斯基距離(Minkowski distance)
等其它用來(lái)衡量向量之間距離的算法。
范數(shù)
范數(shù)<sup>[2]</sup>(Norm)是一個(gè)將向量映射到非負(fù)實(shí)數(shù)的函數(shù),用于衡量向量的大小或長(zhǎng)度。在線性代數(shù)中,范數(shù)是向量空間中的一種度量,常用于衡量向量的大小、距離和相似性。
在向量空間中,最常見的范數(shù)是 Lp 范數(shù),其定義如下:

不難發(fā)現(xiàn),當(dāng) p=2 時(shí),L2 范數(shù)計(jì)算的是該向量與原點(diǎn)之間的歐幾里德距離,故又稱為歐幾里德范數(shù)。我們可以使用 numpy.linalg.norm
來(lái)計(jì)算給定向量的范數(shù)。
余弦相似度
余弦相似度<sup>[3]</sup>(Cosine similarity)是用于衡量?jī)蓚€(gè)向量之間的方向相似性的算法,余弦相似度衡量的是兩個(gè)向量之間的夾角余弦值。它的取值范圍在?1 到 1 之間,值越接近 1 表示兩個(gè)向量的方向越相似,值越接近 ?1 表示兩個(gè)向量的方向越不相似,值為 0 表示兩個(gè)向量之間沒有方向上的相似性。余弦相似度的計(jì)算公式如下:

其中,x?y 表示向量的點(diǎn)積<sup>[4]</sup>,∣x∣2 表示向量 x 的歐幾里德范數(shù)。
from numpy.linalg import norm
def cosine_similarity(x, y):
?return np.dot(x, y) / (norm(x) * norm(y))
cosine_similarity(
?[1, 1, 1, 1, 0, 0], # 極限科技
?[0, 0, 1, 1, 0, 0], # 科技
)
通過(guò)以上代碼片段,我們可以計(jì)算出“科技”與“極限科技”的余弦相似度為 0.70,同樣地,我們可以計(jì)算出“科技”與其他幾個(gè)單詞的相似度:
極限科技: 0.70
科技公司: 0.70
公司 : 0.00
通過(guò)余弦相似度計(jì)算得出的結(jié)果與我們的認(rèn)知是一致的,即在詞頻統(tǒng)計(jì)的向量中,“科技”與“公司”沒有相似度,而與“極限科技”和“科技公司”具有相同的相似度。
總結(jié)
本節(jié)介紹了余弦相似度算法,它可以在向量搜索時(shí)用于查找最相似的數(shù)據(jù)。除此之外,還有其它多種用于衡量候選者與待查找向量相似度(即得分)的算法,例如:
內(nèi)積得分(Dot product)
L2 范數(shù)得分(L2 norm score)
層次聚類得分(Hierarchical clustering score)
倒排索引得分(Inverted index score)
這些得分算法應(yīng)根據(jù)具體的應(yīng)用場(chǎng)景和需求選擇使用。
參考資料
[1]: https://zh.wikipedia.org/wiki/歐幾里得距離
[2]: https://zh.wikipedia.org/wiki/范數(shù)
[3]: https://zh.wikipedia.org/wiki/余弦相似性
[4]: https://zh.wikipedia.org/wiki/點(diǎn)積