向量
非结构化数据的数值表示,用于捕捉语义信息以支持相似度检索。
什么是向量?
在人工智能与向量数据库的语境下,向量是由 embedding 模型生成的一组数字,用于捕捉非结构化数据的语义信息 — 例如文本、图片或音频。
这些模型将原始输入映射到一个高维空间中,使得语义相似的内容能够生成相近的向量,从而让 AI 系统能够基于含义进行比较,而不再局限于关键词匹配。
如何在数据库中使用向量?
- 🗂️ 存储:用 embedding 模型将数据 (如文档、商品图片或用户画像) 转化为向量,并存入向量数据库。
- 🔍 搜索:当收到新的查询请求时 (例如一段文本或一张图片),用相同的 embedding 模型将其转化为查询向量,随后使用数据库检索并返回与之最相似的向量。
借助高效的索引机制,即使在大规模数据场景下,数据库也能迅速返回相关结果。这正是语义搜索的核心:寻找含义相同的内容,而非仅仅是文字相同的内容。
向量如何赋能应用?
图像搜索就是一个绝佳的例子:
- 每张图像都会被转化为一个向量,用来捕捉其形状、色彩和物体类别等视觉特征。
- 视觉或语义上相似的图像会生成相近的向量。
通过比较这些向量,搜索系统能够:
- ✅ 在不同照片中识别同一个人:即使光照、姿势或表情发生变化,同一个人的照片也会生成相似的向量,这让系统能够可靠地匹配身份。
- ✅ 在电商平台中查找相似商品:当用户拍摄一件裙子、灯具或沙发的照片时,系统会将其向量与商品库中的向量进行比对,并检索出外观或风格相似的商品。
这一切都得益于向量数据库提供的高效的向量相似度检索功能。
什么是 Embedding 模型?
Embedding 模型是一种将原始数据转化为向量的 AI 模型 — 正如顶部示意图所示。
这些模型通过海量训练数据学习内在规律,确保语义相似的对象在向量空间中生成的向量彼此邻近 — 通常使用余弦相似度、点积或欧氏距离等距离度量来衡量。
距离度量的选择至关重要。 如果 embedding 模型是基于特定度量标准 (如余弦相似度) 训练的,那么在向量数据库中进行搜索时,也必须使用相同的度量标准,才能保证语义关系的准确性,从而获得最优的搜索结果。
若要探索和比较最新的 embedding 模型,你可以查看 Hugging Face 的 Embedding 排行榜,该榜单评估了数百种模型在不同任务和语言环境下的表现。
向量类型
向量主要分为两类:稠密向量和稀疏向量,它们各自以独特的方式捕捉数据特征。
稠密向量
稠密向量是固定长度的实值数组,其(几乎)每一个维度都承载着语义信息。这类向量通常由深度学习模型生成,这些模型将文本、图像、音频等原始输入转化为结构化的向量空间,从而反映出它们在语义上的相似性。
# 示例:神经网络模型生成的384维稠密向量
dense_vector = [ 0.012, -0.034, 0.005, 0.041, -0.022, ..., 0.018 ] # 长度 = 384- ✅ 语义丰富:能够理解上下文和深层含义 (例如,"国王 – 男人 + 女人 ≈ 皇后")
- ⚠️ 不可解释:难以直观判断究竟是哪些特征导致了相似性
稀疏向量
稀疏向量通常是极高维的 (维度大小往往等同于词汇表大小),但其中只有极少部分维度是非零值。每一个被激活的维度都对应一个特定的词项 (如单词或 n-gram),并带有如 BM25 之类的相关性权重。
在这种模型下,每篇文档都会被转化为一个向量 — 称为文档向量 — 用于记录其中出现了哪些词项以及它们的重要性。同样地,搜索查询也会使用相同的加权方案转化为稀疏向量。
与精确关键词匹配不同,查询与文档之间的相似度是通过计算两者向量的点积得出的。这种方式衡量的是加权词项的匹配程度:包含了与查询相同且重要的词项的文档会获得更高的分数 — 从而同时兼顾了词项的重叠度和重要性。
# 示例:基于 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" 视为互不相关的词