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 | 加速比 |
|---|---|---|---|
| 10 | 0 ms | 0.01 ms | 19× |
| 100 | 0 ms | 0.04 ms | 9.9× |
| 1,000 | 0.04 ms | 0.37 ms | 8.8× |
| 10,000 | 0.42 ms | 3.73 ms | 9.0× |
| 100,000 | 4.14 ms | 37 ms | 8.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 依赖
- sha10.11