에듀테크 프로젝트 대시보드
MinHash (문서 유사도)
웹에는 거의 똑같은 페이지가 수억 개 떠 있다. 두 문서가 얼마나 겹치는지 재는 정확한 척도는
자카드 유사도 |A∩B| / |A∪B| 지만, 문서마다 단어 집합을 통째로 비교하면 너무 느리다.
MinHash 는 각 문서를 수백 개의 작은 정수(시그니처)로 압축해 두고,
시그니처가 일치하는 비율만으로 자카드 유사도를 추정한다. 구글의 중복 페이지 제거,
표절 검사기, LLM 학습 데이터 중복 제거에 실제로 쓰인다.
슁글 = 이어지는 단어 2개 묶음. 문서를 슁글 집합으로 바꾸면 순서·중복이 사라지고 "어떤 조각들로 이루어졌는가"만 남는다. ■ 교집합 ■ A에만 ■ B에만
해시 함수 hᵢ(x) = (aᵢ·x + bᵢ) mod p 하나가 슁글들을 뒤섞는다. 각 문서에 대해
그 함수값이 가장 작은 슁글의 해시값을 기록한 것이 시그니처의 한 칸이다.
아래는 처음 12개 함수의 결과 — 초록 행은 A·B가 같은 값이 나온 칸이다.
파란 선 = 앞에서부터 k개 함수만 썼을 때의 추정값. 초록 점선 = 실제 자카드 유사도.
함수 개수 n에서 추정 오차의 표준편차는 대략 √(J(1−J)/n) — 정밀도를 2배로 올리려면
함수를 4배 늘려야 한다.
해시 함수는 A∪B 의 원소들을 무작위로 줄 세운다. 이때 맨 앞에 서는 원소는
합집합의 어떤 원소든 될 확률이 똑같다. A와 B의 시그니처 칸이 같으려면 그 1등 원소가
교집합에 속해야 한다.
1등이 교집합 원소일 확률 = 교집합 크기 / 합집합 크기 = 바로 자카드 유사도.
그래서 함수 n개 중 일치한 칸의 비율이 자카드의 불편추정량이 된다.
문서가 1KB든 1MB든 시그니처는 항상 n개 정수. 원문을 버리고 지문만 저장·비교하면 되므로 수억 문서 쌍도 감당할 수 있다. 정확도는 n으로 조절한다.
시그니처를 b개 밴드(각 r행)로 쪼개, 한 밴드라도 통째로 같은 문서쌍만
후보로 본다. 임계값 ≈ (1/b)1/r 근처에서 S자 곡선으로 걸러져,
모든 쌍을 비교하지 않고도 닮은꼴을 찾는다.
1997년 Andrei Broder(AltaVista)가 웹 중복 페이지 제거를 위해 고안 — "syntactic clustering of the web".