MinHash

v0.1.0添加于 2026年9月26日

基于 MinHash 签名的近似重复检测,结果与 datasketch 逐位一致。以常数空间估算 token 集合之间的 Jaccard 相似度,用于 RAG 语料库和训练数据的去重。

cargo install kura-rs
kura add minhash

将 2 个源码文件复制到你的项目中。此后代码完全归你所有。

如果其他工具已经安装了 kura 命令,请运行 cargo install kura-rs --bin kura-rs,并改用 kura-rs add。

use crate::parts::minhash::MinHasher;

// Same num_perm and seed as datasketch.MinHash() → identical signatures
let hasher = MinHasher::new(128, 1);

let a = hasher.signature("the quick brown fox jumps".split_whitespace());
let b = hasher.signature("the quick brown fox leaps".split_whitespace());

println!("estimated jaccard = {:.3}", a.jaccard(&b));

使用差分测试与 datasketch 2.0.0(Python)进行对照:向两个实现输入相同数据,并比较输出结果。

参考实现
datasketch
Python 2.0.0
测试用例
20,000
差分测试
通过
20,000 / 20,000
全部一致
最近运行
2026年9月26日
UTC

在不同输入规模下对比 kura-rs(Rust)与 datasketch。 在所有测量的输入规模下均更快,最高快 19×。

kura-rs (Rust)datasketch
每次运行的耗时(越低越好)。
显示数据表
输入规模kura-rs (Rust)datasketch加速比
100 ms0.01 ms19×
1000 ms0.04 ms9.9×
1,0000.04 ms0.37 ms8.8×
10,0000.42 ms3.73 ms9.0×
100,0004.14 ms37 ms8.9×

输入规模:tokens per document (num_perm = 128)。

测量环境:Apple M4 Pro,macOS 27.0 (arm64)。kura-rs 使用 rustc 1.98.1,参考实现使用 Python 3.14.6, numpy 2.5.3。

文件

  • parts/minhash/mod.rs
  • parts/minhash/permutation.rs

crate 依赖