Skip to content

距离度量

PistaDB 支持 5 种距离度量——每种度量在每种索引上都有实现,并尽可能用 SIMD 加速。

度量适用场景
COSINE文本嵌入——OpenAI text-embedding-3、Cohere、sentence-transformers、BGE、GTE
IP内积——向量已 L2 归一化时与余弦等价,速度更快
L2图像 / 多模态嵌入(CLIP、ImageBind)
L1稀疏特征向量、BM25 式混合检索
HAMMING二值嵌入、哈希去重

SIMD 加速

距离计算内核根据主机 CPU 在运行时自动派发:

  • x86-64:distance_avx2.c 中的 AVX2 + FMA 路径
  • ARM:distance_neon.c 中的 NEON 路径
  • 回退:distance.c 中的可移植标量实现

典型加速比:对于 768–1536 维 float32 向量,比标量实现快 4–8 倍

如何选择度量

python
from pistadb import PistaDB, Metric, Index

# OpenAI / Cohere / sentence-transformers —— 余弦距离
db = PistaDB("docs.pst", dim=1536, metric=Metric.COSINE, index=Index.HNSW)

# 已经归一化的向量(例如 BGE 开启 normalize=True)—— 内积更快
db = PistaDB("docs.pst", dim=1024, metric=Metric.IP, index=Index.HNSW)

# CLIP 图像向量 —— L2 距离
db = PistaDB("clip.pst", dim=512, metric=Metric.L2, index=Index.HNSW)

# 二值哈希(例如感知哈希)—— 汉明距离
db = PistaDB("dedup.pst", dim=64, metric=Metric.HAMMING, index=Index.LINEAR)

**小贴士:**如果你的嵌入模型在输出时已经归一化,优先用 Metric.IP。 它的排序结果与 cosine 相同,但省去了每次查询的归一化步骤。

基于 MIT 协议发布