向量量化与稀疏向量
pgvector 支持四种向量数据类型,方便您在内存占用、维度上限与检索召回率之间灵活权衡:
| 数据类型 | 元素精度 | 索引最大维度上限 | 存储空间占用 |
|---|---|---|---|
vector(n) |
32 位浮点(float32) |
2,000 维 | 字节 |
halfvec(n) |
16 位半精度浮点(float16) |
4,000 维 | 字节 |
bit(n) |
1 位二值比特(0 / 1) |
64,000 维 | 字节 |
sparsevec(n) |
非零 下标:float32 键值对 |
最多 1,000 个非零元素(总维度可达 100 万) | 字节 |
vchord 中的 RaBitQ 量化除了 pgvector 内置的量化类型外,vchord 还提供 rabitq8(8-bit)与 rabitq4(4-bit)专用量化向量类型,并在 vchordrq 索引中支持高达 60,000 维的超长向量。详见 vchord 量化类型。
半精度浮点向量(halfvec)
使用 halfvec 类型(自 pgvector 0.7.0 起引入)存储 16 位半精度浮点向量,相比 vector 可将表与索引体积直接缩减 50%:
半精度表达式索引(标量量化)
如果您希望在表中保留完整的 32 位 vector 精度(或者需要为 2,001 至 4,000 维的向量建索引,例如 3,072 维的 OpenAI text-embedding-3-large),可以通过表达式索引将 vector 转换为 halfvec:
二值向量(bit)与二值量化
结合 PostgreSQL 内置的 bit(n) 类型与 pgvector 的汉明距离(<~>)及杰卡德距离(<%>)操作符,可存储并索引高达 64,000 位的二值向量:
二值量化索引 + 全精度重排序(Re-Ranking)
使用 binary_quantize(vector) 函数在表达式索引中将每个维度压缩为 1 比特(大于 0 为 1,否则为 0),并在子查询召回候选集后使用原始 vector 列执行精确重排:
稀疏向量(sparsevec)
使用 sparsevec(自 pgvector 0.7.0 起引入)存储绝大部分维度为零的稀疏向量(例如 SPLADE、BGE-M3 稀疏输出,或由 pg_bestmatch 生成的 BM25 词频权重向量)。
稀疏向量字面量格式
语法格式为 '{下标1:值1,下标2:值2}/总维度',其中下标从 1 开始计数:
套娃(Matryoshka)子向量索引(subvector)
对于支持套娃表示学习(Matryoshka Representation Learning, MRL)的嵌入模型,可以使用 subvector(vector, start, count) 仅对前 个维度建立轻量级索引,再利用完整向量执行精确重排: