文章目录
前言
上一篇文章了解了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’ 的向量距离较近。