Google PageRank의 Personalization Vector

어제 구글이 개인의 선호도를 어떻게 랭킹에 반영하는지 알아냈다. 이름하여 개인화 검색의 구글버전이라고 해야하나? ㅎㅎ

위의 마지막 식에서 V^T라는 벡터가 개인화 랭킹을 위한 부분인데, Random Surfer가 주소를 직접 넣어서 페이지를 점프할때 적용이 되는 Vector이다. 이 부분을 모든 웹페이지가 동일한 확률로 점프를 한다는게 처음의 개념이다.
하지만 실제로는사람에게는 선호도라는게 있기 때문에 그렇게 하지 않는것이다. 그 벡터 자체가 선호도의 많고 적음을 포함할 수 있다는 의미이다. 그래서 논문에 나온 식이 다시한번 변형이 되는것이다.

미리 웹페이지를 분류를 시켜놓고 개인이 설정해놓은 개인화 선호도를 파악한 다음에 V^T 벡터에 식을 적용하면 된다. 물론 웹페이지를 분류하는건 여러 분류 룰을 사용하면 될것이다.

이 부분의 개념을 처음 적용한 Kaltix라는 곳이 구글에 2003년 인수되기까지 했는데. ㅎㅎ 역시나 생각을 다르게 한다는건 참으로 힘들지만 충분히 보상받을 만한 것이란 생각이 든다.

또한가지 느낀거지만 수식에 인자가 많다는건 그만큼 확장성이 크다는 반증이 되는거 같기도 하다.

전에 만들어 뒀던 Ruby 코드에 Personalization Vector을 입력하는 기능을 추가해서 여러 실험을 해봤다.

아래와 같은 링크 메트릭스를 대상으로

1,0,1
0,1,0
0,0,1

scaling Parameter : 0.85
정밀도 : 10^-10

——————————————–
1번 실험
1 선호도 : 8
2 선호도 : 4
3 선호도 : 2

Iter : 115

3번 노드
score : 0.565217390940469
2번 노드
score : 0.285714286078165
1번 노드
score : 0.149068322981366
———————————————-

2번 실험
1 선호도 : 4
2 선호도 : 2
3 선호도 : 8

Iter : 123

PageRank Result!

3번 노드
score : 0.565217390940469
2번 노드
score : 0.285714286078165
1번 노드
score : 0.149068322981366
———————————————-

3번실험
1 선호도 : 2
2 선호도 : 8
3 선호도 : 4

Iter : 125

PageRank Result!

2번 노드
score : 0.571428571070379
3번 노드
score : 0.391304348184279
1번 노드
score : 0.0372670807453416
———————————————-

4번실험
1 선호도 : 1
2 선호도 : 1
3 선호도 : 1

Iter : 27

PageRank Result!

3번 노드
score : 0.579710144904728
2번 노드
score : 0.333333333333333
1번 노드
score : 0.0869565217619392

4번의 실험에 3,2,1 순의 고유 랭킹이 변한건 3번재 실험에서였다. 2번의 선호도가 가장 높을때 가장 높은 랭킹의 3번 노드를 재치고 2번이 랭킹 1위로 올라섰다.

4개의 실험을 봤을때 Personalization Vector가 어느정도의 영향을 미치는가는 대략 짐작이 간다.
3번 실험에서 선호도가 없을때보다(4번실험)도 약 20%의 서핑시간을 더 할애를 해서 보냈다는 결과가 나온다.

또한 재미난건 Personalization Vector를 입력해서 계산을 해보면 Iteration 숫자가 급격히 증가한다는 게보인다. Vector의 맴버 각각의 서로의 값 차이가 클 경우 Iter숫자는 급격히 증가 했고, 차이가 미세할 경우 Iter는 금방 끝이 났다.

잠시 생각해 보건데 81억 페이지에 대한 분류를 해서 개인 선호도에 따른 Personalization Vector값을 조정하는 역할을 하는게 구글 툴바가 아닐까 한다.

전에 구현한 PageRank 프로그램에서 Personalization Vector 입력기능을 추가한 프로그램을 공개한다. 쩝

XFuCSEWZJc.rb

CC BY-NC 4.0 Google PageRank의 Personalization Vector by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.