向量表示
什么是向量?
在 AI 和向量数据库的语境中,向量是由 Embedding 模型生成的一组数字,用于捕捉非结构化数据的语义信息 — 例如文本、图片或音频。
这些模型将原始输入转换到一个高维空间中,语义相似的内容会生成相近的向量,使 AI 系统能够比较语义含义,而非依赖精确的关键词匹配。
如何将向量与数据库结合使用?
- 🗂️ 存储:从你的数据(文档、商品图片或用户画像等)生成 Embedding,并将其保存到向量数据库中。
- 🔍 搜索:当新的查询到来时(一个问题、一张照片等),使用同一个 Embedding 模型生成查询向量,然后让数据库找到最相似的已存储向量。
借助高效的索引,数据库即使在大规模数据下也能快速返回相关结果。这就是语义搜索的基础:找到含义相同的内容,而不仅仅是文字相同的内容。
向量如何驱动真实世界的应用?
图片搜索是一个很好的例子:
- 每张图片被转换为一个向量,捕捉其视觉特征 — 如形状、颜色和物体类型。
- 视觉或语义相似的图片最终会得到相近的向量。
通过比较这些向量,系统可以:
- ✅ 跨照片识别同一人物:即使光照、姿势或表情发生变化,同一个人的图片仍会生成相似的向量,使系统能够可靠地匹配身份。
- ✅ 在电商中查找相似商品:当用户拍摄一件裙子、灯具或沙发的照片时,系统将其向量与商品向量进行比较,检索出外观或风格相似的商品。
这一切都通过向量数据库驱动的快速向量相似度比较来实现。
什么是 Embedding 模型?
Embedding 模型是一种 AI 模型,将原始数据转换为向量 Embedding — 如页面顶部的示意图所示。
这些模型从海量训练数据中学习模式,使语义相近的对象生成在向量空间中彼此接近的向量 — 通常使用余弦相似度、点积或欧氏距离等距离度量来衡量。
距离度量的选择很重要。 如果 Embedding 模型是针对特定度量(如余弦相似度)训练的,向量数据库在搜索时应使用相同的度量,以保持语义关系并获得最佳准确度。
你可以在 Hugging Face 的 Embedding 排行榜上探索和比较最先进的 Embedding 模型,该排行榜在多种任务和语言上评估了数百个模型。
向量类型
向量表示主要分为两类:稠密向量和稀疏向量,各自以不同方式捕捉数据。
稠密向量
稠密向量是固定长度的实值 Embedding,其中(几乎)每个维度都携带语义信息。这些向量通常由深度学习模型生成,将原始输入(如文本、图片、音频)转换到反映语义相似性的结构化向量空间中。
# 示例:神经网络模型生成的 384 维稠密向量
dense_vector = [ 0.012, -0.034, 0.005, 0.041, -0.022, ..., 0.018 ] # 长度 = 384- ✅ 语义丰富:理解上下文和含义(例如,"国王 – 男人 + 女人 ≈ 皇后")
- ⚠️ 不透明:难以解释哪些特征驱动了相似性
稀疏向量
稀疏向量是高维的(通常与词表等大小)表示,其中只有少量维度的值不为零。每个活跃维度对应一个特定的词项(如单词或 n-gram),并以 BM25 等相关性分数加权。
在这种模型中,每个 Document 被转换为一个向量 — 称为 Document 向量 — 记录其中出现了哪些词项以及它们的重要程度。同样,搜索查询也使用相同的加权方案被转换为稀疏向量。
相似度通过查询向量和 Document 向量的点积来计算,而非依赖精确的关键词匹配。这种方式衡量的是加权词项的匹配程度:包含与查询相同重要词项的 Document 会获得更高的分数 — 同时奖励词项重叠和词项重要性。
# 示例:基于 50,000 词词表的稀疏向量,以 {词项: 权重} 存储
sparse_vector = {
"puppy": 2.31,
"dog": 1.85,
"pet": 1.12,
"animal": 0.76
}
# 其余约 49,996 个维度隐式为零。为了计算效率,稀疏向量使用整数索引将词项映射到词表字典中的位置,而不直接存储词项字符串。
# 词表映射,包含约 50,000 个唯一词项,以整数 ID 索引
vocab = {
"animal": 124,
"dog": 309,
"pet": 1822,
"puppy": 4017,
"cat": 5001,
"kitten": 7890,
# ...(其他词项填充字典的剩余部分)
# 总大小 ≈ 50,000
}
# 稀疏向量以 {索引: 权重} 存储
sparse_vector = {
4017: 2.31, # "puppy"
309: 1.85, # "dog"
1822: 1.12, # "pet"
124: 0.76 # "animal"
}
# 其余约 49,996 个维度隐式为零。- ✅ 可解释:非零维度直接映射到已知词项(例如,
4017→ "puppy") - ⚠️ 缺乏语义理解:将 "car" 和 "automobile" 视为不相关,除非显式关联