MinHash

v0.1.02026年9月26日 に追加

MinHash シグネチャによる近似重複検出。datasketch とビット単位で同じ結果を返します。トークン集合どうしの 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
1回あたりの処理時間(短いほど良い)。
数値の表を見る
入力サイズ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