viernes, 18 de enero de 2013

¿Cómo funciona Google?

En esta entrada voy a explicar como funciona PageRank, el algoritmo que puso a Google en cabeza de los buscadores de Internet.

Lo primero que debemos de saber es que lo que diferencia Google de otros buscadores no es la cantidad de páginas que indexa (aunque es posible que también sea el mejor en eso), ni en cómo encuentra páginas que contienen los términos de búsqueda. Esas cosas se sabían hacer antes de que Google apareciera.

La diferencia clave reside en cómo ordena los resultados. Más concretamente, Google ordena todas las páginas por importancia cada cierto tiempo y cada vez que realizamos una búsqueda, los resultados aparecen siguiendo ese mismo orden.

De hecho esto último probablemente no es del todo cierto. Google ha ido haciendo cambios y mejoras al algoritmo base, y es posible que al final los resultados incluyan variaciones respecto al orden general, quizás dando mayor relevancia a noticias recientes, resultados con imágenes, vídeos o cosas por el estilo.

Tampoco voy a entrar en cómo se las arregla para trabajar con páginas dinámicas y otras muchas cosas, ya que lo desconozco. En lo que sigue voy a suponer que Internet es como era en el 1992, cuando el porno consistía en páginas escaneadas de revistas.

En esta entrada me voy a centrar en el algoritmo básico y en como usa los autovectores de una matriz para realizar la ordenación (esto es también un aviso para los que no sepan lo que es un autovector).

3º premio en el certamen de chistes visuales de Cuenca.
La idea básica del método consiste en pensar lo siguiente: supongamos que en cierto momento hay varias personas viendo cada página de Internet. En ese instante y cada segundo, cada persona hace clic en un enlace al azar. Al cabo de cierto tiempo habrá ciertas páginas que tengan más personas que otras. La idea de PageRank es que las páginas en las que haya más personas son más interesantes y deben colocarse primero en la lista.

Veamos cómo es el algoritmo:

El primer paso es construir una lista ordenada de ellas, de forma que a cada página le asignamos un número natural.

El siguiente paso consiste en construir una matrix C de "clics". Esta matriz simula el proceso de que una persona en cierta página haga un clic al azar en un enlace.


Para ello supongamos que tenemos a una persona en la página web de índice uno. Esa página contiene sólo dos enlaces, uno a la página web de índice 45 y otro a la de índice 371.

Lo más sencillo es suponer que la persona tiene una probabilidad de 0.5 de ir a cada enlace. En lo que sigue voy a suponer que todos los enlaces son igualmente probables, aunque este es un punto claramente mejorable y estoy seguro de que Google lo ha hecho.

Para modelar una persona en la página 1 vamos a utilizar un vector de dimensión N, donde N es el número total de páginas indexadas. En este caso el vector b tiene la forma:

\begin{aligned}  \left( \begin{array}{ccc} 1 \\  0 \\  0 \\  \vdots \\ 0 \\


\end{array} \right) \end{aligned}

Donde el 1 en la primera entrada significa que hay una persona en la página uno.

Ahora queremos construir una matriz que represente el hecho de que, hay una probabilidad de 0.5 de que esa persona acabe en la página 45 y la misma de que acabe en la página 371. En realidad, esto sólo define la primera columna de la matriz, que será:

\begin{aligned} \left( \begin{array}{ccc} 0 \\ \vdots \\ 0 \\ 0.5 \\ 0 \\ \vdots \\ 0 \\ 0.5 \\ 0 \\ \vdots \\ 0 \end{array} \right) \end{aligned}

Donde los 0.5 están colocados en las filas 45 y 371.

Si suponemos por un momento que el resto de columnas de C están formadas por ceros, el resultado de multiplicar C por el vector anterior es igual a la columna anterior, es decir, tras el primer paso, la mitad de la personas que estaban en la página 1 estarán ahora en la página 45 y la otra mitad en la página 371.

Supongamos que hacemos lo mismo para el resto de páginas, rellenando el resto de columnas de C (en el caso de páginas sin enlaces supondremos que saltamos a una página cualquiera al azar).

El resultado de multiplicar esta nueva C por el vector b será el mismo, ya que el resto de columnas están multiplicadas por los ceros de b.

Pero si b tuviese otros elementos distintos de cero, veríamos cómo a la página 45 (por poner un ejemplo) podría venir gente desde la página uno, pero también desde distintas páginas.

Si pensamos que el vector b contiene la probabilidad de que una persona esté en cualquiera de las páginas, el vector resultado del producto Cb contendrá las probabilidades después de que pulsen al azar cualquiera de los enlaces en sus respectivas páginas.

Cláramente, el vector CCb contendrá las probabilidades tras dos clics y, en general, \(C^nb\) las probabilidades tras n clics.

Nosotros (o mejor dicho, Google) estamos interesados en saber el comportamiento tras muchos clics, es decir, estamos suponiendo que con el tiempo la situación se estabiliza y las probabilidades tras un clic no cambian, es decir:

\begin{aligned} C^{n+1}b = C^nb, ~~~~n \rightarrow \infty \end{aligned}

O:
\begin{aligned} Cb' = b' ,~~~~ b' = \lim_{~n \rightarrow \infty} C^nb  \end{aligned}

Dicho de otra forma, buscamos el autovector b' que corresponde al autovalor 1 de la matriz C. Ese autovector contiene las probabilidades de que haya una persona en cada una de las páginas indexadas. El paso final consiste en ordenar las páginas según esa probabilidad (que no es otra cosa que su PageRank).

No voy a entrar en los algoritmos que existen para encontrar autovalores de matrices. Hay varios, pero seguro que Google tiene sus métodos propios. En cualquier caso, seguro que les lleva días llegar a una solución aproximada.



2 comentarios:

  1. ¿que posibilidad entonces existe para un personaje comun y corriente poder tener una web que pueda estar en los primeros resultados de busqueda de su especie o tema? ¿cual serìa la mejor recomendacion para asignarle valoracion sin tantos miles de clicks a su web?

    ResponderEliminar
  2. Pues lo dicho, tienes que tener webs importantes que enlacen a la tuya. Evidentemente estamos hablando de una perversión del sistema y ten por seguro que Google se sabe la mayoría de los trucos.

    Hay por ahí empresas que venden alto "posicionamiento" en los buscadores; pero no sé hasta qué punto son efectivas.

    ResponderEliminar