在现代机器学习和人工智能系统中,向量(Vector) 是表示数据的核心方式之一。不同的向量类型适用于不同的场景,尤其在模型推理、存储效率、计算性能等方面有显著差异。

一: 向量类型

在milvus向量数据库中,实现的向量类型有

  1. Binary Vector(二进制向量),         
  2. Float Vector(浮点数向量)
  3. Float16 Vector(半精度浮点向量)
  4. BFloat16 Vector(脑浮点16位向量) 
  5. Sparse Vector(稀疏向量)
  6. BM25(VarChar)

二: 数学计算原理

1️⃣ Binary Vector(二进制向量)

一句话

只用 0 和 1 表达特征:有 / 没有。

数学直觉

一个向量是:

v = [0, 1, 1, 0, 0, 1]

每一位只回答一个问题:

“这个特征存在吗?”

相似度通常用 汉明距离(Hamming Distance)
= 两个向量 不一样的位数

计算示意

A = 1 0 1 1 0

B = 1 1 0 1 0

   ↑ ↑ 不一样 2 位 → 距离 = 2

特点

  • ✅ 极快、极省内存

  • ❌ 信息极粗糙,没有“程度”

2️⃣ Float Vector(32 位浮点向量)

一句话

最标准的“AI 向量”,每一维都是一个实数。

数学直觉

v = [0.12, -0.87, 1.34, 0.55]

常用相似度:余弦相似度

cos⁡(θ)=v⋅w∣v∣∣w∣\cos(\theta) = \frac{v \cdot w}{|v||w|}cos(θ)=∣v∣∣w∣v⋅w​

图形直觉(重点)

w

/

/

θ ← 看角度,不看长度

/

----→ v

特点

  • ✅ 表达能力最强(语义、语音、图像)

  • ❌ 内存大、算力贵(4 字节 × 维度)

3️⃣ Float16 Vector(半精度浮点)

一句话

Float32 的“瘦身版”,精度减半,速度翻倍。

数学本质

  • 数值还是实数

  • 16 位表示(而不是 32 位)


Float32: 0.1234567 Float16: 0.1235 ← 精度变粗

特点

  • ✅ 显存 / 内存减半

  • ✅ GPU 友好

  • ❌ 小数不准,极小数容易丢


4️⃣ BFloat16 Vector(Brain Float 16)

一句话

为“深度学习”定制的 16 位浮点,不追求小数,只保留数量级。

和 Float16 的关键区别(这是重点)


Float16 : 小数准,范围小 BFloat16 : 小数粗,范围大

直觉对比


1e-8 Float16 → 直接变 0 BFloat16 → 还能表示

特点

  • ✅ 训练大模型更稳定

  • ✅ Google / TPU / 新 GPU 常用

  • ❌ 不适合高精度数值计算


5️⃣ Sparse Vector(稀疏向量)

一句话

“大部分是 0,只存不为 0 的那几维。”

数学形式

原始向量(假设 10 万维):


[0, 0, 0, 3.2, 0, 0, 1.1, 0, ...]

存储方式(索引 + 值):


{ 3: 3.2, 6: 1.1 }

图示


维度 → 1 2 3 4 5 6 7 8 值 → 0 0 0 5 0 2 0 0 ↑ ↑

特点

  • ✅ 非常省内存

  • ✅ 适合关键词、特征工程

  • ❌ 维度爆炸时计算复杂


6️⃣ BM25 (VarChar)

这个严格来说不是向量模型,而是经典文本打分公式
但工程上常被“当成向量检索的一种”

一句话

“关键词匹配 + 词频 + 逆文档频率”的老牌王者。

核心思想

一个词:

  • 在当前文档中 出现多 → 更重要

  • 在全局文档中 很少见 → 更重要

简化公式直觉

score=TF×IDF×length_normscore = TF \times IDF \times length\_normscore=TF×IDF×length_norm

示例


查询:Java 向量 数据库 文档A:Java Java Java 文档B:Java 向量 数据库 → 文档B 分更高(覆盖更多关键词)

特点

  • ✅ 可解释性极强

  • ✅ 不需要训练

  • ❌ 不懂“语义相近”

工程选型建议

  • 向量数据库 / RAG / Embedding
    → Float32 / Float16 / BFloat16

  • 大规模、高性能检索
    → Float16 / Binary

  • 关键词检索 + 可解释
    → BM25 + Sparse

  • 工业级最佳实践
    BM25(召回) + 向量(排序)混合检索

如何选择?

  • 需要高精度 + 通用性 → 使用 Float Vector
  • 追求性能与内存优化 → 使用 Float16 或 BFloat16
  • 处理稀疏文本/特征 → 使用 Sparse Vector
  • 纯关键词匹配 → 使用 BM25(VarChar)
  • 极端压缩需求 → 使用 Binary Vector(但需牺牲语义)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐