Devotd Github
新发现检索增强与搜索

the-semq-group/semq — 将 SimHash 精度比较加入 floor 基准测试

the-semq-group/semq 在 rebuild 基准测试中加入 SimHash,并在 NVIDIA A10G 上测量了当同一 FP32 投影以不同库、不同批量和不同精度计算时哈希位发生差异的程度。

仓库信息the-semq-group/semq ↗

the-semq-group/semq 在 rebuild 基准测试中加入 SimHash,并在 NVIDIA A10G 上测量了当同一 FP32 投影以不同库、不同批量和不同精度计算时哈希位发生差异的程度。

GitHub 项目说明: Deterministic symbolic codes for embedding vectors. Byte-identical across CPUs and languages, content-addressed, diffable and verifiable. C core with Python, Rust, Go and TypeScript bindings.

星标
★ 13
复刻
0
语言
Python
许可证
NOASSERTION
最新版本
v1.1.0
查看原始来源 ↗在 GitHub 查看 ↗

the-semq-group/semq 是一个确定性符号代码的仓库,它把嵌入向量转换为与 CPU 和语言无关的相同字节序列。2026-10-22 的提交 f4ac419(#30) 把 SimHash 作为新的比较对象加入 rebuild 基准测试,重新考察它与作为基线的 floor 在多大程度上能给出相同判定,并测量当同一 FP32 投影以不同库和不同精度计算时哈希位会相差多少。依据原样保留在提交页面上:https://github.com/The-SEMQ-Group/semq/commit/f4ac41952ef980c2b126ca1f3428a2e5636cccbf

SimHash 是一种把向量投影到随机超平面、再折叠成符号位串的方法。该提交给 SimHash 分配了 floor 的比特预算,即每维 3 比特。这是因为 quant4 量化使用 2×4 个符号,也就是 3 比特。判定以未变更的 rebuild 中观察到的分布为基准(null),并同时使用两个统计量:发生变化的行数和行级汉明距离(有多少个位不同)。

测量在单台 NVIDIA A10G 上进行。以用 NumPy 计算的 FP32 投影为基准,把 PyTorch CPU、GPU 批量 64 和 4,096、TF32 应用于相同输入,统计位发生变化的行;在总计 1,150,307 个向量(包括用种子抽取的 1,000,000 个单位向量)中,PyTorch 一侧每百万行有 3 到 49 行不同,TF32 则有 68,794 行不同。批量大小在 A10G 上不影响发生变化的行数。位差异并不等同于误报,因此与用 NumPy 计算哈希的 floor 相比,未变更的 rebuild 在 FP32 哈希下只有 0.05% 的抽取被拒绝,而在 TF32 哈希下 100% 被拒绝。FP16 和 BF16 因为是刻意降低精度的情况,被排除在研究之外。

不过这一数值只是单台 A10G 的结果。精度研究明确写明没有 CUDA 就没有结果,因此页面在那里直接失败,而规格只固定了量化阶段。因此 TF32 的 100% 拒绝更应被理解为来自精度差异的值,而不是 GPU 缺陷。代码中还加入了一种把 95% 区间重叠的差异明确说明为重叠的方式,但同样的数值能否在其他 GPU 或其他库版本上重复出现,目前判断还为时过早。改动只停留在 benchmarks/ 和 docs/ 下的基准测试与文档,核心库代码未被触碰。