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 의존성