距离度量
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 相同,但省去了每次查询的归一化步骤。
