the-semq-group/semq は、埋め込みベクトルを CPU や言語にかかわらず同じバイト列へ変換する決定論的な符号コードのリポジトリである。2026-10-22 のコミット f4ac419(#30) は rebuild ベンチマークに SimHash を新しい比較対象として追加し、基準線となる floor とどの程度同じ判定を出すかを再検討し、同じ FP32 投影を異なるライブラリ・異なる精度で計算したときにハッシュビットがどれだけ変わるかを測定した。根拠はコミットページに残されている: https://github.com/The-SEMQ-Group/semq/commit/f4ac41952ef980c2b126ca1f3428a2e5636cccbf
SimHash は、ベクトルをランダムな超平面に射影して符号のビット列に折り畳む手法である。このコミットは SimHash に floor のビット予算である次元あたり 3 ビットを割り当てた。quant4 量子化が 2×4 シンボル、つまり 3 ビットを使うためである。判定は変更のない rebuild で見た分布を基準(null)とし、変更された行数と行単位のハミング距離(何ビットの位置が違うか)という 2 つの統計量を併用する。
測定は NVIDIA A10G 1 台で行われた。NumPy で計算した FP32 投影を基準として、PyTorch CPU、GPU バッチ 64 と 4,096、TF32 を同じ入力に適用してビットが変わった行を数えたところ、合計 1,150,307 ベクトル(シードから抽出した単位ベクトル 1,000,000 個を含む)のうち、PyTorch 側は 100 万行あたり 3 行から 49 行、TF32 は 68,794 行が異なっていた。バッチサイズは A10G では変更された行数に影響しなかった。ビット差がそのまま誤検出というわけではないため、NumPy でハッシュした floor と比較すると、変更のない rebuild は FP32 ハッシュでは 0.05% の draw でのみ棄却され、TF32 ハッシュでは 100% 棄却された。FP16 と BF16 は意図的に精度を下げたケースであるため調査対象から除外された。
ただし、この数値は A10G 1 台の結果にすぎない。精度の調査は CUDA がなければ結果がないことを明記しており、ページはその箇所で失敗し、仕様は量子化段階のみを固定している。よって TF32 の 100% の棄却は GPU の不具合ではなく、精度差から出た値と読むのが妥当である。95% 区間が重なる差は重なると明示する方式も導入されたが、他の GPU や他のライブラリバージョンで同じ数値が再現されるかは、まだ判断が早い。変更は benchmarks/ と docs/ のベンチマークと文書に留まり、コアライブラリのコードには手を触れていない。