Zvec Logo

向量

非结构化数据的数值表示,用于捕捉语义信息以支持相似度检索。

vector embedding

什么是向量?

在人工智能与向量数据库的语境下,向量是由 embedding 模型生成的一组数字,用于捕捉非结构化数据的语义信息 — 例如文本、图片或音频。

这些模型将原始输入映射到一个高维空间中,使得语义相似的内容能够生成相近的向量,从而让 AI 系统能够基于含义进行比较,而不再局限于关键词匹配。


如何在数据库中使用向量?

  1. 🗂️ 存储:用 embedding 模型将数据 (如文档、商品图片或用户画像) 转化为向量,并存入向量数据库。
  2. 🔍 搜索:当收到新的查询请求时 (例如一段文本或一张图片),用相同的 embedding 模型将其转化为查询向量,随后使用数据库检索并返回与之最相似的向量。

借助高效的索引机制,即使在大规模数据场景下,数据库也能迅速返回相关结果。这正是语义搜索的核心:寻找含义相同的内容,而非仅仅是文字相同的内容


向量如何赋能应用?

图像搜索就是一个绝佳的例子:

  • 每张图像都会被转化为一个向量,用来捕捉其形状、色彩和物体类别等视觉特征。
  • 视觉或语义上相似的图像会生成相近的向量

通过比较这些向量,搜索系统能够:

  • 在不同照片中识别同一个人:即使光照、姿势或表情发生变化,同一个人的照片也会生成相似的向量,这让系统能够可靠地匹配身份。
  • 在电商平台中查找相似商品:当用户拍摄一件裙子、灯具或沙发的照片时,系统会将其向量与商品库中的向量进行比对,并检索出外观或风格相似的商品。

这一切都得益于向量数据库提供的高效的向量相似度检索功能。

image search


什么是 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" 视为互不相关的词

目录