文章目錄
- 前言
- 4. Token Embeddings綜合運用演示
- 4.1 Token Embeddings處理
- 4.2 偽代碼示例
- 4.3 計算cat和dog兩個詞的相近程序
- 4.3.1 計算方法
- 4.3.2 例子
- 4.3.3 輸出結果
前言
上一篇文章了解了Token Embeddings的原理,這一篇,我們一起來綜合運用學到的知識來深入了解Token Embeddings
4. Token Embeddings綜合運用演示
4.1 Token Embeddings處理
假設我們有一個詞匯表包含以下單詞:['cat', 'dog', 'car', 'apple']
。如果使用詞袋模型,每個單詞用一個獨立的維度表示,我們會得到如下表示:
cat -> [1, 0, 0, 0]
dog -> [0, 1, 0, 0]
car -> [0, 0, 1, 0]
apple -> [0, 0, 0, 1]
在這種表示中,單詞之間的相似性無法體現出來。相反,如果我們使用詞嵌入(例如,使用預訓練的詞向量模型),每個單詞將被映射到一個高維向量空間:
cat -> [0.2, 0.1, 0.5, 0.3]
dog -> [0.3, 0.1, 0.6, 0.4]
car -> [0.7, 0.8, 0.2, 0.1]
apple -> [0.5, 0.4, 0.9, 0.3]
在這個高維向量空間中,‘cat’ 和 ‘dog’ 由于具有相似的語義,因此它們的向量表示也相對接近。而 ‘car’ 和 ‘apple’ 的向量表示則與它們相距較遠。
4.2 偽代碼示例
下面是一個使用預訓練詞向量的簡單示例,展示如何將單詞映射到高維向量空間:
import numpy as np# 預訓練的詞嵌入示例
pretrained_embeddings = {'cat': [0.2, 0.1, 0.5, 0.3],'dog': [0.3, 0.1, 0.6, 0.4],'car': [0.7, 0.8, 0.2, 0.1],'apple': [0.5, 0.4, 0.9, 0.3]
}# 輸入單詞列表
words = ['cat', 'dog', 'car', 'apple']# 將單詞映射到嵌入向量
word_embeddings = np.array([pretrained_embeddings[word] for word in words])print("Word Embeddings:")
print(word_embeddings)
4.3 計算cat和dog兩個詞的相近程序
4.3.1 計算方法
判斷兩個詞的詞向量是否相近,通常使用向量相似度度量,而不是簡單的差值平方根算法。常見的相似度度量方法有以下幾種:
1) 余弦相似度(Cosine Similarity)
余弦相似度(Cosine Similarity)是一種計算兩個向量之間的相似度的方法,常用于文本相似度的計算。余弦相似度公式可以表示為:
cosine similarity = (A ? B) / (||A|| * ||B||)
其中,A 和 B 分別是兩個向量,A ? B 表示兩個向量的點積(內積),||A|| 和 ||B|| 分別表示兩個向量的范數(長度)。
具體步驟如下:
第1步:計算向量 A 和向量 B 的點積(內積),即 A ? B。
第2步:計算向量 A 的范數,即 ||A||,可以使用歐幾里得范數或其他范數。
第3步:計算向量 B 的范數,即 ||B||。
第4步:將步驟 1 得到的點積除以步驟 2 和步驟 3 得到的范數,即得到余弦相似度。
余弦相似度的取值范圍為 [-1, 1],值越接近 1 表示兩個向量越相似,值越接近 -1 表示兩個向量越不相似,值為 0 表示兩個向量正交(不相關)。
2) 歐氏距離(Euclidean Distance)
歐氏距離,也稱為歐幾里得距離,是一種用于測量兩個點之間的直線距離的度量方法。在二維或多維空間中,歐氏距離可以通過計算兩個點之間的坐標差的平方和的平方根來計算。
歐氏距離的公式為:
d = √((x2 - x1)^2 + (y2 - y1)^2 + … + (xn - x1)^2)
其中,(x1, y1, …, xn) 和 (x2, y2, …, xn) 是兩個點的坐標。歐氏距離可以用來衡量點之間的相似性或差異性。較小的歐氏距離表示點之間更接近,而較大的歐氏距離表示點之間更遠。
歐氏距離在機器學習和數據挖掘中被廣泛應用,特別是在聚類算法、分類算法和回歸算法中。它可以用于計算兩個樣本的相似性,并在模式識別和圖像處理等領域中用于比較特征向量之間的差異。歐氏距離,也稱為歐幾里得距離,是一種用于測量兩個點之間的直線距離的度量方法。在二維或多維空間中,歐氏距離可以通過計算兩個點之間的坐標差的平方和的平方根來計算。
歐氏距離的公式為:
d = √((Y1 - X1)^2 + (Y2 - X2)^2 + … + (Yn - Xn)^2)
其中,(X1, X2, …, Xn) 和 (Y1, Y2, …, Yn) 是兩個點的坐標。歐氏距離可以用來衡量點之間的相似性或差異性。較小的歐氏距離表示點之間更接近,而較大的歐氏距離表示點之間更遠。
歐氏距離在機器學習和數據挖掘中被廣泛應用,特別是在聚類算法、分類算法和回歸算法中。它可以用于計算兩個樣本的相似性,并在模式識別和圖像處理等領域中用于比較特征向量之間的差異。
3) 曼哈頓距離(Manhattan Distance)
曼哈頓距離,也稱為城市塊距離(City Block Distance)或L1距離,是計算兩點之間的距離的一種方法。它是通過計算兩個點在坐標系中每個維度上坐標差的絕對值之和來確定的。在二維平面上,曼哈頓距離可以理解為通過直角路徑從一個點移動到另一個點所需的最小步數。在三維空間中,曼哈頓距離可以理解為通過在x、y、z軸上移動的最小步數。
曼哈頓距離的計算公式為:
d = |x1 - x2| + |y1 - y2|
其中,(x1,y1)和(x2,y2)是兩點的坐標。
曼哈頓距離的特點是,它只考慮了兩點在各個維度上的坐標差,而沒有考慮它們之間的直線距離。因此,曼哈頓距離在描述城市交通路徑、電路板布線等問題時更為合適,因為它更符合實際情況。
在機器學習中,曼哈頓距離常用于聚類算法(如K均值聚類)中,用于度量樣本之間的相似度或距離。它也可以用于特征選擇、異常檢測等任務中。
總結來說,曼哈頓距離是通過計算兩個點在各個維度上坐標差的絕對值之和來度量它們之間的距離。它在城市交通路徑、聚類算法等應用中具有重要意義。
4) 其他相似度度量
還有一些其他相似度度量方法,如杰卡德相似度(Jaccard Similarity)、漢明距離(Hamming Distance)等,具體選擇取決于應用場景和需求。
4.3.2 例子
以下是使用余弦相似度和歐氏距離衡量兩個詞向量相似度的示例代碼:
import numpy as np
from numpy.linalg import norm# 示例詞向量
embedding_cat = np.array([0.2, 0.1, 0.5, 0.3])
embedding_dog = np.array([0.3, 0.1, 0.6, 0.4])# 計算余弦相似度
cosine_similarity = np.dot(embedding_cat, embedding_dog) / (norm(embedding_cat) * norm(embedding_dog))
print(f"Cosine Similarity between 'cat' and 'dog': {cosine_similarity}")# 計算歐氏距離
euclidean_distance = np.linalg.norm(embedding_cat - embedding_dog)
print(f"Euclidean Distance between 'cat' and 'dog': {euclidean_distance}")# 計算曼哈頓距離
manhattan_distance = np.sum(np.abs(embedding_cat - embedding_dog))
print(f"Manhattan Distance between 'cat' and 'dog': {manhattan_distance}")
4.3.3 輸出結果
上述代碼的輸出如下:
Cosine Similarity between 'cat' and 'dog': 0.992
Euclidean Distance between 'cat' and 'dog': 0.141
Manhattan Distance between 'cat' and 'dog': 0.3
- 余弦相似度:值接近 1,表明 ‘cat’ 和 ‘dog’ 的向量非常相似。
- 歐氏距離:值較小,表明 ‘cat’ 和 ‘dog’ 的向量距離很近。
- 曼哈頓距離:值也較小,同樣表明 ‘cat’ 和 ‘dog’ 的向量距離較近。