디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

구글 검색 알고리즘의 원리 3

...(141.223) 2007.04.24 14:41:40
조회 730 추천 0 댓글 7


앞에서는 쇼프로와 K-1이라는, 그나마 그 성격이 확연히 다른 주제를 예로 들었는데,
만약 두 주제의 성격이 다소 비슷한 면이 있다 라고 한다면,
(예를 들면 \'리눅스\' 관련 문서들과 \'윈도우즈\' 관련 문서들)
아래 그림처럼 훨씬 더 골때리는 상황이 생길 수 있어.

(단어 2)
^
|                 o o o
|              o          o o
|           o *     x          o       x
|          o           x x            x 
|                            x   x  x 
|                               
|
-------------------------------> (단어 1)

o = 주제 1에 속하는 문서들
x = 주제 2에 속하는 문서들
* = 쿼리

사용자가 위의 별표와 같은 쿼리를 줬을 때, 올바른 결과라고 하려면
주제 1에 속하는 문서들(그 중에서도 쿼리와 가까이 있는 문서들)이 상위에 올라와야겠지.
그런데 위 그림을 보면, 주제 2에 속하는 문서들 중 몇몇 개가 주제 1의 문서들보다
쿼리에 더 가까이 있기 때문에, 걔들이 상위에 올라가게 된다는 문제가 생기지.

사실 이전 글에 나온 예의 경우, 올바른 분류에 방해가 되는 단어("최홍만")와 도움이 되는 단어("K-1")가 확실히 구분이 되었었고,
따라서 방해가 되는 단어들만 어떻게 잘 찾아낸 다음,
그 단어들의 빈도수는 무시하고 거리를 계산하면 올바른 결과를 얻을 수가 있었어.
하지만 지금 이 예제의 경우는 이런 식의 해결이 불가능하지.

그런데, 위 그림을 보다보면 한 가지 단서가 나와.
그림에서 쿼리 근처 영역만 잘라놓고 보자.

|                 o ←A
|       D→  o
|     C→ o *     x ←B  
|          o 
|                          

일단 그림에서 보듯이 A와 쿼리 사이의 직선 거리는 B와 쿼리 사이의 직선 거리보다 멀지.
그렇지만.. 직선 거리만 보면 그렇지만...
쿼리와 C, 쿼리와 D, C와 D, D와 A의 거리들은
쿼리와 B의 거리보다 가깝지.

이런 점에 착안을 해서 나온 아이디어가 Markov random walk 이라는 건데,
쿼리의 위치에서 시작을 해서 A 또는 B에 도착하게 될 때까지
매 턴마다 랜덤하게 임의의 포인트로 이동을 하는 거야.
단, 각 포인트로 이동하게 될 확률은, 현재 포인트와의 거리가 가까울 수록 큰 것이 핵심.

즉, 현재 위치가 쿼리라면, 다음 턴에 방문하게 될 포인트로는
C가 가장 확률이 높고 그 다음이 D, B, A 순이 되는 거지.
현재 위치가 D라면, 다음에 방문할 포인트로는 A/C/쿼리가 각각 비슷한 확률을 갖고 B는 그보다 좀 작겠지.

그림을 보면, 쿼리에서 시작해서 A까지 갈 수 있는 유망한(= 비교적 높은 확률을 가지는) path들이 몇 개 있지?
쿼리->C->D->A, (확률값은 P(쿼리->C)*P(C->D)*P(D->A))
쿼리->D->A, (확률값은 P(쿼리->D)*P(D->A))
그밖에 되돌아왔다 다시 방문하는 경우들.. (쿼리->C->쿼리->D->A 등등)

결국 쿼리에서 시작해서 이리 저리 포인트를 거쳐 최종적으로 A에 도착할 확률은,
위의 path들 각각의 확률을 모두 더한 것이 될 거야.

반면, 쿼리에서 시작해서 B로 갈 수 있는 유망한 path는 쿼리->B 하나 뿐이지.
쿼리를 제외한 나머지 포인트들과는 거리가 너무 멀어서,
다음 턴에 방문하게 될 확률이 낮으니까.
-> 잘 납득이 안 간다면 곱하기의 성질을 생각해봐.
n개의 값들을 곱한다고 했을 때, 이 중 단 한 개의 값이라도 작으면(예를 들면 0.01)
그 곱셈의 결과는 작아지지.
(반면 덧셈은, n개의 값을 더할 때 이 중 몇 개의 값이 작더라도 결과에 무진장 큰 영향은 안미치고.)
가령 쿼리->C->B 라는 path를 생각해 보면,
이 path를 타고 B까지 갈 확률은 P(쿼리->C)*P(C->B) 가 되겠지.
그런데 이때 P(C->B)가 너무 작기 때문에 이 path 전체의 확률까지 같이 작아져 버리는 거야.
쿼리->A->B, 쿼리->D->B 등등 모두 마찬가지지. 쿼리->B로 직접 가는 경우를 빼고...

즉... 이제 우리는 두 문서간의 유사성을 판단할 때 그들 사이의 직선 거리를 생각하는 대신,
"이 문서에서 Markov random walk을 했을 때 저 문서에 도착할 확률"을 생각하면 되는 거야.

여기서 이런 의문을 가지는 횽아들이 있을 거야.
"A에서 B로 가는 path만 센다고 하더라도 A->B, A->C->B, A->D->B, A->D->C->D->A->B 등등등
무수히 많은 path들이 존재하는데 얘네들 각각의 확률을 어떻게 일일히 다 구해서 더해주나?"

이에 대한 답을 겸해서, 알고리즘을 써 볼께.

1. 우선 각 문서들 사이의 거리를 가지고 기본 확률을 구해야겠지.
즉, d(A,B)가 있을 때 P(A->B)를 정하는데,
이건 보통, 초월함수 e를 이용해서 변환을 해.
P(A->B) = exp(-d(A,B)) / {모든 point들에 대해 exp(-d(A,x))의 합}
(모든 point들에 대한 합으로 나눠주는 이유는,
 A에서 임의의 포인트로 움직일 확률의 전체 합이 1이 되어야 하니까.)

2. n개의 문서가 있다고 하면, 얘들에게 임의의 순서로 차례(index)를 부여 해. 1, 2, ..., n 까지.
그런 다음, K라는 행렬을 정의하는데
K의 i번째 행, j번째 열에 들어갈 원소의 값을 앞에서 구한 P(i번째 포인트 -> j번째 포인트) 로 설정해.

3(핵심). I를 단위행렬(대각선 원소만 1이고 나머지는 다 0인 행렬)이라고 했을 때, 마지막으로
Q = inverse(I - 0.9*K)    (0.9는 예를 들면 그렇다는 거고, 0 초과 1 미만의 값이면 됨)
이렇게 계산을 하면, Q의 i번째 행, j번째 열의 원소값은
i번째 포인트에서 Markov random walk을 해서 j번째 포인트로 도착할 확률,
즉 우리가 구하고자 하는 유사성, 그 값이 나오게 돼.

Q가 왜 이런 값이 나오는지는 위의 역행렬 공식을 테일러 전개해 보면 알 수 있어.
inverse(I - 0.9*K) = I + 0.9*K + 0.9^2*K^2 + 0.9^3*K^3 + ....
이렇게 되거든.

이때 K^n의 i번째 행, j번째 열의 원소값은
i번째 포인트에서 Markov random walk을 했을 때 "정확히 n턴 이후에" j번째 point에 도착할 확률을 나타내.
(I는 K의 0제곱, 즉, 시작 지점에서 아직 전혀 이동을 안한 상태를 의미)
따라서 위 식을 말로 풀어 쓰면
Q = "0턴 이후에 도착할 확률 + 1턴 이후에 도착할 확률 + 2턴 이후에 도착할 확률 + ...."
이렇게 되는 거지.
따라서 모든 가능한 path들의 확률을 빠짐없이 다 더해주는 효과가 있지.
각각의 path를 일일히 세지 않아도 말이지...

요기까지가 본론이야.
이 알고리즘의 장점은, 검색할 데이터의 종류가 특정 응용 분야에 한정되어 있지 않다는 점이지.
문서, 그림, 비디오 등등, 벡터화 할 수 있는 모든 종류의 데이터들의 검색에 모두 쓰일 수 있고,
심지어 벡터화 할 수 없는 데이터라 하더라도(그런게 있나 모르겠지만;;)
임의의 두 아이템의 직선 거리(또는 유사성)만 정의할 수 있으면 이 알고리즘을 쓸 수 있어.

구글의 PageRank 알고리즘은 이 아이디어를 "웹 검색" 이라는 분야에 적용을 한 케이스인거지.
이에 대한 얘기는 다음 글에 쓸께. 이제 정말 마지막이야;

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 연인과 헤어지고 뒤끝 작렬할 것 같은 스타는? 운영자 24/04/22 - -
공지 프로그래밍 갤러리 이용 안내 [68] 운영자 20.09.28 34144 62
2685676 회사생활 좋은점도 있긴함;; ㅇㅇ(223.38) 02:21 0 0
2685675 보닌 스펙 프갤러(118.235) 02:13 9 0
2685674 내가 밑에서 회사다니는거 힘든 이유 적어봄 ㅇㅇ(223.38) 02:04 15 0
2685673 너네 대체 지루한 코딩테스트 준비해서 왜 ㅇㅇ(223.38) 01:59 19 0
2685672 코테 대리 알바도 잏냐 [2] ㅇㅇ(223.38) 01:52 21 0
2685670 <씨받이>의 엔딩을 기억하시나요? 발명도둑잡기갤로그로 이동합니다. 01:22 15 0
2685669 나님 질문 받는다 [1] 진척갤로그로 이동합니다. 01:13 22 0
2685668 팀원을 위해서 HACK 주석을 적극 활용해라 [5] 진척갤로그로 이동합니다. 01:13 41 0
2685667 아래 글 보니 생각나는 아까 한 말 발명도둑잡기갤로그로 이동합니다. 01:05 16 0
2685666 정처기 필기 어떻게 준비합니까 [21] ㅇㅇ(223.39) 01:02 69 0
2685665 신입인데 회사 잘간듯 [1] ㅇㅇ(175.211) 00:58 41 0
2685664 자소서에 연봉 상승이야기적는거 어떰? [1] 프갤러(61.98) 00:48 22 0
2685663 맨발걷기 하는중임 ㅇㅅㅇ 초코냥갤로그로 이동합니다. 00:44 23 0
2685662 흙수저로 살아도 마음은 부자로 살아야 [2] 프갤러(118.235) 00:39 24 0
2685661 모르는 사람 없어야 하는 정보들 [1] ㅇㅇ(118.235) 00:38 42 0
2685659 동·서남아 기록적 폭염에 인명 피해 속출…전력난 비상도 발명도둑잡기갤로그로 이동합니다. 00:35 6 0
2685658 찾아보니까 이력서 ==경력기술서라는데 프갤러(61.98) 00:33 30 0
2685657 요즘 상승 이직 난이도 어떰? ㅇㅇ(117.111) 00:26 21 0
2685656 경력 기술서랑 이력서랑 같이내라는데 [4] 프갤러(61.98) 00:21 41 0
2685655 입사 코테때 챗지피티 써도 되냐 [1] 프갤러(1.237) 00:11 47 0
2685654 [한국정보기술연구원] 정보보안 시스템 구축을 통한 보안 엔지니어 양성과정 allforyoung(123.214) 00:10 20 0
2685653 나 30에 취업했음 [4] ㅇㅇ(39.117) 00:06 93 0
2685652 프갤 망함? [1] ㅈㄹㄷ(101.235) 00:01 34 0
2685651 코테 고수들있음? [6] 프갤러(223.38) 04.25 53 0
2685650 계열사 재직중에 본사 지원 하면 당연 안되겠지? ㅇㅇ(175.197) 04.25 21 0
2685649 프갤가수 ㅡ Starry Night 코딩낭인(58.236) 04.25 15 1
2685647 웹 디자인 탬플릿 어디서 구하나요? ㅇㅇ(182.230) 04.25 15 0
2685645 프갤가수 ㅡ 어디에도 코딩낭인(58.236) 04.25 18 1
2685644 오히려 지금 시작하거나 취준생 애들이 좋은거임 [1] ㅇㅇ(175.197) 04.25 44 0
2685643 계속 다녀야하는거 맞냐 [1] ㅇㅇ(220.92) 04.25 43 0
2685642 디시를 할바에 차라리 레딧을 하는게 더 도움이 될거같다 [3] 프갤러(14.39) 04.25 36 0
2685641 프갤가수 ㅡ 고 해 [1] 코딩낭인(58.236) 04.25 18 0
2685640 30대 후반 수급자인생살아왔는데 개발자 현실적으로 가능하냐.. [2] 프갤러(119.201) 04.25 51 0
2685639 음악 예술계가 코로나19 이후로 전반적으로 화가 많이 나있는 상태입니다 발명도둑잡기갤로그로 이동합니다. 04.25 18 0
2685638 프갤가수 ㅡ 나와 같다면 코딩낭인(58.236) 04.25 20 0
2685637 요즘 주술정치 주술경영이 유행이던데 헬마스터갤로그로 이동합니다. 04.25 14 0
2685636 진보당은 국회에서 기자회견 한다고 해도 기자들이 잘 안와주심 발명도둑잡기갤로그로 이동합니다. 04.25 11 0
2685635 나도 명문대에 대기업개발자였다면 [7] 멍청한유라ㅋ갤로그로 이동합니다. 04.25 82 0
2685634 프갤가수 ㅡ 러시안룰렛 [1] 코딩낭인(58.236) 04.25 20 0
2685633 프갤가수 ㅡ 어쩌면 [1] 코딩낭인(58.236) 04.25 18 0
2685632 힙스터 언어들도 3년차 미만 지원자는 넘쳐나냐 [4] ㅇㅇ(223.38) 04.25 39 0
2685631 1년 내로 도트게임 만들어야 하는데 [4] ㅇㅇ(14.49) 04.25 34 0
2685630 나님 알리에서 두개샀다 [3] 멍청한유라ㅋ갤로그로 이동합니다. 04.25 46 0
2685629 잔다 ♥뀨티하니냥덩♥갤로그로 이동합니다. 04.25 16 0
2685628 “윤석열·기시다 노벨평화상 감”…대통령실, 언론에 커트 캠벨 발언 공지 [4] 발명도둑잡기갤로그로 이동합니다. 04.25 19 0
2685627 경력자도 취업안되는데 국비 신입은 오죽할까. [2] 프갤러(59.16) 04.25 70 1
2685625 5명 살리고 떠난 학폭 생존자…사회복지사, 당신의 꿈을 기억합니다 발명도둑잡기갤로그로 이동합니다. 04.25 15 0
2685623 기력 딸린다 ㅇㅅㅇ 포항의봄갤로그로 이동합니다. 04.25 13 0
2685621 역시 보지년은 이기적 해줘해줘 감정에 휘둘리는 멍청한 동물이라 안됨 ♥뀨티하니냥덩♥갤로그로 이동합니다. 04.25 34 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2