MinHash
v0.1.02026年9月26日 に追加MinHash シグネチャによる近似重複検出。datasketch とビット単位で同じ結果を返します。トークン集合どうしの Jaccard 類似度を一定のメモリ量で推定し、RAG のコーパスや学習データの重複除去に使えます。
cargo install kura-rs
kura add minhash2 個のソースファイルを自分のプロジェクトにコピーします。以後、コードはあなたのものです。
別のツールの 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