Page Rank

1. Matrix Formulation

A~=D1A\tilde{A}=D^{-1}A

  • AA: adjacency matrix

  • DD: outdegree matrix(diagonal)

  • D1D^{-1}: 1outdegree\frac{1}{outdegree} matrix(diagonal)

example

  1. calculate matrix

    • A=[110101010],D=[200020001],D1=[0.50000.50001]A = \begin{bmatrix} 1 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{bmatrix}, D = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{bmatrix}, D^{-1} = \begin{bmatrix} 0.5 & 0 & 0 \\ 0 & 0.5 & 0 \\ 0 & 0 & 1 \end{bmatrix}

    • A~=[0.50000.50001]@[110101010]=[0.50.500.500.5010]\tilde{A} = \begin{bmatrix} 0.5 & 0 & 0 \\ 0 & 0.5 & 0 \\ 0 & 0 & 1 \end{bmatrix} @ \begin{bmatrix} 1 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{bmatrix} = \begin{bmatrix} 0.5 & 0.5 & 0 \\ 0.5 & 0 & 0.5 \\ 0 & 1 & 0 \end{bmatrix}

    • A~T=[0.50.500.50100.50]\tilde{A}^T = \begin{bmatrix} 0.5 & 0.5 & 0 \\ 0.5 & 0 & 1 \\ 0 & 0.5 & 0 \end{bmatrix}

  2. power iteration

    1. init r(0)=[131313]r^{(0)} = \begin{bmatrix} \frac{1}{3} \\ \frac{1}{3} \\ \frac{1}{3} \end{bmatrix}

    2. r(1)=A~Tr(0)=[0.50.500.50100.50]@[131313]=[131216]r^{(1)}=\tilde{A}^Tr^{(0)} = \begin{bmatrix} 0.5 & 0.5 & 0 \\ 0.5 & 0 & 1 \\ 0 & 0.5 & 0 \end{bmatrix} @ \begin{bmatrix} \frac{1}{3} \\ \frac{1}{3} \\ \frac{1}{3} \end{bmatrix} = \begin{bmatrix} \frac{1}{3} \\ \frac{1}{2} \\ \frac{1}{6} \end{bmatrix}

    3. 수렴할때까지 반복

    4. r=[252515]r=\begin{bmatrix} \frac{2}{5} \\ \frac{2}{5} \\ \frac{1}{5} \end{bmatrix}

2. Random Walk Interpretation

  • 어떤 노드에서 다른 노드로 이동할때 random하게 이동하는 것

  • time tt에 node ii로 도착할 확률을 Pi(t)P^{(t)}_i로 나타내며 값이 클수록 자주 방문된 노드임을 의미

  • p(t+1)=A~p(t)p^{(t+1)}=\tilde{A}p^{(t)}로 표현 가능, tt \rightarrow \infty이면 p(t+1)p(t)p^{(t+1)} \approx p^{(t)}해져서 p=A~pp=\tilde{A}p 즉, r=A~rr=\tilde{A}r과 유사해짐

conditions

t=0t=0 시점의 초기 확률 분포가 무엇이든지:

  • random node에서 다른 어느 node로 이동 가능해야함

  • 이동하는 패턴이 주기적으로 반복되면 안됨

  • stationary distribution이 고유해야함(p(t)p(t+1)pp^{(t)} \approx p^{(t+1)} \approx p)

3. Google Formulation

  • 기존 방식은 데이터에서 deadend(이동할 노드가 없는 경우 → column stochastic하지 않음)나 spider trap(갇히게 됨)이 발생하면 rank 계산에 있어 문제가 발생함

  • solution:

    • deadend: 1n\frac{1}{n} 로 값을 초기화해 해결함

    • spider trap: teleport를 이용해 random node로 jump하여 벗어남

r=Grr=Gr

  • G=βB~T+(1β)[1n]n×nG=\beta\tilde{B}^T+(1-\beta)[\frac{1}{n}]_{n\times n}

    • B~T\tilde{B}^T: A~T\tilde{A}^T에서 column-stochastic(열의 합=1)하지 않은 열에 대해 각 값을 1n\frac{1}{n} 으로 초기화

    • β[0.8,0.9],default=0.85\beta \in [0.8, 0.9], default=0.85

  • rj=βiNjridi+(1β)1nr_j=\beta\sum_{i\in N_j}\frac{r_i}{d_i}+(1-\beta)\frac{1}{n}

    • random walk: βiNjridi\beta\sum_{i\in N_j}\frac{r_i}{d_i}

    • teleport: (1β)1n(1-\beta)\frac{1}{n}

4. Top Specific Page Rank

  • teleport로 random work할때 query의 topic과 관련된 page들의 집합 SS안에서만 골라 이동

rs=βB~Trs+(1β)qsr_s=\beta\tilde{B}^Tr_s+(1-\beta)q_s

  • random walk: βB~Trs\beta\tilde{B}^Tr_s

  • topic specific teleport: (1β)qs(1-\beta)q_s

  • qsq_s: SS안에 있는 요소인 경우 1S\frac{1}{|S|}, 그외는 00

example

S={1,2},β=0.8S=\{1,2\}, \beta=0.8

  1. calculate matrix

    • A=[0110100000010010],D=[2000010000100001],D1=[0.5000010000100001]A = \begin{bmatrix} 0 & 1 & 1 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix}, D = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, D^{-1} = \begin{bmatrix} 0.5 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

    • A~=[0.5000010000100001]@[0110100000010010]=[00.50.50100000010010]\tilde{A}=\begin{bmatrix} 0.5 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} @ \begin{bmatrix} 0 & 1 & 1 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 0.5 & 0.5 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix}

    • A~T=[01000.50000.50010010]=column stochastic=B~T\tilde{A}^T=\begin{bmatrix} 0 & 1 & 0 & 0 \\ 0.5 & 0 & 0 & 0 \\ 0.5 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix} = \text{column stochastic} = \tilde{B}^T

    • qs=[0.50.500]q_s=\begin{bmatrix} 0.5 \\ 0.5 \\ 0 \\ 0 \end{bmatrix}

  2. power iteration

    1. init rs(0)=[0.250.250.250.25]r^{(0)}_s = \begin{bmatrix} 0.25 \\ 0.25 \\ 0.25 \\ 0.25 \end{bmatrix}

    2. rs(1)=0.8×[01000.50000.50010010]@[0.250.250.250.25]+0.2×[0.50.500]=[0.30.20.30.2]r^{(1)}_s = 0.8 \times \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0.5 & 0 & 0 & 0 \\ 0.5 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix} @ \begin{bmatrix} 0.25 \\ 0.25 \\ 0.25 \\ 0.25 \end{bmatrix}+0.2 \times \begin{bmatrix} 0.5 \\ 0.5 \\ 0 \\ 0 \end{bmatrix}=\begin{bmatrix} 0.3 \\ 0.2 \\ 0.3 \\ 0.2 \end{bmatrix}

    3. 수렴할때까지 반복

    4. r=[0.260.200.290.23]r=\begin{bmatrix} 0.26 & 0.20 & 0.29 & 0.23 \end{bmatrix}

Algorithm

지금까지의 Page Rank 방식에서 발생하는 GG가 fully dense한 문제점에 대해 아래 2가지 해결책을 제시

1. Sparse Matrix Formulation

  • D~T\tilde{D}^T: deadend를 해결하기 위해 1n\frac{1}{n} 로 값을 설정한 부분을 따로 정의

  • B~T=A~T+D~T\tilde{B}^T = \tilde{A}^T + \tilde{D}^T

    • A~T=[0.50.500.50000.50]\tilde{A}^T = \begin{bmatrix} 0.5 & 0.5 & 0 \\ 0.5 & 0 & 0 \\ 0 & 0.5 & 0 \end{bmatrix}

    • D~T=[001300130013]\tilde{D}^T = \begin{bmatrix} 0 & 0 & \frac{1}{3} \\ 0 & 0 & \frac{1}{3} \\ 0 & 0 & \frac{1}{3} \end{bmatrix}

  • G=βB~T+(1β)[1n]nxnβA~T+βD~T+(1β)[1n]nxnG=\beta\tilde{B}^T+(1-\beta)[\frac{1}{n}]_{nxn} \rightarrow \beta\tilde{A}^T+\beta\tilde{D}^T+(1-\beta)[\frac{1}{n}]_{nxn}

  • 하지만 여전히 A~T\tilde{A}^T는 sparse함(real world에서 90~99% sparse) → CSR(Compressed Sparse Row)와 같은 sparse matrix format을 사용

  • 또 deadend가 많이 발생하면 D~T\tilde{D}^T도 sparse함 → injection leaked score를 사용

    • r(t+1)=βA~Tr(t)+(1S)[1n]n×1r^{(t+1)}=\beta\tilde{A}^Tr^{(t)}+(1-S)[\frac{1}{n}]_{n\times 1}

    • S=sum(βA~Tr(t))S=sum(\beta\tilde{A}^Tr^{(t)}), 1S1-S: leaked score의 총합

2. Block Based Update Algorithm

graph(data)에 edge가 너무 많아서 memory에 올라가지 못하는 경우 adjacency matrix인 A~\tilde{A}를 source node, degree, destination nodes를 포함한 list로 표현

source node
degree
destination nodes

0

4

0, 1, 3, 5

1

2

0, 5

2

2

3, 4

o Basic

하나의 source node씩 읽으면서 PageRank 값을 업데이트

  1. 디스크에서 roldr^{old} (이전 PageRank 값)과 A~\tilde{A} (인접 행렬)를 읽음

  2. 새로운 PageRank 값 rnewr^{new}를 계산하여 디스크에 저장

cost=2r+A~cost=2|r|+|\tilde{A}|

o Block Based

rnewr^{new}KK개의 블록으로 나누고 각 블록을 읽으면서 수행

  1. roldr^{old}A~\tilde{A}KK번 스캔

  2. 각 블록을 디스크에 저장하여 새로운 PageRank 값 rnewr^{new}를 계산

cost=K(A~+r)+rcost=K(|\tilde{A}|+|r|)+|r|

o Block Stripe Based

A~\tilde{A}를 stripe 단위로 나누고, 각 stripe는 rnewr^{new}의 블록에 대응되는 destination node만 포함해 수행, 한 번 읽은 파일을 다시 읽지 않아도 됨

  1. rnewr^{new}의 각 블록을 디스크에 저장하고, roldr^{old}KK번 스캔

  2. A~\tilde{A}의 stripe를 읽어 rnewr^{new}를 업데이트, stripe의 크기는 (1+ϵ)A~(1+\epsilon)|\tilde{A}|이며, ϵ\epsilonKK보다 작은 값

cost=(1+ϵ)A~+(1+K)rcost=(1+\epsilon)|\tilde{A}|+(1+K)|r|

Last updated