PageRank của Google
Trong những năm qua, Google đã trở thành công cụ tìm kiếm được sử dụng nhiều nhất trên toàn thế giới. Để trở thành điều đó, ngoài hiệu suất tìm kiếm cao và dễ sử dụng thì chất lượng kết quả tìm kiếm của Google cũng cao hơn so với các công cụ tìm kiếm khác. Chất lượng kết quả tìm kiếm này dựa trên ...
Trong những năm qua, Google đã trở thành công cụ tìm kiếm được sử dụng nhiều nhất trên toàn thế giới. Để trở thành điều đó, ngoài hiệu suất tìm kiếm cao và dễ sử dụng thì chất lượng kết quả tìm kiếm của Google cũng cao hơn so với các công cụ tìm kiếm khác. Chất lượng kết quả tìm kiếm này dựa trên PageRank, một phương pháp hữu hiệu để xếp hạng các trang web. Mục đích của bài viets này là cung cấp cho các bạn cách làm việc cũng như thuật toán được sử dụng trong PageRank. Trong nhiều năm qua, mặc dù thuật toán trong này được Google cải tiến nhiều lần để chất lượng tốt hơn, nhưng về bản chất thì cách hoạt động của PageRank là hầu như vẫn không thay đổi.
Khái niệm PageRank
Kể từ khi xuất hiện mạng internet, đã có rất nhiều cách lưu trữ và tổ chức các trang web nhằm mục đích dễ dàng cho việc tìm kiếm. Quay về lịch sử 1 chút thì ta có thể thấy yahoo lưu trữ các trang web trong các thư mục. Người ta gọi cách tổ chức này là web directories. Có một số thư mục như education, art, health,... Người dùng muốn tìm kiếm các trang web thì có thể vào các thư mục đó để tìm kiếm.
Ngày nay, người ta tổ chức, lưu trữ các trang web theo kiểu Web Search và tìm kiếm các trang web theo các từ khóa (search phrase). Sự xuất hiện của các search phrase trong các trang web chính là một trong những yếu tố chính để xếp hạng các trang web trong các công cụ tìm kiếm.
Nhưng để cho kết quả tìm kiếm được tốt hơn và đặc biệt là loại bỏ sự xuất hiện của các trang web spam dựa trên rank của các trang web, khái niệm về link popularity ra đời. Theo khái niệm này thì số trang liên kết tới một trang web sẽ đo độ quan trọng của trang web đó. Do đó một trang web được coi là quan trọng hơn nếu có nhiều trang web liên kết tới nó.
Ví dụ
www.stanford.edu có 23,400 trang web liên kết tới
www.joe-schmoe.com có 1 trang web liên kết tới
Rõ ràng là www.stanford.edu sẽ có rank cao hơn.
Trái ngược với khái niệm link popularity, PageRank không chỉ dựa trên tổng số trang liên kết với trang web mà nó còn dựa trên rank của các trang liên kêt tới nó. Rank của các trang liên kết lại dựa trên rank của các trang khác liên kết tới nó, Do đó, PageRank của một trang web luôn được xác định đệ quy bởi PageRank của các trang web khác.
Trong ví dụ trên, ta có 11 trang web. Trang web B có nhiều trang web liên kết với nó nhất, do đó rank của trang web B đương nhiên là sẽ cao nhất. Trang web C mặc dù số trang web liên kết với nó ít hơn trang E nhưng mà nó được trang B liên kết tới, do đó nó sẽ có rank cao hơn trang E. Như vậy kết quả rank cuối cùng của một trang web dựa trên cáu trúc liên kết của toàn bộ các trang web. Cách tiếp cận này nghe mặc dù rất rộng và phức tạp, nhưng Page và Brin đã có thể đưa nó vào thực tế bằng một thuật toán tương đối tầm thường.
Thuật toán
Các trang web được biểu diễn bởi đồ thị có hướng (gọi là web graph) trong đó các đỉnh là các trang web, cạnh từ đỉnh j đến đỉnh i nếu trang web j liên kết tới trang web i.
Gọi ri r_{i} ri là rank của page j, did_{i}di là bán bậc ra của node i (tức là số cạnh đi ra từ node ). Khi đó rank của trang j được tính theo công thức:
rj=∑i→jridi(1)r_{j}=sum_{i ightarrow j} frac{r_{i}}{d_{i}} (1) rj=i→j∑diri(1)
Ví dụ chúng ta có web graph gồm 3 đỉnh a, y, m như hình vẽ
y có bán bậc ra là 2, a có bán bậc ra là 2, m có bán bậc ra là 1. a được trang y và trang m liên kết tới. Do đó:
ra=ry2+rmr_{a} = frac{r_{y}}{2}+r_{m} ra=2ry+rm
Tương tự ta có
{ry=ry2+ra2rm=ra2 left{egin{matrix} r_{y} = frac{r_{y}}{2}+frac{r_{a}}{2} r_{m} = frac{r_{a}}{2} end{matrix} ight. {ry=2ry+2rarm=2ra
Ngoài ra ta có
ra+ry+rm=1r_{a}+r_{y}+r_{m} = 1 ra+ry+rm=1
Giải hệ phương trình trên ta được
ry=25r_{y} = frac{2}{5} ry=52
ra=25r_{a} = frac{2}{5} ra=52
rm=15r_{m} = frac{1}{5} rm=51
Đó là đối với web graph chỉ có 3 đỉnh. Trong thực tế, số đỉnh của web graph không chỉ có 3 đỉnh mà số lượng đỉnh hơn gấp nhiều lần, dẫn tới số biến của hệ phương trình cũng tăng. Vậy giải hệ phương trình đấy như thế nào? Chúng ta giải quyết vấn đề này bằng cách sử dụng cách tính xấp xỉ nghiệm của hệ phương trình này sau 1 số hữu hạn vòng lặp
Để hiểu về cách tính xấp xỉ này, trước hết chúng ta phải đưa hệ phương trình (1)(1)(1) về dạng ma trận. Như chúng ta đã biết, mọi hệ phương trình đề có thể đưa về dạng Ax=BAx = BAx=B trong đó A,BA,BA,B là các ma trận hệ số. Như vậy hệ phương trình (1)(1)(1) cũng hoàn toàn có thể đưa về dạng ma trận. Gọi ma trận MMM trong đó phần tử Mji=1diM_{ji} = frac{1}{d_{i}}Mji=di1 nếu node iii liên kết tới node jjj, Mji=0M_{ji} = 0Mji=0 nếu ngược lại, vector rrr là vector cột có phần tử rir_{i}ri là rank của node iii. Khi đó hệ phương trình (1)(1)(1) có thể viết lại dưới dạng
Mr=rMr=r Mr=r
Như vậy vector rrr được gọi là vector riêng của ma trận MMM (khái niệm vecto riêng bạn đọc có thể xem tại đây Sau đó chúng ta sử dụng thuật toán tính xấp xỉ để tính giá trị các phần tử của vector rrr. Giả sử có N trang web. Ban đầu khởi tạo các giá trị ri=1Nr_{i} = frac{1}{N}ri=N1. Sau đó sử dụng vòng lặp để cập nhật giá trị các phần tử rir_{i}ri trong vector rrr. r(t)r^{(t)}r(t) là giá trị của vector rrr tại vòng lặp thứ ttt. Lặp cho đến khi l1norml_{1} norml1norm của ∣r(t+1)−r(t)∣|r^{(t+1)}-r^{(t)}|∣r(t+1)−r(t)∣ nhỏ hơn hằng số εvarepsilonε cho trước. (normnormnorm của vector các bạn có thể xem tại đây. Dưới đây là thuật toán.
Ví dụ như trong trường hợp web graph có 3 node như ở trên, thì ma trận MMM có dạng:
yamy1/21/20a1/201m01/20egin{matrix} & y & a & m y & 1/2 &1/2 & 0 a & 1/2 & 0 & 1 m & 0 & 1/2 & 0 end{matrix}yamy1/21/20a1/201/2m010
vector rrr có dạng:
ryrarmegin{matrix} r_{y} r_{a} r_m end{matrix}ryrarm
Khi đó ta có hệ phương trình
(1/21/201/20101/20)(ryrarm)=(ryrarm)egin{pmatrix} 1/2 &1/2 & 0 1/2 & 0 & 1 0 & 1/2 & 0 end{pmatrix}egin{pmatrix} r_{y} r_{a} r_m end{pmatrix} = egin{pmatrix} r_{y} r_{a} r_m end{pmatrix}⎝⎛1/21/201/201/2010⎠⎞⎝⎛ryrar