언어처리

min hash

고요한하늘... 2008. 12. 13. 00:55

http://www.stanford.edu/class/cs276b/handouts/minhash.pdf

 

jaccard measure : 교집합/합집합

열 :  1 2 3 4 5 6

c1 :  0 1 1 0 1 0
c2 :  1 0 1 0 1 1

 

sim(c1,c2 ) = 2/5 = 0.4( c1과 c2가 0인것은 제외 )

 

관심사항은 c1이나 c2에 적어도 하나이상은 값이 있는 열

 

총 6개의 열이 있다고 할때 4번 열은 c1,c2가 0이기 때문에 제외하고

random하게 하나의 열을 선택했을때

3번 열이나 5번열이 선택될 확률( c1 = c2 = 1 일 확률)

4번 열을 제외했을때 남은 열의 수는 5개이고 그중에서 3,5번열을 선택할 확률은 결과적으로

2/5가 된다.

( 어차피 min hash라는게 열들을 random permutation해서 min( rank )를 선택하는 문제다

다시 말하면 min 값 말고 다른 것들은 의미 없다는 것이 된다.

그러면 결과적으로 열중에 하나를 선택하는 문제와 다를게 없다.

물론 선택을 할때 중복 선택을 배제해야 min hash에서 말하는 것과 같아지게 되지만

 

처음 예로 든 것에서

내가 1,3,5열을 차례대로 선택하게 되면( c1=c2=1인 경우는 1, 아니면 0 )

값은 0 1 1

그러면 결과적으로 c1 c2의 유사도는 2/3라고 추정할수 있다.

 

 

설명에도 나타나 있듯이 signature를 많이 선택할수록 정확률은 높아진다.

 

 

---------- 추가 -----------



http://www.stanford.edu/class/cs276b/handouts/minhash.pdf 이 pdf파일 중  위 이미지에 대해서 자세히 설명을 하면 다음과 같다.


순열 함수가 아래와 같이 3개가 있다고 가정한다.( 순열함수라는 것은 원본 데이터를 아래와 같은 순서로 읽겠다는 의미이다. 

단 읽는 순서가 변경이 되어도 원래 가지고 있던 데이터의 위치값은 변하지 않는다. 

예를 들면

a b c d 라고 있을때

첫번째 값은 a

두번째 값은 b

세번째 값은 c

네번째 값은 d 이고 이것을 역순으로 읽으면

d c b a 이다.


여기서 각 데이터의 원본 위치값으로 데이터를 치환하면 4 3 2 1 이 된다. )



perm1 = 1,2,3,4,5

perm2 = 5,4,3,2,1

perm3 = 3,4,5,1,2


데이터가 아래와 같이 있다.

C1 = 1 0 1 1 0

C2 = 0 1 0 0 1

C3 = 1 1 0 1 0


위 데이터를 설명을 좀 편하게 하기 위해서 1을 다른 심볼들로 대체한다.

0 은 그대로 0이고

1만 순차적으로 알파벳으로 대체


C1 = a 0 b c 0

C2 = 0 d 0 0 e

C3 = f g 0 h 0




첫번째 순열 함수 perm1을 위 데이터에 적용한다.


C1의 경우 첫번째 값이 a(1)이기 때문에 그것의 위치 1 { a(1)에서 괄호안의 1값은 원래 값이 1이었다는 의미이다. jaccard index를 계산할때 보통은 키워드의 존재 유무만 표시하기 때문에 0 또는 1로 표시를 한다. }

C2의 경우 첫번째 값은 0이고 두번째 값이 1이기 때문에 위치 2

C3의 경우 첫번째 값이 f(1)이기 때문에 위치 1


여기서 첫번째 두번째 세번째 이 의미지는 perm1 함수에서 정의한 index값을 기준으로 한다.



그럼 두번째 순열 함수 perm2을 위 데이터에 적용하면


perm2는 5,4,3,2,1이라는 순열이다. 따라서 데이터를 역순으로 읽으면 된다.


C1의 경우 

perm2에 의해 재 나열하면

0 c b 0 a가 된다.

0이 아닌 값은 두번째 c가 되고 c는 원래는 4번째 index에 있었다.


C2의 경우 

perm2에 의해 재 나열하면

e 0 0 d 0이 된다.

0이 아닌 값은 e이고 e는 원래 5번째 index에 있었다.


C3의 경우

perm3의 의해 재 나열하면

0 h 0 g h가 된다.

0이 아닌 값은 h가 되고 h는 원래 4번째 index에 있었다.



세번째 순열 함수 perm3으로 해보면


perm3은 34512이고

이 순열로 다시 재나열을 하면


C1 = b c 0 a 0

C2 = 0 0 e 0 d

C3 = 0 h 0 f g

가 된다.

여기서 0이 아닌 값을 찾으면

c1 = b

c2 = e

c3 = h 이고

b는 원본배열에서는 3번째

e는 원본배열에서는 5번째

h는 원본배열에서는 4번째


          S1 S2 S3 

perm1 = 1  2  1

perm2 = 4  5  4

perm3 = 3  5  4 

가 된다.


이것을 가지고 유사도를 계산하면

계산에 앞서

원본 값을 가지고 유사도를 계산하면

C1:C2 = 0.00

C1:C3 = 0.50

C2:C3 = 0.25이다.


그럼 signature로 추출된 값을 가지고 계산하면

S1:S2 = 0

S1:S3 = 0.67(2/3)

S2:S3 = 0



'언어처리' 카테고리의 다른 글

clustering site ( document clustering )  (0) 2009.05.22
한국어 '어미' 종류  (0) 2009.03.04
auto tagging  (0) 2008.10.29
Yi Syllables - 0xa0c2  (0) 2008.10.07
Expectation Maximization  (0) 2008.09.05