ordenamiento de páginas web con hipergrafos

95
INSTITUTO POLIT ´ ECNICO NACIONAL CENTRO DE INVESTIGACI ´ ON EN COMPUTACI ´ ON T E S I S: Ordenamiento de p´ aginas web con hipergrafos PARA OBTENER EL GRADO DE: Maestr´ ıa en Ciencias de la Computaci´on PRESENTA: Lic. Francisco Carlos Lara Moreno DIRECTORES DE TESIS: Dr. Ricardo Barr´ on Fern´ andez Dr. Salvador Godoy Calder´on Ciudad de M´ exico Enero 2017

Upload: others

Post on 04-Jul-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ordenamiento de Páginas Web con Hipergrafos

INSTITUTO POLITECNICO NACIONAL

CENTRO DE INVESTIGACION EN COMPUTACION

T E S I S:

Ordenamiento de paginas web conhipergrafos

PARA OBTENER EL GRADO DE:

Maestrıa en Ciencias de la Computacion

PRESENTA:

Lic. Francisco Carlos Lara Moreno

DIRECTORES DE TESIS:

Dr. Ricardo Barron Fernandez

Dr. Salvador Godoy Calderon

Ciudad de Mexico Enero 2017

Page 2: Ordenamiento de Páginas Web con Hipergrafos
Page 3: Ordenamiento de Páginas Web con Hipergrafos
Page 4: Ordenamiento de Páginas Web con Hipergrafos

IV

ResumenSe investigaron métodos para ordenar páginas web representadas en hipergrafos

mediante la implementación del algoritmo de caminata al azar. En particular, se hizo lacomparación del desempeño del algoritmo en hipergrafos (PageRank sobre hipergra-fos) contra su representación alterna (PageRank sobre grafos) y también contra otrosalgoritmos sobre grafos. Para cada algoritmo, se obtuvo un ordenamiento de las ca-lificaciones (“rankings”) para cada nodo del grafo y se compararon entre sí y contraresultados obtenidos previamente en la literatura.

Se utilizaron métodos de agrupamientos de grafos para construir grupos que, a suvez, permitieron construir los hipergrafos, ya que es importante que la caminata alazar se realice en grupos que estén relacionados entre sí. La implementación de losmétodos de agrupamiento representa una aportación importante a la forma de realizarla caminata aleatoria en hipergrafos.

Se aplicó el formalismo matemático de matrices para implementar el algoritmo decaminata aleatoria y mediante el método de potencias se obtuvo el vector propio do-minante de las matrices involucradas (matriz de transición del hipergrafo). Con estevector, se obtuvieron el ordenamiento de calificaciones y se comparó con los obtenidosde otros algoritmos.

Se hicieron comparaciones con el “golden standard” implementado en el proyec-to LETOR, basado en información de proyectos para la evaluación de algoritmos debúsqueda en el área de recuperación de la información (proyecto TREC) y con trabajosprevios, obteniéndose, en algunos casos, un desempeño superior.

Page 5: Ordenamiento de Páginas Web con Hipergrafos

V

AbstractWe investigated methods for ordering web pages represented in hypergraphs by imple-menting the random walk algorithm. In particular, the performance of the hypergraphalgorithm (PageRank on hypergraphs) was compared to its alternate representation(PageRank on graphs) and also against other algorithms on graphs. For each algorithm,rankings were obtained (rankings) for each node of the graph and were compared toeach other and against results previously obtained in the literature.

Methods of graph groupings were used to construct groups that, in turn, allowedthe hypergraphs to be constructed, since it is important that the random walk is carriedout in groups that are related to each other. The implementation of clustering methodsrepresents an important contribution to the way of performing the random walk inhypergraphs.

Mathematical formalism of matrices was implemented to implement the randomwalk algorithm, which was implemented by means of the power method to obtainthe eigenvectors of the involved matrices hypergraph transition matrix and obtain thegrading systems.

Comparisons were made with the golden standard implemented in the LETOR pro-ject, which is based on project information for the evaluation of search algorithms inthe area of information retrieval (TREC project) and with previous works, obtaining insome cases, a superior performance.

Page 6: Ordenamiento de Páginas Web con Hipergrafos

VI

AgradecimientosA mi familia, mis tutores, maestros, amigos, al Centro de Investigación en Compu-

tación, al Instituto Politécnico Nacional, al CONACyT, y a todos los que hicieron posi-ble esta tesis.

Page 7: Ordenamiento de Páginas Web con Hipergrafos

VII

Índice general

Resumen IV

Agradecimientos VI

1. Introducción 11.1. Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3. Hipótesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.4. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.4.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.4.2. Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.5. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.6. Medios utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.7. Aportaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2. Estado del Arte 52.1. Uso de hipergrafos para la representación de información . . . . . . . . . 52.2. Ordenamiento de nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1. Ordenamiento en grafos . . . . . . . . . . . . . . . . . . . . . . . . 6PageRank en grafos . . . . . . . . . . . . . . . . . . . . . . . . . . 6TextRank en documentos . . . . . . . . . . . . . . . . . . . . . . . 6Ordenamiento de páginas web con grafos . . . . . . . . . . . . . . 7

2.2.2. Ordenamiento en hipergrafos . . . . . . . . . . . . . . . . . . . . . 8HG-Rank: Obtención de palabras clave en textos con hipergrafos

[1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Representación de la WWW con hipergrafos [4] . . . . . . . . . . 8

2.2.3. Ordenamiento de páginas web con corpus de texto: TREC y LETOR 8Ordenamiento de páginas web con corpus de texto: TREC . . . . 8LETOR: benchmarking para ordenamiento de rangos usando mé-

todos supervisados [26] . . . . . . . . . . . . . . . . . . . 92.2.4. Algoritmos de agrupamiento (Clustering) para la construcción de

hipergrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3. Marco Teórico 133.1. Notación y definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.1.1. Grafos definición y fórmulas . . . . . . . . . . . . . . . . . . . . . 13

Page 8: Ordenamiento de Páginas Web con Hipergrafos

VIII

3.1.2. Hipergrafos definición y fórmulas . . . . . . . . . . . . . . . . . . 143.2. Caminatas al azar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2.1. Caminatas al azar en grafos . . . . . . . . . . . . . . . . . . . . . . 163.2.2. Caminatas al azar en hipergrafos . . . . . . . . . . . . . . . . . . . 19

3.3. Método de Potencias (“Power Method”) para obtener el eigenvector do-minante de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.4. Medidas para evaluar la importancia de nodos (“scoring”) . . . . . . . . 23Medidas geométricas . . . . . . . . . . . . . . . . . . . . . . . . . . 23Medidas espectrales . . . . . . . . . . . . . . . . . . . . . . . . . . 24Medidas basadas en rutas sobre el grafo . . . . . . . . . . . . . . . 25

3.5. Algoritmos de agrupamiento (Clustering) en grafos . . . . . . . . . . . . 273.6. Métricas para evaluación de ordenamientos (rankings) . . . . . . . . . . 283.7. Selección del “Golden Standard”: Colección Corpus .GOV . . . . . . . . 28

3.7.1. Colección de pruebas TREC . . . . . . . . . . . . . . . . . . . . . . 283.7.2. Colección .GOV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.7.3. Métodos supervisados de ordenamiento: LETOR (Learning to Rank) 29

4. Implementación de la Solución 324.1. Grafo del Corpus .GOV . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.2. Algoritmos para el clustering de grafos y la construcción de hipergrafos

a partir de estos agrupamientos . . . . . . . . . . . . . . . . . . . . . . . . 334.2.1. Obtención de agrupamientos no traslapados de nodos . . . . . . 334.2.2. Obtención de agrupamientos traslapados de nodos a partir de los

grupos obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.3. Algoritmo para la caminata al azar y obtención de eigenvectores . . . . . 344.4. Validación del algoritmo de caminata al azar en hipergrafos con un ejem-

plo corto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Ejemplo ilustrativo de las etapas del proceso . . . . . . . . . . . . 35

4.4.1. Obtención del grafo . . . . . . . . . . . . . . . . . . . . . . . . . . 354.4.2. Construcción de grupos no traslapados (excluyentes) mediante

algoritmos de agrupamiento en grafos . . . . . . . . . . . . . . . . 354.4.3. Construcción de grupos traslapados para la construcción de las

hiperaristas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.4.4. Obtención de la matriz de transición . . . . . . . . . . . . . . . . . 374.4.5. Algoritmo de caminata al azar y obtención de eigenvector (orde-

namientos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.5. Punto de referencia (Benchmarking) con la colección LETOR . . . . . . . 38

5. Pruebas y Resultados 415.1. Relación entre el algoritmo PageRank e HyperPageRank . . . . . . . . . 415.2. Desempeño de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.2.1. Comparación de hipergrafos con otros algoritmos sobre grafos . 415.2.2. Comparación con los resultados de .GOV-TREC . . . . . . . . . . 425.2.3. Comparación con los resultados de .GOV-LETOR . . . . . . . . . 45

Page 9: Ordenamiento de Páginas Web con Hipergrafos

IX

6. Conclusiones y Trabajo Futuro 466.1. Discusión y conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Relación entre calificaciones del algoritmo PageRank e HyperPa-geRank . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

El algoritmo de agrupamiento para construir los hipergrafos afec-ta el resultado . . . . . . . . . . . . . . . . . . . . . . . . 46

La forma de inducir los subgrafos afecta el resultado . . . . . . . 46Los algoritmos con hipergrafos tienen mejor desempeño que los

ejecutados en grafos . . . . . . . . . . . . . . . . . . . . . 47Los métodos supervisados tienen mejor desempeño que los mé-

todos con grafos o hipergrafos . . . . . . . . . . . . . . . 476.2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Bibliografía 49

A. Código utilizado para la programación de los algoritmos 52A.1. Código para ejecutar el algoritmo PageRank en el lenguaje Scala usando

Apache Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52A.2. Código para ejecutar el algoritmo Label Propagation en el lenguaje Scala

usando Apache Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54A.3. Código para ejecutar el algoritmo de “Método de Potencias” (“Power

Method”) para obtener el eigenvector dominante de una matriz en ellenguaje Python usando las librerías de Python Scipy y Python Numpy . 55

A.4. Código para procesar la colección de LETOR y poder inducir los grafosa partir de los queries dados en LETOR . . . . . . . . . . . . . . . . . . . 56

A.5. Código para procesar las matrices y realizar caminata aleatoria - sólo elmain del código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Page 10: Ordenamiento de Páginas Web con Hipergrafos

X

Índice de figuras

3.1. Ejemplo de un hipergrafo con cinco vértices . . . . . . . . . . . . . . . . . 143.2. Matriz de incidencia del hipergrafo . . . . . . . . . . . . . . . . . . . . . . 153.3. Matriz de adyacencia del hipergrafo . . . . . . . . . . . . . . . . . . . . . 153.4. Grafo web de 6 nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.5. Matriz de transición del grafo . . . . . . . . . . . . . . . . . . . . . . . . . 183.6. Hipergrafo web de 6 nodos . . . . . . . . . . . . . . . . . . . . . . . . . . 203.7. Matriz de incidencia del hipergrafo . . . . . . . . . . . . . . . . . . . . . . 213.8. Matriz diagonal de grado de vértices del hipergrafo . . . . . . . . . . . . 213.9. Matriz diagonal de grado de hiperaristas del hipergrafo . . . . . . . . . . 213.10. Betweenness de un grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.11. Tabla de caminos más cortos de un grafo . . . . . . . . . . . . . . . . . . 263.12. Formato de la información de LETOR . . . . . . . . . . . . . . . . . . . . 31

4.1. Grafo web de 6 nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.2. Hipergrafo web de 6 nodos . . . . . . . . . . . . . . . . . . . . . . . . . . 364.3. Hipergrafo web de 6 nodos . . . . . . . . . . . . . . . . . . . . . . . . . . 364.4. Matriz de incidencia del hipergrafo . . . . . . . . . . . . . . . . . . . . . . 374.5. Matriz diagonal de grado de vértices del hipergrafo . . . . . . . . . . . . 374.6. Matriz diagonal de grado de hiperaristas del hipergrafo . . . . . . . . . . 374.7. Matriz de incidencia del hipergrafo . . . . . . . . . . . . . . . . . . . . . . 38

Page 11: Ordenamiento de Páginas Web con Hipergrafos

XI

Índice de cuadros

2.1. Ganancia cumulativa con disminución normalizada (Normalized dis-counted cumulative gain - NDCG) y precisión a 10 documentos recupe-rados (P@10) para la colección GOV2. La tabla incluye como referencia,los resultados obtenidos usando una función ordenadora, estado del arte(BM25), basada en el texto de los documentos y una línea final en la quelos documentos se ordenaron al azar. Tabla del artículo de Boldi & Vigna[6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2. Precisión a 10, 15 y 20 documentos recuperados (P@10, P@15, P@20) parala colección Opinosis. Tabla del artículo de Bellaachia & Al-Dhelaan [1] . 8

2.3. Precisión promedio (MAP) y Precisión a 10 documentos recuperados(P@10) para la colección WBR03. Tabla del artículo de Berlt et al [4] . . . 9

2.4. Precisión a 10 documentos recuperados (P@10) y MAP para la colecciónGOV de TREC 2003. Los resultados (P@10) son de los grupos participan-tes (columna Grupo). Tabla del artículo de Craswell & Hawking [10] . . 10

2.5. Precisión a 10 documentos recuperados (P@10) y MAP para la colecciónGOV de TREC 2004. Los resultados (P@10) son de los grupos participan-tes (columna Grupo). Tabla del artículo de Craswell & Hawking [9] . . . 11

2.6. Precisión promedio (MAP) y Precisión a 1, 3, 5 y 10 documentos recu-perados (P@10) para la colección TD2004 del corpus .GOV, usada en LE-TOR. Tabla del artículo de Qin et al [26] . . . . . . . . . . . . . . . . . . . 11

3.1. Tabla de corpus utilizados y tracks realizados por año . . . . . . . . . . . 293.2. Características del corpus .GOV [11] . . . . . . . . . . . . . . . . . . . . . 30

4.1. Características de algoritmos con hipergrafos utilizados en el corpus . . 39

5.1. Tabla de ordenamientos PageRank e HyperPageRank (solamente los pri-meros nodos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.2. Precisión a 10 (P@10) y MAP para el grafo de la colección .GOV. conalgoritmos de centralidad en grafos, comparados con hipergrafos . . . . 42

5.3. Precisión a 10 documentos recuperados (P@10) y MAP para la colecciónGOV de TREC 2003. Los resultados (P@10) son de los grupos participan-tes (columna Grupo). Se incluyen los promedios para los experimentosde esta tesis. Tabla del artículo de Craswell & Hawking [10] . . . . . . . 43

Page 12: Ordenamiento de Páginas Web con Hipergrafos

XII

5.4. Precisión a 10 documentos recuperados (P@10) y MAP para la colecciónGOV de TREC 2004. Los resultados (P@10) son de los grupos participan-tes (columna Grupo). Tabla del artículo de Craswell & Hawking [9] . . . 44

5.5. Precisión promedio (MAP) y Precisión a 1, 3, 5 y 10 documentos recu-perados (P@10) para la colección TD2004 del corpus .GOV, usada en LE-TOR. Tabla del artículo de Qin et al [26] . . . . . . . . . . . . . . . . . . . 45

Page 13: Ordenamiento de Páginas Web con Hipergrafos

1

Capítulo 1

Introducción

1.1. Planteamiento del problema

Con el rápido desarrollo de la WWW, existe hoy en día, una sobrecarga de informa-ción para los usuarios de esta red; por ejemplo, Google maneja más de 1 billón (1 x 1012)de páginas web, y este número sigue creciendo a diario. Por lo tanto, es más importanteque nunca, contar con sistemas de recuperación de información eficientes y efectivos,y los motores de búsqueda se han convertido en una herramienta indispensable paramucha gente.

El problema principal de la recuperación de información es satisfacer la necesidadde información que permita a un usuario obtener una solución a su problema, es de-cir, proveer de información que sea relevante (documentos, imágenes, páginas web,respuestas específicas, etc.) . Por lo tanto, es fundamental determinar la importancia orelevancia de la información para poder presentar sólo aquella que satisfaga las necesi-dades de información del usuario, y ordenarla, de acuerdo a su importancia.

Existen muchas técnicas para determinar la relevancia y presentar mediante orde-namientos (“rankings”) la información más relevante, las cuales se obtienen principal-mente de dos formas: mediante la información contenida en los documentos analizados(modelo de espacio vectorial, etc.) y mediante la estructura de las relaciones entre di-chos documentos, modelándose, por ejemplo, como un grafo. Un ejemplo que usa losgrafos para representar la estructura de la web y obtener un ordenamiento sobre la re-levancia de cada página web, es el de PageRank, uno de los algoritmos más conocidosen esta área. [25]

Page 14: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 1. Introducción 2

1.2. Justificación

A pesar del buen desempeño de los modelos en grafos, esta representación es limi-tada, ya que sólo se pueden establecer relaciones entre dos elementos de la estructura,es decir, una arista del grafo une sólo dos vértices adyacentes. Más recientemente, seha utilizado una representación más rica, mediante hipergrafos, la cual toma en cuentalas diversas relaciones jerárquicas que existen entre diferentes entidades.

Las ventajas que representa usar los hipergrafos es que modelan las relaciones entreelementos a un más alto nivel conceptual que el de los grafos y generalizan las relacio-nes entre los elementos de la estructura.

1.3. Hipótesis

Existen diversos trabajos que documentan que el uso de hipergrafos para represen-tar y modelar diversas estructuras lleva a mejores resultados en cuanto al desempeñode los fenómenos modelados [1], [4], [28], [15], [30]. La hipótesis de trabajo de esta tesises que al ordenar las páginas web por medio de hipergrafos, el desempeño del algorit-mo de ordenamiento será mejor que otros algoritmos probados.

1.4. Objetivos

1.4.1. Objetivo general

Implementar técnicas de obtención de ordenamientos (rankings"), enfocadas a Re-cuperación de la Información, usando hipergrafos para representar la estructura de laspáginas web analizadas y comparar el desempeño con otros algoritmos.

1.4.2. Objetivos específicos

Obtener la relevancia de páginas web asignándoles calificaciones (“rankings”) deacuerdo a diversos algoritmos sobre grafos.

Construir hipergrafos con técnicas de agrupamiento de grafos.

Usar métodos matriciales para implementar la caminata aleatoria sobre hipergra-fos (obtención de eigenvectores)

Page 15: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 1. Introducción 3

Asignar calificaciones (“scores”) y ordenamientos (“rankings”) para determinarcuáles son los documentos más relevantes.

Comparar los resultados obtenidos de los ordenamientos con un caso base (cor-pus .GOV), con trabajos previos, y con otros algoritmos.

1.5. Alcance

El trabajo actual implementa algoritmos para la determinación de los documentosmás relevantes (ordenamientos) y la representación de las estructuras analizadas en hi-pergrafos. No se analiza a profundidad el efecto de los algoritmos de agrupamiento degrafos sobre los resultados, debido a restricciones de tiempo y a que dichos algoritmosno son escalables a gran cantidad de datos.

1.6. Medios utilizados

Se programan los algoritmos para obtener la relevancia de los nodos en el grafo,asignándoles una calificación de importancia (ranking) de acuerdo a su relevancia, lacual está determinada por la estructura del grafo analizado. Las calificaciones de cadanodo se obtienen mediante el algoritmo de caminata al azar sobre los hipergrafos elcual utiliza el algoritmo del “Método de potencias” para obtener los valores propios.Cabe notar que en esta tesis no se cuenta con el corpus en sí, sólo se trabaja con el grafoobtenido de manera libre en internet que representa la estructura del corpus.

Los algoritmos relacionados con el procesamiento del grafo se programaron en ellenguaje de programación Python con librerías matemáticas y de grafos. Además dela programación de algoritmos para ordenar los nodos, se utilizaron diversas libreríaspara clustering en grafos para obtener los grupos o comunidades, y construir con éstos,las hiperaristas. Dichos algoritmos se programaron en Scala utilizando el frameworkpara Big Data de Apache Spark

Fue necesario trabajar en un servidor del Instituto para las Ciencias de la Compu-tación y Control de la Academia Húngara de Ciencias para poder ejecutar los algorit-mos debido a los grandes requerimientos de memoria. Dicho servidor cuenta con 60núcleos y 128 Gb de memoria RAM.

Page 16: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 1. Introducción 4

1.7. Aportaciones

La principal aportación de este trabajo es que utiliza una forma de obtener hipergra-fos que no ha sido utilizada antes en la literatura mediante algoritmos de agrupamientode redes (grafos). Esto se realiza con el propósito de que la caminata aleatoria puedarealizarse sobre conjuntos de nodos relacionados entre sí.

También es importante mencionar que el enfoque de la caminata aleatoria en estetrabajo es diferente a la de otros artículos: en este trabajo se usa el formalismo mate-mático de matrices y sus valores propios (eigenvectores) usando teoría espectral paraimplementar el algoritmo de caminata aleatoria.

Por último, se hace una comparación entre los métodos en grafos y en hipergrafoscon el mismo corpus para que la comparación sea válida. Hay muy pocos trabajos queutilizan el mismo corpus para comparación entre métodos.

Se utiliza un corpus de referencia de TREC ampliamente disponible, lo cual tampocohacen muchos autores y sus resultados no pueden ser comprobados fácilmente.

Page 17: Ordenamiento de Páginas Web con Hipergrafos

5

Capítulo 2

Estado del Arte

2.1. Uso de hipergrafos para la representación de infor-

mación

Los hipergrafos se han utilizado exitosamente en diversas áreas de investigacióntales como recuperación de imágenes [15], representación de meta-información de mú-sica para recomendaciones [8], asociación de palabras en textos [18], y calificaciones yordenamientos de video [28], entre otras muchas aplicaciones.

2.2. Ordenamiento de nodos

El concepto de ordenamiento está muy relacionado con el de asignar una califica-ción a algún elemento de una estructura. El orden relativo de objetos en una lista, pue-de representar su relevancia, preferencia o importancia. En grafos, se busca determinarcuáles nodos son los más importantes, de acuerdo a algún criterio. Existen diversas for-mas de obtener ordenamientos para nodos: de acuerdo al grado del nodo (degree), ala cercanía con otros nodos (closeness), a la cantidad de caminos más cortos que pasana través de dicho nodo (betweenness), a la identificación de nodos que maximizan elvector dominante de la matriz del grafo (eigenvector centrality), a la probabilidad depasar por dicho nodo en la distribución del estado estacionario de la caminata aleatoriaen el grafo (PageRank).

Todos estas medidas de importancia, se han obtenido a partir de la representacióndel fenómeno estudiado, mediante grafos. Sin embargo, más recientemente, se ha uti-lizado una representación más rica, mediante hipergrafos, la cual toma en cuenta las

Page 18: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 6

diversas relaciones jerárquicas que existen entre diferentes entidades. Esta represen-tación en hipergrafos ha llevado a mejores resultados que aquellos representados engrafos.

2.2.1. Ordenamiento en grafos

PageRank en grafos

Los grafos se han usado con gran éxito para representar estructuras entre diferentesentidades y establecer relaciones entre ellas. En particular, la WWW (World Wide Web)consiste en millones de páginas web interconectadas entre sí. las cuales contienen tex-to, imágenes, video, etc. Estas páginas corresponden a vértices en el grafo, y las ligas(hyperlinks) entre las páginas corresponden a aristas dirigidas. En este contexto, unode los casos más importantes en la literatura de la web representada en grafos, es elde Brin y Page [25] en la cual la estructura de páginas web en la WWW se representancomo un grafo dirigido. Se aplican iteraciones de acuerdo al algoritmo de PageRankpara obtener el estado estacionario con el cual se obtiene un rango (rank) para cada pá-gina. Esta técnica es equivalente a una caminata al azar en la que se visitan las páginasde manera aleatoria y al final, las páginas más probables de ser visitadas tendrán unamayor calificación.

TextRank en documentos

Este mismo enfoque de representación mediante grafos, se ha aplicado en el áreade Procesamiento del Lenguaje Natural (NLP) para obtener la importancia mediantela ponderación (weights) de términos clave (keywords) en un documento mediante elalgoritmo de caminata aleatoria (al cual renombran como TextRank). En esta represen-tación mediante un grafo, cada palabra es un vértice y la cercanía a otras palabras (oco-ocurrencia en una ventana de N palabras) indican las relaciones entre estas, repre-sentadas por aristas. Estas palabras constituyen una manera útil de seleccionar aquellaspalabras o términos que mejor describen un documento. [21] El mejor desempeño has-ta entonces, era por métodos supervisados, en los cuales un sistema se entrena parareconocer palabras clave en un texto, basado en características léxicas y sintácticas [14].Sin embargo, el método de caminata aleatoria con el PageRank modificado (TextRank)superó en desempeño a los resultados obtenidos mediante métodos supervisados.

Page 19: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 7

Ordenamiento de páginas web con grafos

Existen diversos trabajos que tratan sobre el ordenamiento de páginas web, ademásdel PageRank, uno de los cuales compara el desempeño de diversos algoritmos exis-tentes en la literatura y los compara con el estado del arte en al área de recuperaciónde información [6]. Sus resultados en el corpus GOV2 (y su respectivo grafo) muestranque los métodos basados solamente en la estructura de los grafos tienen una peor recu-peración de documentos comparados con los métodos en los que se usa la informaciónde los documentos. En particular, comparados con el estado del arte que es el algorit-mo BM25 (una función de asignación de rangos basado en funciones de las frecuenciasde términos de los documentos TF e IDF) las métricas de los algoritmos basados en laestructura del grafo son más bajas (tabla 2.1)

CUADRO 2.1: Ganancia cumulativa con disminución normalizada (Nor-malized discounted cumulative gain - NDCG) y precisión a 10 documen-tos recuperados (P@10) para la colección GOV2. La tabla incluye como re-ferencia, los resultados obtenidos usando una función ordenadora, estadodel arte (BM25), basada en el texto de los documentos y una línea final enla que los documentos se ordenaron al azar. Tabla del artículo de Boldi &

Vigna [6]

Algoritmo P@10 NDCG@10BM25 (estado del arte) 0.5644 0.5842β-measure 0.1349 0.1417SALSA 0.1282 0.1384PageRank 1/4 0.1295 0.1347β-measure← 0.1275 0.1328Indegree↔ 0.1255 0.1318PageRank 1/2 0.1268 0.1315PageRank 3/4 0.1255 0.1313Katz 1/2λ 0.1262 0.1297Indegree← 0.1262 0.1295Harmonic 0.1262 0.1293Katz 1/4λ 0.1255 0.1289Lin 0.1248 0.1286Indegree 0.1248 0.1283Katz 3/4λ 0.1242 0.1278HITS 0.1107 0.1179Closeness 0.1121 0.1168Dominant 0.1067 0.1131Betweenness 0.0577 0.0588Orden aleatorio 0.0577 0.0588

Page 20: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 8

2.2.2. Ordenamiento en hipergrafos

HG-Rank: Obtención de palabras clave en textos con hipergrafos [1]

Este artículo utiliza hipergrafos para obtener palabras clave de documentos cortosasignándoles un rango utilizando una caminata aleatoria. El desempeño de acuerdo ala precisión reportada es mayor que al representar la información en grafos (usandoel algoritmo previamente mencionado TextRank). Utiliza una colección de documentosde opiniones de artículos en internet. Los resultados que se obtienen se muestran en latabla 2.2.

CUADRO 2.2: Precisión a 10, 15 y 20 documentos recuperados (P@10, P@15,P@20) para la colección Opinosis. Tabla del artículo de Bellaachia & Al-

Dhelaan [1]

Algoritmo P@10 P@15 P@20tf-idf 0.36 0.28 0.28TextRank 0.53 0.42 0.35NE-Rank 0.60 0.46 0.36HG-Rank 0.66 0.57 0.46

Representación de la WWW con hipergrafos [4]

En este trabajo se representa la WWW como un hipergrafo dirigido en vez de ungrafo. El hipergrafo que representa la web se construye con bloques donde cada páginaweb pertenece al mismo dominio de internet. El ordenamiento obtenido y la asigna-ción de rango a cada página se realiza con PageRank adaptado para hipergrafos. Cabenotar que la adaptación del algoritmo usa la notación iterativa (y no la representaciónmatricial y sus respectivos eigenvalores). Los resultados que se obtienen se muestranen la tabla 2.3.

2.2.3. Ordenamiento de páginas web con corpus de texto: TREC y LE-

TOR

Ordenamiento de páginas web con corpus de texto: TREC

La Conferencia de Recuperación de Textos (“Text REtrieval Conference” - TREC), esun taller para experimentar con métodos de Recuperación de la Información que consta

Page 21: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 9

CUADRO 2.3: Precisión promedio (MAP) y Precisión a 10 documentos re-cuperados (P@10) para la colección WBR03. Tabla del artículo de Berlt et al

[4]

BNC (Experimento 1) BFC (Experimento 2)Algoritmo MAP P@10 MAP P@10PageRank 0.105 0.456 0.428 0.643PRHost 0.095 0.412 0.489 0.757PRDom 0.098 0.422 0.487 0.757HyPRHost 0.099 0.434 0.481 0.753HyPRDom 0.093 0.410 0.498 0.777

de varios corpus de prueba. Específicamente, en los años 2003 [10] y 2004 [9], se rea-lizaron pruebas con el mismo corpus que se utilizó en esta tesis (.GOV), obteniéndoselos resultados para el TREC 2003 mostrados en la tabla 2.4.

Los resultados obtenidos para el año 2004 se muestran en la tabla 2.5, en el que veun desempeño superior al del año previo.

LETOR: benchmarking para ordenamiento de rangos usando métodos supervisados[26]

LETOR es un punto de referencia (benchmark) para la investigación en aprendiza-je sobre ordenamientos (learning to rank) en el área de Recuperación de Información(Information Retrieval) creado por Microsoft Research. Para la construcción de esta co-lección, se seleccionó el corpus estándar de TREC (documentos estándar para recupera-ción de información) Gov, que cuenta con aproximadamente 1 millón de documentos.

La información contenida en esta colección consiste en peticiones de información(queries), cada uno de los cuales está asociado con un conjunto de documentos califi-cados de acuerdo a su relevancia (binaria: 1 = relevante, 0 = no relevante). Para cadaquery se califican 1000 documentos, y se cuenta en total con 75 queries. Para cada ele-mento query-documento se cuenta con 64 atributos los cuales se utilizan para obtenermodelos supervisados (o función de ordenamiento) y obtener la relevancia de cadaquery-documento (es decir, qué tan relevante es un documento, dado un query). Losresultados de los diferentes modelos se muestran en la tabla 2.6.

Page 22: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 10

CUADRO 2.4: Precisión a 10 documentos recuperados (P@10) y MAP parala colección GOV de TREC 2003. Los resultados (P@10) son de los gruposparticipantes (columna Grupo). Tabla del artículo de Craswell & Hawking

[10]

Grupo P@10 MAPcsiro 0.124 0.1543hummingbird 0.128 0.1387uamsterdam 0.098 0.1344copernic 0.098 0.1325usunderland 0.094 0.1114uglasgow 0.114 0.1336neuchatelu 0.088 0.1371microsoftasia 0.116 0.1027tsinghuau 0.106 0.1131ibmhaifa 0.122 0.1091umelbourne 0.092 0.0897meijiu 0.092 0.0698vatech 0.076 0.0848fub 0.064 0.0799irit-sig 0.072 0.0818kasetsartu 0.044 0.0660cas-ict 0.052 0.0728indianau 0.076 0.1016ajouu 0.070 0.0896uillinoisuc 0.064 0.0691lehighu 0.028 0.0343umarylandbc 0.032 0.0226saarlandu 0.000 0.0001

Page 23: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 11

CUADRO 2.5: Precisión a 10 documentos recuperados (P@10) y MAP parala colección GOV de TREC 2004. Los resultados (P@10) son de los gruposparticipantes (columna Grupo). Tabla del artículo de Craswell & Hawking

[9]

Grupo P@10 MAPuogWebCAU150 0.249 0.179MSRAmixed1 0.251 0.178MSRC04C12 0.231 0.165humW04rdpl 0.231 0.163THUIRmix042 0.205 0.147UAmsT04MWScb 0.209 0.146ICT04CIIS1AT 0.208 0.141SJTUINCMIX5 0.189 0.129MU04web1 0.199 0.115MeijiHILw3 0.153 0.115csiroatnist 0.205 0.111mpi04web01 0.177 0.106VTOK5 0.135 0.101fdwiedf0 0.117 0.090wdf3oks0brr1 0.124 0.085LamMcm1 0.087 0.049irttil 0.029 0.018XLDBTumba01 0.011 0.003

CUADRO 2.6: Precisión promedio (MAP) y Precisión a 1, 3, 5 y 10 docu-mentos recuperados (P@10) para la colección TD2004 del corpus .GOV,

usada en LETOR. Tabla del artículo de Qin et al [26]

Algoritmo P@1 P@3 P@5 P@10 MAPRegresión 0.360 0.333 0.312 0.249 0.208Ranking SVM 0.413 0.347 0.301 0.252 0.224RankBoost 0.507 0.427 0.352 0.275 0.261FRank 0.493 0.378 0.333 0.262 0.239ListNet 0.360 0.360 0.307 0.256 0.223AdaRank-MAP 0.413 0.369 0.328 0.249 0.219AdaRank-NDCG 0.427 0.364 0.328 0.248 0.194SVMMAP 0.293 0.302 0.291 0.247 0.205

Page 24: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 2. Estado del Arte 12

2.2.4. Algoritmos de agrupamiento (Clustering) para la construcción

de hipergrafos

En la WWW, las comunidades que representan las hiperaristas, corresponden a gru-pos de páginas similares o relacionadas entre sí, por lo que las hiperaristas son nece-sarias para el ordenamiento de nodos por hipergrafos; es por lo tanto, importante larevisión de los algoritmos de agrupamiento en grafos para poder construir el hipergra-fo.

Uno de los algoritmos más utilizados es el de Newman y Girvan, basado en la me-dida llamada "betweenness", asociada a la cantidad de caminos más cortos que pasanpor una arista [13]. Otro criterio que se utiliza en varios de los algoritmos para evaluarlos algoritmos es el de modularidad, propuesto también por Girvan y Newman, el cualestá relacionado con comparaciones con la densidad de aristas generadas al azar en ungrafo [22].

Revisiones de la literatura sobre algoritmos de detección de comunidades muestranel desempeño y uso actual de dichos algoritmos; de acuerdo al criterio de la medidanormalizada de la información mutua (NMI), los de mejor desempeño son “Walktrap”y "Spinglass", seguidos de "Label Propagation", y por último “Fast Greedy” y “Eigen-vector"[23].

Resultados más recientes [29], realizados sobre grafos (redes) artificiales muestranque, tomando en cuenta la precisión y el tiempo de cómputo, el algoritmo “Multilevel”,propuesto por Blondel et al [5], tiene mejor desempeño que los demás algoritmos com-parados (de acuerdo a la medida normalizada de la información mutua - NMI). Si setoma en cuenta el tamaño de las redes analizadas, para las cuales no es muy relevante eltiempo de cómputo, los algoritmos ordenados en orden descendente de precisión son“Infomap”, “Label Propagation”, “Multilevel”, “Walktrap”, “Spinglass” y “Edge Bet-weenness”. Para redes más grandes, el desempeño, en orden descendente de tiempo decómputo está dado por: “Infomap”, “Label propagation”, “Multilevel”, y “Walktrap”.

Page 25: Ordenamiento de Páginas Web con Hipergrafos

13

Capítulo 3

Marco Teórico

3.1. Notación y definiciones

3.1.1. Grafos definición y fórmulas

Un grafo G denotado por G = (V,E) consta de un conjunto finito de vértices (onodos) V = {v1, v2, ..., vn}, y de aristas (o lados) E = {e1, e2, ..., em}. Los elementos deE están definidos sobre V, y son subconjuntos de 2 elementos de V, eij = (vi, vj), dondeE = {(vi, vj) : vi, vj ∈ V }, y E ⊆ [V ]2 [12].

Un vértice v es incidente con una arista e, si v ∈ e. El grado de un vértice v es lacantidad de aristas que inciden sobre v, y está dado por d(v) = |{e ∈ E : v ∈ e}| [2].El grado de una arista e es la cantidad de vértices en dicha arista, y en grafos simpleses siempre igual a dos, d(e) = 2. Si el grafo G no tiene vértices aislados, su matriz deincidencia B = (bij) de n×m [12] está dada por:

bij =

1 si vi ∈ ej0 de otra manera

(3.1)

La matriz de adyacencia de G [12], A = (aij), es la matriz cuadrada donde, paratodos los pares de vértices vi, vj ∈ V :

aij =

1 si vi, vj ∈ ej0 de otra manera

(3.2)

Un grafo G = (V,E) se llama r-partito [12] si V admite una partición en r clases, talque toda arista tiene sus extremos en diferentes clases: los vértices en la misma clase nodeben ser adyacentes. Usualmente, para el caso donde r = 2, estas grafos se conocencomo bipartitos.

Page 26: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 14

3.1.2. Hipergrafos definición y fórmulas

Un hipergrafo H es un par H = (V,E) donde V es un conjunto finito de vértices(o nodos) V = {v1, v2, ..., vn}, y E = (e1, e2, ..., em) es una familia de subconjuntos deV , donde los ei son las hiperaristas de H [3]. Si

⋃i∈I ei = V , decimos que el hiper-

grafo no contiene vértices aislados. En la fig. 3.1, se muestra un ejemplo de un hiper-grafo con cinco vértices (V = {v1, v2, v3, v4, v5}) y tres hiperaristas (E = {e1, e2, e3} =

{{v1, v2, v3}, {v3, v4}, {v1, v2, v5}}).

FIGURA 3.1: Ejemplo de un hipergrafo con cinco vértices(V = {v1, v2, v3, v4, v5}) y tres hiperaristas (E = {e1, e2, e3} =

{{v1, v2, v3}, {v3, v4}, {v1, v2, v5}}).

Dos vértices en un hipergrafo son adyacentes si existe una hiperarista que contieneambos vértices. Dos hiperaristas en un hipergrafo son incidentes si su intersección esno vacía. Si tenemos un hipergrafo H = (V,E) sin vértices aislados, decimos que Htiene una matriz de incidencia [7] A = (aij), de n×m donde:

aij =

1 si vi ∈ ej0 de otra manera

(3.3)

La matriz de incidencia correspondiente al grafo de la fig. 3.1, se muestra en la figura3.2.

La matriz de adyacencia de H [7], A(H) = (aij), es la matriz cuadrada donde paratodos los pares de vértices vi, vj ∈ V :

aij =

|{e ∈ E : vi, vj ∈ e}| si (i 6= j)

0 si (i = j)(3.4)

Page 27: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 15

FIGURA 3.2: Matriz de incidencia del hipergrafo de la fig. 3.1

La matriz de adyacencia correspondiente al grafo de la fig. 3.1, se muestra en lafigura 3.3.

FIGURA 3.3: Matriz de adyacencia del hipergrafo de la fig. 3.1

El grado de un vértice es la cantidad de hiperaristas a las que pertenece un vértice yse obtiene a partir de los elementos aij de la matriz de incidencia A sumando sobre lascolumnas (hiperaristas) mediante: D(vi) =

m∑j=1

aij (m es la cardinalidad de la familia de

hiperaristas). De manera alternativa, se puede definir como D(v) = |ε(v)| , donde ε(v)es el conjunto de hiperaristas incidentes sobre v [2].

La matriz diagonal de grado de los vértices se obtiene a partir de esta definiciónmediante: Dv = diag(D(v1), D(v2), ..., D(vn))) donde Dv es una matriz diagonal.

El grado de una hiperarista es la cantidad de vértices contenidos en dicha hiper-arista D(e) = |e|, y se obtiene a partir de los elementos aij de la matriz de incidenciaA sumando sobre las filas (vértices) mediante: D(ej) =

n∑i=1

aij (n es la cardinalidad del

conjunto de vértices) [2].La matriz diagonal de grado de las hiperaristas se obtiene a partir de esta definición

mediante: De = diag(D(e1), D(e2), ..., D(en))) donde De es una matriz diagonal.

Page 28: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 16

La trayectoria en un hipergrafo H entre los vértices u1 y us es una secuencia alter-nante de vértices e hiperaristas [7] :

u1, e1, u2, e2, ..., ui, ei, ui+1..., es, us tal que:

u1, u2, ..., ui, ui+1, ..., us son vértices sucesivos, con la posibilidad de que ui = ui+1.

e1, e2, ..., es son hiperaristas distintas.

ui, ui+1 ∈ ei (i = 1, 2, ..., s)

El entero s es la longitud de la trayectoria P . Si existe una trayectoria de u a v de-cimos que P conecta a u y v, y se dice que un hipergrafo es conexo si para cualquierpar de vértices, existe una trayectoria que los conecte. La distancia d(u, v) entre dosvértices u y v es la longitud del camino más corto entre u y v.

3.2. Caminatas al azar

3.2.1. Caminatas al azar en grafos

Una caminata al azar en un grafo se puede obtener mediante el siguiente proceso:se escoge un nodo inicial del grafo, se escoge un vecino de este nodo al azar y se tras-lada al nuevo nodo. La secuencia de nodos obtenidos de esta manera es una caminataaleatoria en el grafo [19].

Las caminatas al azar en grafos se pueden representar por medio de cadenas deMarkov reversibles en el tiempo, donde los nodos son representados como los estadosde la cadena M y la transición entre un estado y otro, es la probabilidad de pasar de unvértice u a otro vecino v (se considera una probabilidad uniforme). Esta probabilidadse obtiene mediante:

P (u, v) =1

d(u)(3.5)

donde d(u) es el grado del vertice u. Se denota como M = (pij) la matriz de transición(o matriz de probabilidades de transición) de una cadena de Markov, y se construyecon las probabilidades de pasar de un nodo a otro nodo adyacente, y está dada por[19]:

pij =

1/d(i) si vi, vj ∈ e0 de otra manera

(3.6)

Page 29: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 17

Es decir, cada entrada de la matriz es inversamente proporcional a la cantidad denodos a los que es adyacente porque se tiene la misma probabilidad de pasar a cual-quiera de ellos, por lo que la probabilidad es inversa al grado del nodo.

Alternativamente, la matriz de transición M se puede expresar como M = DB,donde D es la matriz diagonal con los elementos dados por el inverso del grado delvértice i-ésimo Dii = 1/d(vi) y B la matriz de adyacencia.

La regla para caminar en grafos puede expresarse por la ecuación:

Pt+1 =MTPt (3.7)

o equivalentemente:Pt = (MT )tP0 (3.8)

donde Pt es la distribución de probabilidades de cada vértice (o estado) en el tiempot, y P0 la distribución inicial. El vector que representa la distribución inicial se multiplicapor la matriz de transición para obtener la nueva distribución en tiempos posteriores,hasta que, después de varias iteraciones, la distribución de probabilidades (Pt) ya nocambia.

En la figura 3.4 se muestra un ejemplo de la web representada como un grafo queconsta de 6 nodos (para facilitar su representación), para la cual se tiene la matriz detransición de la figura 3.5.

FIGURA 3.4: Grafo web de 6 nodos donde cada nodo representa una pági-na web, unida por ligas entre las páginas

Para calcular el estado estacionario π de una caminata al azar, se empieza con elvector (columna) inicial P0 de dimensión |V | x 1, con componentes aleatorios (por logeneral se usan componentes de valor 1, por ejemplo, P0 = [1, 1, 1, ...]). Posteriormente,

Page 30: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 18

FIGURA 3.5: Matriz de transición del grafo de la fig. 3.4

para cada tiempo t, se multiplica iterativamente por la matriz de transición. Despuésdel primer movimiento, se obtiene un nuevo vector P1 = MTP0 (donde MT es estocás-tica por columnas), el cual se vuelve a multiplicar por la matriz de transición MT paraobtener la nueva distribución de probabilidades, P2 =MTP1 =MT (MTP0) = (MT )2P0.Para iteraciones en cualquier tiempo t, se obtiene que Pt = (MT )tP0 [2]. El vector de dis-tribución Pt deja de cambiar después de n pasos si la caminata al azar es ergódica, lo cualocurre cuando el vector de distribución converge a π, es decir, P = limt→∞(M

T )tP0 = π

donde π es la distribución estacionaria. De manera alternativa, esta ecuación se puedeexpresar como Pt+1 = MTPt, y para limt→∞, se obtiene P = MTP , donde P = π es elestado estacionario.

Una caminata al azar es ergódica cuando se cumplen las siguientes condiciones: 1)el grafo es irreducible, es decir, para cualesquiera dos vértices u, v ∈ V , deben cumplirque la probabilidad de transición entre ellos sea mayor que 0 (P (u, v) > 0). En otras pa-labras, cada nodo deben ser alcanzable desde cualquier otro. También se debe cumplirque 2) el grafo sea aperiódico, es decir, que no existan ciclos.

La solución de la ecuación P = MTP está dada cuando P es el vector propio oeigenvector dominante de la matriz de transición MT . El tener un eigenvector domi-nante consecuencia de que la matriz sea ergódica, garantiza que, independientementedel nodo del que se inicie en la caminata aleatoria, se va a llegar a un único eigenvectordominante que no cambia.

Para garantizar que la matriz sea ergódica, se utiliza el concepto de teletransporta-ción, el cual consiste en añadir un término a la matriz de transición original en el cualtodos los nodos se conectan entre sí con una probabilidad igual a 1/|V |, lo cual evita que

Page 31: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 19

la caminata aleatoria se “atore” o entre en ciclos infinitos. Este nuevo término, represen-tado por una nueva matriz de transición, se pondera por el factor de amortiguamientoα, el cual regula la importancia del nuevo término.

Pt+1 = αMTPt + (1− α)EPt (3.9)

donde E es la nueva matriz de teletransportación donde todos los nodos están co-nectados entre sí con probabilidad 1/|V | y |V | es la cantidad de nodos en el grafo.

3.2.2. Caminatas al azar en hipergrafos

En hipergrafos, la caminata al azar es sustancialmente diferente a la de grafos de-bido a la diferencia en su estructura. Por ejemplo, en un grafo normal, un navegadorimaginario viaja por una arista y tiene como destino un sólo vértice (destino). Sin em-bargo, en un hipergrafo, una hiperarista podría tener más de un vértice destino δ(e) ≥ 2

[2].Para generalizar el proceso de caminata aleatoria en hipergrafos, se modela la ca-

minata como la transición entre dos vértices que son incidentes entre sí sobre una hi-perarista, en vez de una arista normal. La caminata al azar, en este caso, es un procesode dos pasos: Primero, un caminante aleatorio escoge una hiperarista e incidente conel vértice de origen u aleatoriamente. Después, dentro de la hiperarista seleccionada,el caminante selecciona un vértice destino, de tal manera que u, v ∈ e. La caminataaleatoria en hipergrafos puede considerarse más general, ya que la de grafos normaleses un caso especial donde existe solamente un vértice destino v asociado a una aristaincidente con u; sin embargo, en una hiperarista, podemos escoger más de un vérticedestino. El proceso de caminata al azar en hipergrafos puede definirse como una cade-na de Markov donde el conjunto de vértices es el conjunto de estados de la cadena, demanera similar a como se define en un grafo normal.

De acuerdo a este modelo de caminata, ahora tenemos dos matrices de transición:una para la parte de la transición entre los nodos pertenecientes a una misma hiperaris-ta D(v)−1H donde D(v)−1 es la matriz diagonal con cada elemento dado por el inversodel grado del vértice i-ésimo D(v)ii = 1/d(vi) y H la matriz de incidencia, y la otraentre las hiperaristas incidentes a un nodo D(e)−1HT donde donde D(e)−1 es la ma-triz diagonal con los elementos dados por el inverso del grado de la hiperarista i-ésimaD(e)ii = 1/d(ei) yHT la transpuesta de la matriz de incidencia. La transición final es por

Page 32: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 20

lo tanto la multiplicación de las probabilidades de transición entre estas dos matrices yla matriz de transición de todo el hipergrafo está dada por [2]:

MHG = D(v)−1HD(e)−1HT (3.10)

Es importante mencionar que MHG es estocástica por filas por lo que la suma delos elementos de las filas es igual a 1. Para la aplicación de esta ecuación es importantetambién notar que no se deben tomar en cuenta las aristas del grafo original.

En la figura 3.6 se muestra un ejemplo de hipergrafo correspondiente al grafo de lafigura 3.4.

FIGURA 3.6: Hipergrafo web de 6 nodos (v1 − v6) donde cada nodo re-presenta una página web, conectadas por ligas entre las páginas, con tres

hiperaristas (verde - e1, roja - e2 y azul - e3)

La figura 3.7 muestra la correspondiente matriz de incidencia y las figuras 3.8 y 3.9sus matrices diagonales inversas del grado de vértices e hiperaristas respectivamente.

3.3. Método de Potencias (“Power Method”) para obtener

el eigenvector dominante de una matriz

Se utilizó el método de potencias para obtener el valor propio (eigenvector) domi-nante de la matriz de transición, el cual es un método iterativo [27]. Primero, se asume

Page 33: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 21

FIGURA 3.7: Matriz de incidencia H del hipergrafo de la fig. 3.6

FIGURA 3.8: Matriz dia-gonal D(v)−1 con los in-versos del grado de vér-tices del hipergrafo de la

fig. 3.6

FIGURA 3.9: Matriz dia-gonal D(e)−1 con los in-versos del grado de hiper-aristas del hipergrafo de

la fig. 3.6

Page 34: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 22

que la matriz A tiene un valor propio dominante con sus correspondiente vector pro-pio. Después, se escoge una aproximación inicial x0 de este vector en RN , diferente acero. Posteriormente, se forma la secuencia dada por:

x1 = Ax0

x2 = Ax1 = A(Ax0) = A2x0

x3 = Ax2 = A(A2x0) = A3x0

. . .

xk = Axk−1 = A(Ak−1x0) = Akx0

Para grandes valores de k, el valor xk es una buena aproximación del valor propiode la matriz A. Se presenta un ejemplo práctico corto:

Sea A =

2 −121 −5

Se empieza con una aproximación inicial diferente de cero:

x0 =

1

1

y se obtienen aproximaciones sucesivas mediante la iteración:

x1 = Ax0 =

2 −121 −5

1

1

=

−10−4

−→ −4

2.50

1.00

x2 = Ax1 =

2 −121 −5

−10−4

=

28

10

−→ 10

2.80

1.00

x3 = Ax2 =

2 −121 −5

28

10

=

−64−22

−→ −22

2.91

1.00

x4 = Ax3 =

2 −121 −5

−64−22

=

136

46

−→ 46

2.96

1.00

x5 = Ax4 =

2 −121 −5

136

46

=

−280−94

−→ −94

2.98

1.00

x6 = Ax5 =

2 −121 −5

−280−94

=

568

190

−→ 190

2.99

1.00

y las aproximaciones sucesivas del vector del lado derecho se acercan a múltiplos

escalares del vector:

Page 35: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 23

x =

3

1

que es el vector propio dominante de la matriz A, lo cual se puede verificar por

métodos analíticos.

3.4. Medidas para evaluar la importancia de nodos (“sco-

ring”)

Existen varias medidas para asignar la importancia a los nodos de un grafo, conoci-das a menudo en la literatura como medidas de centralidad (“centrality measures”), lacual es un indicador de la importancia de un nodo en un grafo.

Las medidas de centralidad más usadas son [6]:

Medidas geométricas

Estas medidas le dan la importancia a un nodo de acuerdo a la distancia: específica-mente, depende de cuántos nodos existen a cierta distancia.

Grado (“Degree”): Es el número de nodos vecinos a un nodo, y se considera unamedida geométrica ya que se cuentan los nodos a una distancia igual a uno (cantidadde nodos vecinos). Esta es la medida más simple y más antigua de centralidad, y esun buen punto de referencia; sin embargo, en ocasiones se obtienen mejores resultadosque con métodos más sofisticados.

Cabe notar que la definición dada es válida para grafos no-dirigidos. Para el casode grafos dirigidos, se distingue entre la cantidad de aristas entrantes (grado entrante -“indegree”) y salientes (grado saliente - “outdegree”)

Cercanía (“Closeness”): Esta medida refleja qué tan cerca está un nodo de los de-más, y está dada por:

C(x) =1∑

y d(x, y)(3.11)

donde d(x, y) es la longitud del camino más corto entre los nodos x y y. Si el grafo noes fuertemente conexo, se consideran solamente los nodos alcanzables. La lógica detrásde esta medida es que los nodos que son más centrales tienes menores distancias d, ypor lo tanto, un denominador más pequeño, lo cual resulta en una mayor centralidad.

Page 36: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 24

Medidas espectrales

Las medidas espectrales calculan el vector propio (“eigenvector”) de alguna matrizderivada del grafo, y dependiendo de cómo se modifica la matriz antes del cálculo deleigenvector, se pueden obtener varias medidas.

Eigenvector dominante: La primer medida espectral es el eigenvector dominante dela matriz de adyacencia del grafo. El eigenvector se obtiene cuando sus componentesalcanzan el equilibrio en iteraciones donde cada nodo empieza con la misma puntua-ción (score), y se van reemplazando las puntuaciones con la suma de las punruacionesde sus predecesores. El vector se normaliza, y se repite el proceso hasta la convergencia.

PageRank: Este es un método para calcular el ordenamiento de las páginas webbasado en el grafo de la web para medir la importancia relativa de cada página [25]. Ladefinición original del algoritmo es la siguiente: Sea E(u) un vector sobre las páginasweb que corresponden a una fuente de calificaciones (“rank”). Entonces, el PageRank[ordenamiento] de un conjunto de páginas web es una asignación R′ a las páginas webque satisface:

R′(u) = c∑v∈Bu

R′(v)Nv

+ cE(u)

donde E(u) es un vector sobre las páginas web que corresponden a una fuente deordenamientos [que une a los nodos con todos los demás], y c es un factor de decaimien-to. Bu es el conjunto de páginas a las que está ligada la página u. [En otras palabras, lasuma de las calificaciones de un nodo u va a ser proporcional a la suma de todos losnodos que están ligados a este nodo.]

la notación matricial de la ecuación anterior está dada por [25] R′ = c(AR′ + E)

donde A es la matriz de transición entre los nodos del grafo y E es la matriz de trle-transferencia que une a los nodos con todos los demás. Ya que ‖R′‖1 = 1, esta ecuaciónse puede reescribir como:

R′ = c(A+ E × 1)R′ (3.12)

Por lo tanto, R′ es un valor propio (eigenvector) de (A+ E × 1)

HITS: Este método - búsqueda de tópicos inducidos por hiperligas (“ hyperlinkinduced topic search” [20]) llamado también de “puertos y autoridades” (hubs anad

Page 37: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 25

authorities), fué propuesto poco después de que PageRank se implementara. Este al-goritmo presenta cierta similitud al cálculo de PageRank, ya que también consiste enel cómputo iterativo de multiplicaciones matriz-vector. En el contexto de la WWW, lasautoridades corresponden a páginas que se consideran fuentes buenas y confiables quetienen muchas ligas entrantes. Por ejemplo, la página http : //www.weather.com seconsidera una buena fuente para información relacionada con el clima, por lo tanto,muchas páginas hacen ligas a esta. De manera opuesta, los puertos son páginas conmuchas ligas salientes de ellas. Son compilaciones de apuntadores a otras páginas. Porejemplo, http : //www.bestwebbuys.com/books apunta a varias otras páginas de ven-dedores de libros, por lo tanto, puede usarse como punto de partida para encontrarbuenas librerías en línea. En general, un “puerto” apunta a varias buenas “autorida-des” y de la misma manera, una buena “autoridad” es apuntada por muchos buenos“puertos”.

Para cada vértice, el método HITS produce los siguientes dos conjuntos de califica-ciones - una calificación para autoridades y otro para puertos:

HITSA(Vi) =∑

Vj∈inViHITSH(Vj)

HITSH(Vi) =∑

Vj∈outViHITSA(Vj)

En cada iteración, las calificaciones de la autoridad (o puerto) se normalizan de talmanera que sumen 1. De manera similar a PageRank, está garantizado que el algoritmoHITS converja si el grafo es aperiódico e irreducible (conexo).

Medidas basadas en rutas sobre el grafo

Las medidas basadas en rutas sobre el grafo explotan no solo la existencia de cami-nos más cortos, sino que toman en cuenta un análisis de todos los caminos más cortosque pasan por un nodo.

Caminos más cortos (“Betweenness”): Esta medida determina qué tan importantees un nodo, contando la cantidad de rutas más cortas que pasan por dicho nodo. Porejemplo, pasan dos rutas entre los nodos B y D en la figura 3.10. La matrix de rutas máscortas para este grafo, se muestran en la figura 3.11. Si se elimina el nodo C, aún quedauna ruta entre B y D; por lo tanto, C no es muy importante para conectar los nodos By D. Sin embargo, si se elimina el nodo B, todos los caminos hacia A se rompen; por lo

Page 38: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 26

FIGURA 3.10: Grafo para ilustrar el concepto de “betweenness”

FIGURA 3.11: Tabla de caminos más cortos que pasan por los nodos corres-pondientes del grafo de la figura 3.10

Page 39: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 27

tanto, B es importante en mantener el grafo conectado, es decir, es un nodo central deacuerdo a esta medida.

La centralidad de caminos más cortos está definida por la proporción de caminosmás cortos que pasan por un nodo x de acuerdo a la siguiente fórmula [6]:

BC(x) =∑

y,z 6=x,σyz 6=0

σyz(x)

σyz(3.13)

donde σyz es la cantidad de caminos más cortos entre y y z, y σyz(x) es la cantidadde dichos caminos que pasan por x.

La idea detrás de esta medida es que si una gran parte de rutas más cortas pasanpor x, entonces x es un punto importante del grafo. Si se eliminan los nodos en ordende su grado de “betweenness”, se causa muy rápidamente la disrupción del grafo.

3.5. Algoritmos de agrupamiento (Clustering) en grafos

El objetivo general de los algoritmos de agrupamiento es dividir un conjunto dedatos en grupos (o comunidades) de acuerdo al Principio fundamental de clasificación:“Objetos semejantes pertenecen a la misma clase; objetos diferentes pertenecen a clasesdistintas."

Los principales algoritmos para agrupación en grafos usados actualmente son:

Particionamiento de grafos

Agrupamiento jerárquico

• Métodos divisivos

◦ Agrupamiento basado en cortes (min-cut)

◦ Métodos espectrales

◦ Agrupamiento basado en betweenness

◦ Agrupamiento basado en caminatas aleatorias

• Métodos aglomerativos

◦ Agrupamiento basado en la modularidad

Agrupamiento basado en heurísticas (Label Propagation)

Page 40: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 28

3.6. Métricas para evaluación de ordenamientos (rankings)

Se usarán las métricas de evaluación usadas en la literatura para la evaluación deordenamientos. Específicamente, precisión a varios (k) documentos recuperados P@k.

La precisión está definida como la proporción de documentos recuperados que sonrelevantes, entre todos los documentos recuperados.

P =Cantidad de elementos relevantes recuperados

Cantidad total de elementos recuperados

o, de manera alternativa:

P =Verdaderos Positivos

Verdaderos positivos + Falsos Positivos

en algunas publicaciones relacionadas con recuperación de información, se utilizatambién la medida de “recall”, la cual se define de la siguiente manera:

R =Cantidad de elementos relevantes recuperados

cantidad total de elementos relevantes

Adicionalmente, se puede utilizar la métrica de evaluación llamada Exactitud (“Ac-curacy”), definida como:

E =Cantidad de predicciones correctasCantidad total de casos a predecir

o, de manera alternativa:

E =Verdaderos Positivos + Verdaderos Negativos

Verdaderos Positivos + Verdaderos Negativos + Falsos Positivos + Falsos Negativos

3.7. Selección del “Golden Standard”: Colección Corpus

.GOV

3.7.1. Colección de pruebas TREC

TREC (Text REtrieval Conference - Conferencias de Recuperación de Texto) es unprograma que se enfoca en la evaluación a gran escala de metodologías de recupe-ración de texto [9], [10]. TREC ha construido “benchmarks” para más de 20 diferentesproblemas en recuperación de la información, tales como recuperación de páginas web,

Page 41: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 29

de respuestas a preguntas, recuperación de voz, etc. También ha creado grandes colec-ciones de prueba, haciéndolas disponibles al público interesado.

Las áreas de investigación (o “tracks”) a las que se ha enfocado desde 1992 proveena los grupos participantes con data sets y problemas a resolver. Dependiendo del track,los problemas pueden ser preguntas, tópicos, etc.

Los tracks que se han realizado más recientemente se muestran en la tabla 3.1:

CUADRO 3.1: Tabla de corpus utilizados y tracks realizados por año

Año Corpus TrackTREC 2014 ClueWeb12 Web Track: Adhoc Task, Risk-sensitive TaskTREC 2013 ClueWeb12 Web Track: Adhoc Task, Risk-sensitive TaskTREC 2012 ClueWeb09 Web Track: Adhoc Task, diversity taskTREC 2011 ClueWeb09 Web Track: Adhoc Task, diversity taskTREC 2010 ClueWeb09 Web Track: Adhoc Task, diversity task, spam taskTREC 2009 ClueWeb09 Web Track: Adhoc Task, diversity taskTREC 2006 GOV2 Terabyte Track: Adhoc TaskTREC 2005 GOV2 Terabyte Track: Adhoc Task, Named Page Finding TaskTREC 2004 GOV2 Terabyte Track: Adhoc TaskTREC 2004 GOV Web TrackTREC 2003 GOV Web Track (“Older Web Track”)TREC 2002 GOV Web Track (“Older Web Track”)TREC 2001 WT10g Web Track (“Older Web Track”)

3.7.2. Colección .GOV

El grafo analizado corresponde al de la colección .GOV (parte de las colecciones pa-ra pruebas de TREC), que consiste en un corpus obtenido de la navegación de páginasweb con dominios .gov Estados Unidos a principios del 2002 [11]. Se detuvo la extrac-ción después de obtener aproximadamente un millón de páginas texto/html, eliminán-dose cualquier binario. Se truncaron los documentos obtenidos a 100 k (para aquelloscasos en los que aplica). En la tabla 3.2 se muestran las características de este corpus.

3.7.3. Métodos supervisados de ordenamiento: LETOR (Learning to

Rank)

Elproyecto LETOR [26] se basa en la información de los tracks del proyecto TRECdel 2003 y 2004, los cuales usan el corpus .GOV, que consiste en navegación de dominios.gov en 2002, y consta de aproximadamente un millón de documentos.

Page 42: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 30

CUADRO 3.2: Características del corpus .GOV [11]

Característica CantidadDocumentos (total) 1,247,753Texto/html 1,053,372 (tipo mime)Aplicación/PDF 131,333Texto/plano 43,754Aplicación/MSWord 13,842Aplicación/Postscript 13,842Tamaño total 19,455,030,550 b (18.1 G)Tamaño promedio documento 15,592 b (15.2 kb)Tamaño truncamiento 100 kb

La colección contiene resultados de varias consultas (“queries”) donde se indica larelevancia de cada nodo para dicha consulta. Si el nodo es relevante, se da un valorde uno, y de cero en caso contrario. Cada consulta (“query”) incluye únicamente laspáginas web (nodos) que contienen el(los) término(s) buscados, el cual consiste en unsubconjunto del grafo completo. Se incluye la relevancia para cada documento, a partirde un muestreo inicial, el cual se obtuvo a partir de un algoritmo (BM25) para ordenarlos documentos de cada “query”.

Estos datos también incluyen características de las páginas para poder hacer losanálisi supervisados, pero no se utilizaron en esta tesis, ya que no se necesita esta infor-mación.

La figura 3.12 contiene una imagen de la información contenida en LETOR: la pri-mera columna es el indicador de relevancia, la columna 2 es el id del query; las colum-nas siguientes contienen información de la página para supervisión y la última columnaes el id de la página.

Page 43: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 3. Marco Teórico 31

FIGURA 3.12: Formato de la información contenida en las tablas del pro-yecto LETOR

Page 44: Ordenamiento de Páginas Web con Hipergrafos

32

Capítulo 4

Implementación de la Solución

El proceso para la construcción de la solución propuesta consta de varias etapas:

1. Obtener grafo correspondiente al corpus a analizar

2. Implementación de código para realizar la caminata al azar de acuerdo al métodode PageRank en hipergrafos

3. Implementación de código para realizar la caminata al azar de acuerdo a otrosmétodos que servirán como comparación

4. Construcción de hipergrafos con diversos algoritmos de agrupamiento (cluste-ring) para determinar el efecto que tiene el tipo de agrupamiento en el desempeñodel método a estudiar

5. Obtener colección para benchmarking y poder comparar con un golden standard

Los lenguajes y librerías utilizadas para la implementación de la solución fueron lossiguientes:

1. Lenguaje Python (código en general)

2. Lenguaje Scala (código para programación en Spark)

3. Librería de Python Numpy (operaciones con matrices)

4. Librería de Python Scipy (matrices dispersas)

5. Librería de Python NetworkX (grafos)

6. Librería de Python igraph (grafos)

Page 45: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 33

7. Librería de Python Louvain (método de aglomeramiento “Multilevel” de Blondelet al. [5])

8. Spark (plataforma para big data)

9. Librería Mllib de Spark (Aprendizaje de Máquina “Machine Learning”)

4.1. Grafo del Corpus .GOV

El grafo analizado corresponde al de la colección .GOV que forma parte de la colec-ción de pruebas de TREC. Este grafo (ya procesado) fue obtenido del sitio de LETOR[16] por lo que no se tuvo que extraer del corpus de documentos.

El grafo descargado es de 153,359,911 b (146.2 Mb) y consta de 1,036,215 nodos y10,754,740 aristas (si se consideran dirigidas) / 10,702,813 aristas (si se consideran nodirigidas). Cada renglón del archivo consta de un par de datos: la primera columna esel id (de Microsoft) del documento fuente de la hiperliga, y la segunda columna es elid (de Microsoft) del documento destino de la hiperliga.

4.2. Algoritmos para el clustering de grafos y la construc-

ción de hipergrafos a partir de estos agrupamientos

4.2.1. Obtención de agrupamientos no traslapados de nodos

Los algoritmos de clustering utilizados para obtener los agrupamientos y la poste-rior construcción de hiperaristas, fueron los de mejor desempeño (escalabilidad, exac-titud y rapidez de ejecución) en la literatura:

1. Método de Multinivel (“Multilevel” o Louvain) de Blondel et al. [5]

2. Algoritmo de Propagación de etiquetas (“Label propagation”).

El código para la implementación de estos algoritmos de agrupamiento en grafos seimplementó en el lenguaje Python, usando la librería de Python Louvain y la de igraph.

Page 46: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 34

4.2.2. Obtención de agrupamientos traslapados de nodos a partir de

los grupos obtenidos

Con base en estos algoritmos de agrupamiento se construyeron las hiperaristas to-mando en cuenta la estructura de uniones entre los nodos haciendo que se traslapa-ran (overlap). Aquellos agrupamientos originalmente disjuntos se hicieron traslapar siexistía alguna unión (hiperliga entre las páginas web) entre sus respectivos nodos. Si elnodo destino (página destino) era apuntado por un nodo fuente de otro grupo, el nododestino se incluía en el grupo del nodo fuente, además de su propio grupo original. Deesta manera, se obtenían agrupamientos con traslape (overlapping) y se podían tenerintersecciones entre los diferentes grupos, permitiendo la construcción de hiperaristasy la respectiva caminata al azar por las hiperaristas y vértices.

4.3. Algoritmo para la caminata al azar y obtención de ei-

genvectores

La caminata al azar en grafos e hipergrafos, consiste en obtener la matriz de transi-ción entre los nodos (PageRank) y entre nodos e hiperaristas (HyperPageRank), multi-plicarlas para obtener la matriz de transición global 3.10, sumarle la matriz de transfe-rencia que une a los nodos y obtener el eigenvector dominante de la matriz resultante.Es por esto que este es un método espectral, ya que se obtiene el eigenvector de una delas matrices asociadas al grafo (en este caso, de la matriz de transición, y es por eso quecorresponde a una caminata aleatoria)

El código para la implementación de la caminata al azar en grafos e hipergrafosse implementó en el lenguaje Python, usando la librería SciPy, la cual usa matricesdispersas (formato CSR: “Compressed Sparse Row” - Fila Dispersa Comprimida) parala multiplicación de matrices de la ecuación 3.9 para grafos y de la ecuación 3.10 parahipergrafos.

Para obtener el eigenvector dominante de la matriz de transición aumentada (en laecuación 3.9) se utilizó el algoritmo del método de potencias (“Power method” Apén-dice A.3). En el correspondiente código para obtener el eigenvector dominante de lamatrices de transición, se utilizó la librería numpy para la multiplicación de matriz-vector, la cual es una multiplicación de matriz dispersa por vector denso.

El eigenvector resultante corresponde al ordenamiento de nodos en el grafo, para elcaso de HyperPageRank (HPR) y PageRank (PR).

Page 47: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 35

4.4. Validación del algoritmo de caminata al azar en hi-

pergrafos con un ejemplo corto

El algoritmo de caminata al azar en hipergrafos se validó con una prueba de con-cepto sobre un grafo de 6 nodos tomado de la literatura usando el siguiente proceso, ycomparando con cálculos manuales para validación del código.

Ejemplo ilustrativo de las etapas del proceso

4.4.1. Obtención del grafo

Se tomó un ejemplo construido artificialmente, consistente en una red de páginasweb de 6 nodos unidas entre sí por hipervínculos dirigidos.

FIGURA 4.1: Grafo web de 6 nodos donde cada nodo representa una pági-na web, unida por hiperligas entre las páginas

4.4.2. Construcción de grupos no traslapados (excluyentes) mediante

algoritmos de agrupamiento en grafos

Se obtuvieron diversos grupos de nodos de acuerdo a los algoritmos seleccionadospor su desempeño de acuerdo a la literatura revisada (Louvain y LPA) [29]. Los gruposobtenidos no se traslapan, es decir cada nodo del grafo pertenece solamente a un grupo.

Page 48: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 36

FIGURA 4.2: Hipergrafo web de 6 nodos (v1 − v6) donde cada nodo repre-senta una página web, con tres agrupamientos excluyentes (verde - e1, rojo

- e2 y azul - e3)

4.4.3. Construcción de grupos traslapados para la construcción de las

hiperaristas

A partir de los grupos obtenidos en el paso anterior, originalmente disjuntos (exclu-yentes), se hicieron traslapar si existía alguna unión (hiperliga entre las páginas web)entre sus respectivos nodos. Si el nodo destino (página destino) era apuntado por unnodo fuente de otro grupo, el nodo destino se incluía en el grupo del nodo fuente,además de su propio grupo original.

FIGURA 4.3: Hipergrafo web de 6 nodos (v1 − v6) donde cada nodo repre-senta una página web, con tres hiperaristas (verde - e1, roja - e2 y azul -

e3)

Page 49: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 37

4.4.4. Obtención de la matriz de transición

Mediante la ecuación en hipergrafos 3.10 MHG = D(v)−1HD(e)−1HT se obtuvo lamatriz de transición del grafo con clusters con traslape, MHG

La figura 4.4 muestra la matriz de incidencia del hipergrafo 4.3 y las figuras 4.5 y 4.6sus matrices diagonales inversas del grado de vértices e hiperaristas respectivamente.

FIGURA 4.4: Matriz de incidencia H del hipergrafo de la fig. 4.3

Al aplicar la ecuación en hipergrafos 3.10 MHG = D(v)−1HD(e)−1HT usando lasmatrices 4.4, 4.5, y 4.6 se obtiene la matriz de transición del hipergrafo dada por lamatriz de 4.7:

FIGURA 4.5: Matriz dia-gonal D(v)−1 con los in-versos del grado de vér-tices del hipergrafo de la

fig. 4.3

FIGURA 4.6: Matriz dia-gonal D(e)−1 con los in-versos del grado de hiper-aristas del hipergrafo de

la fig. 4.3

Page 50: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 38

FIGURA 4.7: Matriz de transición MHG del hipergrafo de la fig. 4.3 (nóteseque la suma de los elementos de las filas es igual a 1, por lo que la matriz

es estocástica por filas)

4.4.5. Algoritmo de caminata al azar y obtención de eigenvector (or-

denamientos)

Con la matriz de transición de la figura 4.7 a partir de la ecuación 3.2.1 Pt+1 =

MTPt y utilizando el método de potencias (sección 3.3), se obtiene el vector propiodominante, el cual contiene el ordenamiento de las calificaciones (“scorings”) de losnodos del grafo.

x =

0.243

0.335

0.408

0.429

−0.234−0.437

Con base en estos valores, el nodo en la posición 4 es el de mayor calificación (0.429),

seguido del nodo 3, con valor de 0.408, hasta llegar al nodo con calificación más baja(nodo 6, con calificación de -0.437).

4.5. Punto de referencia (Benchmarking) con la colección

LETOR

Para poder comparar con un punto de referencia (“’benchmark’), se compararonlos resultados obtenidos de los métodos analizados con la colección LETOR que usa

Page 51: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 39

los datos de la colección de TREC .GOV. La colección contiene resultados de variasconsultas (“queries”) donde se indica la relevancia de cada nodo para dicha consulta.Si el nodo es relevante, se da un valor de uno, y de cero en caso contrario.

Cada consulta (“query”) incluye únicamente las páginas web (nodos) que contienenel(los) término(s) buscados, el cual consiste en un subconjunto del grafo completo. Cadasubconjunto de páginas induce un grafo (cuyos nodos satisfacen el query dado) quepuede ser ordenado (ranking") usando las medidas de centralidad.

Se probaron dos formas de inducir los grafos:

1. Se generó el subgrafo, incluyendo solamente los nodos que pertenecen a la con-sulta

2. Se generó el subgrafo, incluyendo todos los nodos adyacentes a aquellos nodosque pertenecen a la consulta. (esto se realizó con el motivo de dar mayor cantidadde nodos sobre los cuales se ejecutaran los algoritmos)

Después de generar los subgrafos, inducidos por cada consulta, se aplicaron losalgoritmos de agrupamiento para los hipergrafos y se obtuvo un ordenamiento paracada una de las 4 posibilidades (Tabla 4.1).

CUADRO 4.1: Características de algoritmos con hipergrafos utilizados enel corpus

Algoritmo CaracterísticasHyperPageRank 1 (Louvain) Obtenido con el algoritmo de agrupamientos de Lou-

vain (“Multilevel”) y nodos inducidos pertenecientesal grafo

HyperPageRank 2 (LPA) Obtenido con el algoritmo de agrupamientos de LabelPropagation (“LPA”) y nodos inducidos pertenecien-tes al grafo

HyperPageRank 3 (Louvain) Obtenido con el algoritmo de agrupamientos de Lou-vain (“Multilevel”) y algunos nodos inducidos no per-tenecientes al grafo

HyperPageRank 4 (LPA) Obtenido con el algoritmo de agrupamientos de La-bel Propagation (“LPA”) y algunos nodos inducidosno pertenecientes al grafo

El ordenamiento resultante para cada uno de los 4 métodos anteriores se mide con-tra la cantidad de documentos relevantes obtenidos en el ordenamiento (“ranking”) delestándar, obteniéndose con esto una medida de precisión para la consulta.

Page 52: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 4. Implementación de la Solución 40

Se realizó el mismo proceso anterior para cada consulta, obteniéndose un valor deprecisión para cada una de las consultas, y se promediaron, obteniéndose un valor glo-bal de precisión para la colección. Estos valores obtenidos para los diferentes métodosse compararon con los obtenidos en la literatura.

Page 53: Ordenamiento de Páginas Web con Hipergrafos

41

Capítulo 5

Pruebas y Resultados

5.1. Relación entre el algoritmo PageRank e HyperPage-

Rank

Existe una fuerte correlación entre el ordenamiento obtenido con el algoritmo ob-tenido por PageRank y el obtenido con HyperPageRank. En la tabla 5.1 se muestranlas calificaciones de los primeros nodos obtenidos por cada uno de estos algoritmos. Elcoeficiente de correlación entre los dos ordenamientos es de r = 0.94, lo cual muestraque las calificaciones (“rankings”) de los nodos obtenidos por ambos algoritmos sonparecidos. Esto es un resultado hasta cierto punto inesperado, ya que los dos métodostienen diferencias significativas en cuanto a la forma de asignar calificaciones.

CUADRO 5.1: Tabla de ordenamientos PageRank e HyperPageRank (sola-mente los primeros nodos)

Nodos y su respectiva calificaciónAlgoritmo nodo 0 nodo 1 nodo 2 nodo 3 nodo 4 nodo 5PageRank 0.5220 0.6182 0.5738 0.0705 0.0783 0.0705HyperPageRank 0.3810 0.6542 0.6453 0.0530 0.0648 0.0584

5.2. Desempeño de algoritmos

5.2.1. Comparación de hipergrafos con otros algoritmos sobre grafos

En la tabla 5.2 se muestran los experimentos realizados en esta tesis, con los re-sultados de precisión a 5 y 10 documentos recuperados (P@5, P@10), MAP, Recall (R),y Exactitud (“Accuracy”). Estos resultados se obtuvieron construyendo los grafos in-ducidos con nodos pertenecientes únicamente al query respectivo (HyperPageRank 1

Page 54: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 5. Pruebas y Resultados 42

(Louvain) e HyperPageRank 2 (LPA)). Aquellos métodos en los que los grafos fueroninducidos incluyendo nodos no pertenecientes al query son HyperPageRank 3 (Lou-vain) e HyperPageRank 4 (LPA).

Los resultados obtenidos con hipergrafos se comparan con los resultados obtenidospara otros algoritmos de centralidad en grafos (PageRank, Cercanía (Closeness), Eigen-vector, HITS y Betweenness). El valor promedio de P@10 para los algoritmos basadosen hipergrafos (HyperPageRank 1- 4) es 0.1616 contra 0.1441 de aquellos basados engrafos (PageRank, Closeness, Eigenvector, HITS y Betweenness).

CUADRO 5.2: Precisión a 10 (P@10) y MAP para el grafo de la colección.GOV. con algoritmos de centralidad en grafos, comparados con hipergra-

fos

Algoritmo P@5 P@10 MAP R EHyperPageRank 3 (Louvain) 0.2165 0.1752 0.1421 0.3814 0.6586HyperPageRank 1 (Louvain) 0.2035 0.1622 0.1291 0.2985 0.8102HyperPageRank 4 (LPA) 0.1976 0.1563 0.1232 0.2991 0.6013PageRank 0.1952 0.1539 0.1208 0.2838 0.6977HyperPageRank 2 (LPA) 0.1941 0.1528 0.1197 0.3613 0.6461Eigenvector 0.1896 0.1483 0.1152 0.2745 0.7393HITS 0.1888 0.1475 0.1144 0.3102 0.5881Closeness 0.1830 0.1417 0.1086 0.2882 0.5694Betweenness 0.1704 0.1291 0.0960 0.2765 0.6105

Promedio alg. grafos 0.1854 0.1441 0.1110 0.3058 0.6332Promedio HyperPageRank 1-4 0.2029 0.1616 0.1285 0.3103 0.6888

Promedio alg. Louvain 0.2100 0.1687 0.1356 0.3395 0.7344Promedio alg. LPA 0.1958 0.1546 0.1214 0.3300 0.6237

Inducción c/pocos nodos 0.1988 0.1575 0.1244 0.3295 0.7281Inducción c/muchos nodos 0.2070 0.1658 0.1326 0.3400 0.6300

5.2.2. Comparación con los resultados de .GOV-TREC

Existen diferencias significativas entre los resultados obtenidos en la conferenciaTREC en el 2003 y en el 2004, ya que en el 2004 se obtuvieron mucho mejores resultadosque en el 2003 de acuerdo a los resultados de TREC2003 (tabla 5.3) y TREC2004 (tabla5.4).

Page 55: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 5. Pruebas y Resultados 43

Haciendo la comparación con los experimentos de esta tesis, los experimentos conHipergrafos tuvieron mejor desempeño en promedio que para TREC2003, (P@10 pro-medio = 0.1616 para hipergrafos, vs 0.0804 para TREC 2003) y en particular, ya que elmejor resultado para el 2003 fue de P@10 = 0.128 contra P@10 = 0.1752 para el mejorresultado de hipergrafos. (Tabla 5.3).

CUADRO 5.3: Precisión a 10 documentos recuperados (P@10) y MAP parala colección GOV de TREC 2003. Los resultados (P@10) son de los gruposparticipantes (columna Grupo). Se incluyen los promedios para los experi-

mentos de esta tesis. Tabla del artículo de Craswell & Hawking [10]

Algoritmo P@10 MAPcsiro 0.124 0.1543hummingbird 0.128 0.1387uamsterdam 0.098 0.1344copernic 0.098 0.1325usunderland 0.094 0.1114uglasgow 0.114 0.1336neuchatelu 0.088 0.1371microsoftasia 0.116 0.1027tsinghuau 0.106 0.1131ibmhaifa 0.122 0.1091umelbourne 0.092 0.0897meijiu 0.092 0.0698vatech 0.076 0.0848fub 0.064 0.0799irit-sig 0.072 0.0818kasetsartu 0.044 0.0660cas-ict 0.052 0.0728indianau 0.076 0.1016ajouu 0.070 0.0896uillinoisuc 0.064 0.0691lehighu 0.028 0.0343umarylandbc 0.032 0.0226saarlandu 0.000 0.0001

Promedio P@10 TREC2003 0.0804Promedio P@10 HyperPageRank 1-4 0.1616

Por otro lado, los promedios de P@10 para TREC2004 son similares a los de esteexperimento (0.1616 para HyperPageRank y 0.1672 para TREC 2004), pero en particular,hay varios resultados mejores que los obtenidos para hipergrafos; por ejemplo, el mejorresultado para 2004 de P@10 = 0.251 (tabla 5.4).

Page 56: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 5. Pruebas y Resultados 44

CUADRO 5.4: Precisión a 10 documentos recuperados (P@10) y MAP parala colección GOV de TREC 2004. Los resultados (P@10) son de los gruposparticipantes (columna Grupo). Tabla del artículo de Craswell & Hawking

[9]

Algoritmo P@10 MAPuogWebCAU150 0.249 0.179MSRAmixed1 0.251 0.178MSRC04C12 0.231 0.165humW04rdpl 0.231 0.163THUIRmix042 0.205 0.147UAmsT04MWScb 0.209 0.146ICT04CIIS1AT 0.208 0.141SJTUINCMIX5 0.189 0.129MU04web1 0.199 0.115MeijiHILw3 0.153 0.115csiroatnist 0.205 0.111mpi04web01 0.177 0.106VTOK5 0.135 0.101fdwiedf0 0.117 0.090wdf3oks0brr1 0.124 0.085LamMcm1 0.087 0.049irttil 0.029 0.018XLDBTumba01 0.011 0.003

HyperPageRank 3 (Louvain) 0.1752 0.1421HyperPageRank 1 (Louvain) 0.1622 0.1291HyperPageRank 4 (LPA) 0.1563 0.1232HyperPageRank 2 (LPA) 0.1528 0.1197

Promedio P@10 TREC2004 0.1672Promedio P@10 HyperPageRank 1-4 0.1616

Page 57: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 5. Pruebas y Resultados 45

5.2.3. Comparación con los resultados de .GOV-LETOR

Los resultados de LETOR, que usan algoritmos supervisados, son mejores a todoslos demás realizados con el corpus .GOV, ya que tienen un P@10 promedio de 0.2548,mientras que el promedio de TREC 2004 es de 0.1672, además de que casi todos losresultados individuales están por arriba de los mejores resultados de TREC 2004 (0.251)y de los obtenidos por HyperPageRank (P@10 promedio de 0.1616). (Tabla completa deresultados de LETOR en 5.5)

CUADRO 5.5: Precisión promedio (MAP) y Precisión a 1, 3, 5 y 10 docu-mentos recuperados (P@10) para la colección TD2004 del corpus .GOV,

usada en LETOR. Tabla del artículo de Qin et al [26]

Algoritmo P@1 P@3 P@5 P@10 MAPRankBoost 0.507 0.427 0.352 0.275 0.261FRank 0.493 0.378 0.333 0.262 0.239ListNet 0.360 0.360 0.307 0.256 0.223Ranking SVM 0.413 0.347 0.301 0.252 0.224Regresión 0.360 0.333 0.312 0.249 0.208AdaRank-MAP 0.413 0.369 0.328 0.249 0.219AdaRank-NDCG 0.427 0.364 0.328 0.248 0.194SVMMAP 0.293 0.302 0.291 0.247 0.205

HyperPageRank 3 (Louvain) 0.3027 0.2615 0.2165 0.1752 0.1421HyperPageRank 1 (Louvain) 0.2897 0.2485 0.2035 0.1622 0.1291HyperPageRank 4 (LPA) 0.2838 0.2426 0.1976 0.1563 0.1232HyperPageRank 2 (LPA) 0.2803 0.2391 0.1941 0.1528 0.1197

Promedio alg. supervisados 0.4083 0.3600 0.3190 0.2548 0.2216Promedio HyperPageRank 1-4 0.2891 0.2479 0.2029 0.1616 0.1285

Page 58: Ordenamiento de Páginas Web con Hipergrafos

46

Capítulo 6

Conclusiones y Trabajo Futuro

6.1. Discusión y conclusiones

Relación entre calificaciones del algoritmo PageRank e HyperPageRank

Existe una relación fuerte entre las calificaciones otorgadas por PR y HPR (correla-ción de r = 0.94 entre los scores de ambos métodos) mostrada en la tabla 5.1)

El algoritmo de agrupamiento para construir los hipergrafos afecta el resultado

Esto se muestra por los resultados obtenidos con los hipergrafos construidos con elalgoritmo de agrupamiento de Louvain “Multilevel” y el construido con el algoritmode Propagación de etiquetas (“Label propagation”), ya que ambos métodos presentandiferentes resultados: El algoritmo de Louvain (HyperPageRank 1 (Louvain) e Hyper-PageRank 3 (Louvain)) presenta mejores resultados que los correspondientes algorit-mos construidos con hipergrafos usando LPA (HyperPageRank 2 (LPA) e HyperPage-Rank 4 (LPA)): P@10 promedio = 0.1687 y 0.15455, respectivamente. (Tabla 5.2). En estetrabajo no se puede determinar específicamente cuáles sean las características de losagrupamientos que tienen efecto sobre los resultados ya que sólo se comparan dos mé-todos. Las principales diferencias entre los algoritmos utilizados es que con el métodode Louvain se obtuvieron menos grupos (1,623 grupos para el grafo completo) que conel método de LPA (14,185). Es posible que la cantidad de grupos esté afectando pero serequiere de mayor cantidad de algoritmos para validar esta hipótesis.

La forma de inducir los subgrafos afecta el resultado

Los hipergrafos con mayor cantidad de nodos tienen mejor desempeño, lo cual semuestra en los resultados de la tabla 5.2, ya que al comparar dos algoritmos que usanel mismo método para agrupar, la única diferencia está en la cantidad de nodos que

Page 59: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 6. Conclusiones y Trabajo Futuro 47

considera para su generación: los algoritmos que consideran más nodos tienen me-jor desempeño. Para Louvain con pocos nodos (sólo considera nodos incluidos en laconsulta) se tiene una P@10 de 0.1622 contra 0.1752 para el caso con más nodos (seconstruye tomando en cuenta más nodos de los contenidos en la consulta - query).

Lo mismo sucede al comparar el resultado para pocos nodos usando el algoritmode agrupamiento LPA: Para mayor cantidad de nodos, se tiene un P@10 = 0.1563 contra0.1528 para el algoritmo que usa menor cantidad de nodos.

Los algoritmos con hipergrafos tienen mejor desempeño que los ejecutados en grafos

Para poder hacer una comparación correcta entre algoritmos, es necesario usar losmismos corpus para poder hacer una mejor comparación entre métodos, ya que es difí-cil comparar el desempeño de algoritmos en corpus diferentes. Es debido a este hecho,que se realizaron experimentos con otros algoritmos de centralidad sobre grafos sobreel mismo corpus y condiciones de hardware y con el mismo software. Con base en estosresultados (Tabla 5.2), donde se obtiene una P@10 promedio de 0.1616 para HyperPa-geRank (1-4) y de 0.2716 para los demás algoritmos probados (PageRank, Closeness,Eigenvector, HITS, Betweenness), se puede concluir que los algoritmos construidos so-bre hipergrafos tienen mejor desempeño que aquellos construidos en grafos.

Los métodos supervisados tienen mejor desempeño que los métodos con grafos ohipergrafos

Los resultados de LETOR, que usan algoritmos supervisados, son mejores a todoslos demás realizados con el corpus .GOV, ya que tienen un P@10 promedio de 0.2548,mientras que el promedio de HyperPageRank es de P@10 promedio de 0.1616 y el deTREC 2004 es de 0.1672. Además, en casi todos los resultados individuales los resulta-dos supervisados están por arriba de los mejores resultados de TREC 2004 (P@10 másalta = 0.251) y de los obtenidos por HyperPageRank (P@10 más alta = 0.1752). (Resul-tados de LETOR en la tabla 5.5)

6.2. Trabajo futuro

El trabajo futuro consistirá en completar el trabajo realizado actualmente, pero sobreun corpus completo, no sólo sobre el grafo; de esta manera, se podrán realizar experi-mentos sobre el mismo corpus, sin la necesidad de comparar con resultados obtenidos

Page 60: Ordenamiento de Páginas Web con Hipergrafos

Capítulo 6. Conclusiones y Trabajo Futuro 48

de la literatura. Se puede implementar un “baseline” en el corpus (por ejemplo, BM25)y comparar todos los demás experimentos en este mismo corpus. Entre las plataformasexistentes para poder realizar este tipo de experimentos, se encuentra “Terrier” [24], yel software para experimentación “Galago”, parte del proyecto Lemur para experimen-tación en Recuperación de la Información [17].

Con el código existente, no se pueden ejecutar varios de los algoritmos en grandesgrafos debido al problema de escalamiento, es decir, al aumentar la cantidad de nodos,el código tarda demasiado en ejcutarse (el código actual se corrió en una ocasión du-rante 25 días sin obtrenerse resultado). El código deberá escribirse en Scala para poderejecutarse en un corpus más grande como el de .GOV2 con 25 millones de nodos.

Otra vertiente a futuro es usar más algoritmos de agrupamiento para relacionar lascaracterísticas de estos agrupamientos con el desempeño del algoritmo correspondien-te.

Page 61: Ordenamiento de Páginas Web con Hipergrafos

49

Bibliografía

[1] A. Bellaachia y M. Al-Dhelaan. Hg-rank: a hypergraph-based keyphrase extrac-tion for short documents in dynamic genre. Making Sense of Microposts (# Micro-posts2014), 2014.

[2] A. Bellaachia y M. Al-Dhelaan. Random walks in hypergraph. En Proceedings ofthe 2013 international conference on applied mathematics and computational method,páginas 187-194, 2013.

[3] C. Berge. Hypergraphs: combinatorics of finite sets, volumen 45 de North-Holland mat-hematical library. Elsevier Science Publishers, 1989.

[4] K. Berlt, E. S. De Moura, A. L. d. Costa Carvalho, M. Cristo, N. Ziviani y T.Couto. A hypergraph model for computing page reputation on web collections.En SBBD, páginas 35-49, 2007.

[5] V. D. Blondel, J.-L. Guillaume, R. Lambiotte y E. Lefebvre. Fast unfolding of com-munities in large networks. Journal of statistical mechanics: theory and experiment,2008(10):P10008, 2008.

[6] P. Boldi y S. Vigna. Axioms for centrality. Internet Mathematics, 10(3-4):222-262,2014.

[7] A. Bretto. Hypergraph theory. Springer, 2013.

[8] J. Bu, S. Tan, C. Chen, C. Wang, H. Wu, L. Zhang y X. He. Music recommen-dation by unified hypergraph: combining social media information and musiccontent. En Proceedings of the 18th ACM international conference on Multimedia, pá-ginas 391-400. ACM, 2010.

[9] N. Craswell y D. Hawking. Overview of the trec 2004 web track. En TREC, volu-men 3, 12th, 2004.

[10] N. Craswell, D. Hawking, R. Wilkinson y M. Wu. Overview of the trec 2003 webtrack. En TREC, volumen 3, 12th, 2003.

[11] Descripción del corpus .gov (colección de trec). http://ir.dcs.gla.ac.uk/test_collections/govinfo.html, 2002. Visitada: 2016-AGO-06.

Page 62: Ordenamiento de Páginas Web con Hipergrafos

BIBLIOGRAFÍA 50

[12] R. Diestel. Graph theory {graduate texts in mathematics; 173}. Springer-Verlag Berliny Heidelberg GmbH & amp, 2000.

[13] M. Girvan y M. E. Newman. Community structure in social and biological net-works. Proceedings of the national academy of sciences, 99(12):7821-7826, 2002.

[14] A. Hulth. Improved automatic keyword extraction given more linguistic know-ledge. En Proceedings of the 2003 conference on Empirical methods in natural languageprocessing, páginas 216-223. Association for Computational Linguistics, 2003.

[15] S. Jouili y S. Tabbone. A hypergraph-based model for graph clustering: applica-tion to image indexing. En International Conference on Computer Analysis of Imagesand Patterns, páginas 360-368. Springer, 2009.

[16] Liga del grafo del corpus .gov (proyecto letor). http://research.microsoft.com/en-us/um/beijing/projects/letor/LETOR3.0/links_info.

zip, 2003. Visitada: 2016-AGO-06.

[17] Liga del proyecto galago para experimentos en recuperación de la información(proyecto lemur). https://sourceforge.net/p/lemur/wiki/Galago,2011. Visitada: 2016-AGO-06.

[18] H. Liu, P. Le Pendu, R. Jin y D. Dou. A hypergraph-based method for discoveringsemantically associated itemsets. En 2011 IEEE 11th International Conference onData Mining, páginas 398-406. IEEE, 2011.

[19] L. Lovász. Random walks on graphs: a survey. Combinatorics, Paul erdos is eighty,2(1):1-46, 1993.

[20] R. Mihalcea y D. Radev. Graph-based natural language processing and informationretrieval. Cambridge University Press, 2011.

[21] R. Mihalcea y P. Tarau. Textrank: bringing order into texts. En Proceedings of theConference on Empirical Methods in Natural Language Processing, 404–411. Associa-tion for Computational Linguistics, 2004.

[22] M. E. Newman y M. Girvan. Finding and evaluating community structure in net-works. Physical review E, 69(2):026113, 2004.

[23] G. K. Orman y V. Labatut. A comparison of community detection algorithms onartificial networks. En International Conference on Discovery Science, páginas 242-256.Springer, 2009.

Page 63: Ordenamiento de Páginas Web con Hipergrafos

BIBLIOGRAFÍA 51

[24] I. Ounis, G. Amati, V. Plachouras, B. He, C. Macdonald y C. Lioma. Terrier: AHigh Performance and Scalable Information Retrieval Platform. En Proceedings ofACM SIGIR’06 Workshop on Open Source Information Retrieval (OSIR 2006), Seattle,Washington, USA, 2006.

[25] L. Page, S. Brin, R. Motwani y T. Winograd. The pagerank citation ranking: brin-ging order to the web. 1998.

[26] T. Qin, T.-Y. Liu, J. Xu y H. Li. Letor: a benchmark collection for research on lear-ning to rank for information retrieval. Information Retrieval, 13(4):346-374, 2010.

[27] Y. Saad. Numerical methods for large eigenvalue problems, volumen 158. SIAM, 1992.

[28] H.-K. Tan, C.-W. Ngo y X. Wu. Modeling video hyperlinks with hypergraph forweb video reranking. En Proceedings of the 16th ACM international conference onMultimedia, páginas 659-662. ACM, 2008.

[29] Z. Yang, R. Algesheimer y C. J. Tessone. A comparative analysis of communitydetection algorithms on artificial networks. Scientific Reports, 6, 2016.

[30] D. Zhou, J. Huang y B. Schölkopf. Learning with hypergraphs: clustering, clas-sification, and embedding. En Advances in neural information processing systems,páginas 1601-1608, 2006.

Page 64: Ordenamiento de Páginas Web con Hipergrafos

52

Apéndice A

Código utilizado para la programaciónde los algoritmos

A.1. Código para ejecutar el algoritmo PageRank en el

lenguaje Scala usando Apache Spark

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

import org.apache.spark.graphx._

import org.apache.spark.rdd.RDD

object prszGOV {

private var edgesInputPath: String = "/mnt/idms/home/carlos/data/ \

gov/links_info.txt"

private var outputPath: String = "/mnt/idms/home/carlos/code/ \

08prsparGOV/res/resPR-GOV.txt"

def main(args: Array[String]): Unit = {

val conf = new SparkConf()

.setMaster("local[12]")

.setAppName("graph")

val sc = new SparkContext(conf)

Page 65: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 53

//val articles : RDD[String] = sc.textFile(inputFile1)

val links: RDD[String] = sc.textFile(edgesInputPath)

//articles.take(5).foreach(println)

// links.take(5).foreach(println)

val edges = links.map {

line => val fields = line.split(’\t’)

Edge(fields(0).toLong, fields(1).toLong, 0)

}

// edges.take(5).foreach(println(_))

val graph = Graph.fromEdges(edges, "")

println("vertices:" + graph.numVertices)

println("edges:" + graph.numEdges)

println("triplets:", graph.triplets.count)

//graph.triplets.take(5).foreach(println(_))

val ranks = graph.pageRank(0.001)

.vertices

.sortBy(_._2, ascending = false)

ranks.saveAsTextFile(outputPath)

//ranks.take(5).foreach(println(_))

} // end main

} // end principal object

Page 66: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 54

A.2. Código para ejecutar el algoritmo Label Propagation

en el lenguaje Scala usando Apache Spark

import org.apache.spark.{SparkConf, SparkContext}

import org.apache.spark.graphx._

import org.apache.spark.graphx.lib

import org.apache.spark.graphx.lib.LabelPropagation

// To make some of the examples work we will also need RDD

object test06szGOV {

private var inputPath: String = "/mnt/idms/home/carlos/data/gov/ \

links_info.txt"

private var outputPath: String = "/mnt/idms/home/carlos/code/ \

08prsparGOV/data/resLBLGOV.txt"

def main(args: Array[String]): Unit = {

//val conf = new SparkConf().setMaster("local[4]").setAppName( \

"graph")

val conf = new SparkConf().setMaster("local[60]").setAppName( \

"graph")

val sc = new SparkContext(conf)

val webGraph = GraphLoader.edgeListFile(sc, inputPath)

//webGraph.edges.take(10).foreach(println)

//webGraph.triplets.take(10).foreach(println)

val groups = LabelPropagation.run(webGraph, 25).vertices

groups.saveAsTextFile(outputPath)

/*

val top = ranks

Page 67: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 55

.sortBy(_._2, true).take(50)

.foreach(println)

*/

} // end main

} // end principal object

A.3. Código para ejecutar el algoritmo de “Método de Po-

tencias” (“Power Method”) para obtener el eigenvec-

tor dominante de una matriz en el lenguaje Python

usando las librerías de Python Scipy y Python Numpy

# IN01: A = Transition Matrix (numpy matrix)

# IN02: v = initial prob distribution Vector (numpy matrix)

# OUT01: eigval = dominating eigenvalue (float)

# OUT02: v = corresp. eigenvector (numpy matrix)

def iteration(A, v):

MAX_ITER = 100 # works ok for simple cases of PageRank

#MAX_ITER = 10000

EPS = 1.0e-6 # works ok for simple cases of PageRank

#EPS = 1.0e-12

for i in range(MAX_ITER):

# guardamos el vector anterior

vOld = v.copy()

# calculamos el vector nuevo

z = np.dot(A, v)

# print("z", z)

# calculamos su magnitud

Page 68: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 56

zMag = math.sqrt(np.dot(z.T, z))

# print("zMag", zMag)

# dividimos vector entre la norma para normalizar

v = z / zMag

if np.dot(vOld.T, v) < 0.0:

sign = -1.0

v = -v

else:

sign = 1.0

# Condición de terminación

vecDif = vOld - v

if math.sqrt(np.dot(vecDif.T, vecDif)) < EPS:

break

print("num iters = ", i)

eigVal = sign * zMag

# Another way to get eigVal

# eigValAnother = np.dot(v.T, np.dot(A, v))

# print("eigValAnother = ", eigValAnother)

# eigVec = v

return eigVal, v

A.4. Código para procesar la colección de LETOR y poder

inducir los grafos a partir de los queries dados en

LETOR

#!/usr/bin/env python

# -*- coding: utf-8 -*-

""""""

Page 69: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 57

#XXXXXXXXX-BEGIN: REQUIREMENTS & SPECS

#from __future__ import print_function # to run in python2 & 3

import os.path

import sys

import struct # Packing and unpacking of heterogeneous binary data

#import array

#import math

#import networkx as nx # graph library

import numpy as np

#import matplotlib.pyplot as plt

#import community # for community detection to form hypergraphs

import operator # for helping sort a dictionary comfortably

#from scipy.sparse import *

import pandas as pd

# opt

import pprint

import time

# for running the other .py file

import subprocess

#XXXXXXXXX-END: REQUIREMENTS & SPECS

#XXXXXXXXX-BEGIN: FUNCTIONS

# assign new consecutive numbers for an incoming list

# IN: list of nodes

# OUT: <dictStartZeroOld> dictionary with NEW id as key and OLD id as

# value. NEW id starts at 0

def enumerateCLM(listaNodes, start = 0):

Page 70: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 58

#make sure they are unique

listaUniq = list(set(listaNodes))

dictStartZeroOld = {}

n = start

for item in listaUniq:

dictStartZeroOld.update({n: item})

n +=1

return dictStartZeroOld

# assign new consecutive numbers for an incoming list

# IN: list of nodes

# OUT: <dictStartZero> dictionary with OLD id as key and NEW id as

# value (reversed). NEW id starts at 0

def enumerateReverseCLM(listaNodes, start = 0):

#make sure they are unique

listaUniq = list(set(listaNodes))

dictStartZero = {}

n = start

for item in listaUniq:

dictStartZero.update({item: n})

n +=1

return dictStartZero

# takes a list of 2-tuples (corresponding to directed graph) and

# renumbers the node so they are consecutive, starting from 0

# IN01: lista1: unique nodes before renumbering

# IN02: lista2: list of 2-tuples (corresponding to directed graph)

# OUT: listNew: list of 2-tuples (corresponding to directed graph) - new

def renumbering(listaNodes, listaTuples):

listNew = []

Page 71: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 59

dictStartZero = enumerateCLM(listaNodes)

for item in listaTuples:

print "item in listaTuples:", item

newTuple1 = dictStartZero[item[0]]

newTuple2 = dictStartZero[item[1]]

listNew.append((newTuple1, newTuple2))

return (listNew)

# version 2: previous version does not work with CSR

# takes a list of 2-tuples (corresponding to directed graph) and

# renumbers the node so they are consecutive, starting from 0

# in this, we also return the dictionary of equivalences dictEquivNewOld

# between NEW id and OLD id

def renumbering2(listaTuples):

# get all unique nodes from tuple list

flatList = [item for sublist in listaTuples

for item in sublist]

uniqNodes = list(set(flatList))

listNew = []

dictStartZero = enumerateReverseCLM(uniqNodes)

dictEquivNewOld = enumerateCLM(uniqNodes)

for item in listaTuples:

#print "item in listaTuples:", item

newTuple1 = dictStartZero[item[0]]

newTuple2 = dictStartZero[item[1]]

listNew.append((newTuple1, newTuple2))

return listNew, dictEquivNewOld

# takes a list of 2-tuples (each number corresponding to a node

# IN01: lista1: unique nodes before renumbering

# IN02: dictionary wit equivalences

Page 72: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 60

# OUT: listNew: list of 2-tuples (corresponding to new dict)

def renumbering3(listaTuple, equivalenceDict):

listNew = []

for item in listaTuple:

print "item in listaTuples:", item

oldTuple1 = equivalenceDict[item[0]]

oldTuple2 = equivalenceDict[item[1]]

listNew.append((oldTuple1, oldTuple2))

return (listNew)

# toma lista de "cosas" (lista ([key, val]), etc.)

# en este caso, lista de listas: [[1, 2], [3, 4], ...]

# guarda una "cosa" por linea

# Version para cosas de mas de 1 elemento (p.ej lista ([key, val]), etc.)

# outputs to tab-separated file,(input for BigCLAM):

# 1\t2

# 3\t4

def escribir_texto(listaL, fp):

# type: (object, object) -> object

separator = " "

for item in listaL:

item = separator.join(str(x) for x in item) + "\n"

fp.write(item)

# Reads text file

# File format: a 2-column list of numbers, separated by tab/space

def leer_texto(fp):

tmpFull = []

# procesamiento de archivo de entrada completo

for line in fp:

tmp = line.split()

Page 73: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 61

#ok print tmp

tmpFull.append((int(tmp[0]), int(tmp[1])))

# returns a list of tuples

return tmpFull

# IN: a 4-column list of numbers, separated by space

# 63 0.095405666519 28 0.0208098007729

# 91 0.095405666519 141 0.0177681973081

# 119 0.095405666519 69 0.0176002992138

def leer_texto2(fp):

tmpFull = []

# procesamiento de archivo de entrada completo

for line in fp:

tmp = line.split()

#ok print tmp

tmpFull.append((int(tmp[0]), int(tmp[2])))

# returns top 20 nodes from each method

return tmpFull[:20]

# Abre archivos entrada/salida / Regresa: apuntadores a archivos

# 2015FEB21: ya no se ponen parámetros en línea de comandos porque

# ya hay muchos archivos que leer - sólo el del archivo a procesar

# file_in01: archivo en raw text a procesar

# file_out01: archivo de salida ya procesado

def abrir_archivos():

# print sys.argv # 0: nombre de programa 1: nombre de archivo

try:

# Local files

# no blank lines at the end of file

#filename_IN01 = "data/facebook_combined.txt" # este sí cambia

#filename_IN01 = "data/facebook_combined_small.txt"

#filename_IN01 = "data/smallnet.txt"

#filename_IN01 = "data/smallnet3.txt"

Page 74: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 62

#filename_IN01 = "data/gov2500.txt"

#filename_IN01 = "data/gov2500-small.txt"

# Server files

#filename_IN01 = "../../data/smallnet3.txt"

#filename_IN01 = "../../data/gov2/gov2500.txt"

#filename_IN01 = "../../data/gov2/IvtLinks.txt"

# GOV data is here:

#filename_IN01 = "/mnt/idms/home/carlos/data/gov/links_info.txt"

fpIN01 = open(filename_IN01, ’r’)

# outfile for Cytoscape visualization

#filename_IN02 = "../../data/smallgrp.txt"

#filename_IN02 = "data/smallgrp.txt"

filename_IN02 = "data/labelprop/res_full.txt"

fpIN02 = open(filename_IN02, ’r’)

filename_OUT01 = "res/sortRanks.txt"

#filename_OUT01 = "../../res/sortRanks.txt"

fpOUT01 = open(filename_OUT01, ’w’)

except IOError as e:

print "Error de E/S ({0}): {1}".format(e.errno, e.strerror)

sys.exit()

# regresa apuntadores a archivos

return fpIN01, fpIN02, fpOUT01

def abrir_archivos2():

# print sys.argv # 0: nombre de programa 1: nombre de archivo

try:

# Local files

# no blank lines at the end of file

#filename_IN01 = "data/facebook_combined.txt" # este sí cambia

#filename_IN01 = "data/facebook_combined_small.txt"

#filename_IN01 = "data/smallnet.txt"

#filename_IN01 = "data/smallnet3.txt"

Page 75: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 63

#filename_IN01 = "data/gov2500.txt"

#filename_IN01 = "data/gov2500-small.txt"

# GOV data is here:

filename_IN01 = "../../../data/links_info.txt"

# Server files

#filename_IN01 = "../../data/smallnet3.txt"

#filename_IN01 = "../../data/gov2/gov2500.txt"

#filename_IN01 = "../../data/gov2/IvtLinks.txt"

# GOV data is here:

#filename_IN01 = "/mnt/idms/home/carlos/data/gov/links_info.txt"

fpIN01 = open(filename_IN01, ’r’)

# output file from HPR process (top nodes)

# is input file for this process (to look for the nodes that

# are relevant)

filename_IN02 = "res/sortRanks.txt"

fpIN02 = open(filename_IN02, ’r’)

filename_OUT01 = "data/ind_graph.txt"

#filename_OUT01 = "../../res/sortRanks.txt"

fpOUT01 = open(filename_OUT01, ’w’)

except IOError as e:

print "Error de E/S ({0}): {1}".format(e.errno, e.strerror)

sys.exit()

# regresa apuntadores a archivos

#return fpIN01, fpOUT01

return fpIN01, fpIN02, fpOUT01

def main():

#XXXXXXXXXXXXXXX BEG: FILE & GRAPH READING XXXXXXXXXXXXXXX

Page 76: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 64

’’’

# Read the network to make the hypergraphs

# inFilePointer01 is ptr (read) to network file

# inFilePointer02 is ptr (read) to groups file

#inFilePointer01, \

#inFilePointer02, \

#outFilePointer01 \

= abrir_archivos()

’’’

#inFilePointer01, outFilePointer01 = abrir_archivos2()

inFilePointer01, inFilePointer02, outFilePointer01 = abrir_archivos2()

edgeList = leer_texto(inFilePointer01)

print "\nEdge/Graph Info"

print "edgeList (data read, first 10):"

pprint.pprint(edgeList[:10])

# LETOR FILE

# path defines the file for the relevance of each node per query

# path2 is the equivalence between the Id of the document (nodes) in

# the graph and the name as named by Miscrosoft

# CIC Path

#path = "/ul/exer/letor/Gov/Feature_null/2004_td_dataset/Fold1/test.txt"

#path2 = "/ul/exer/letor/RefTable.txt"

# Opteron Path

path = "/home/clm/Documents/letor/Gov/Feature_null/2004_td_dataset/Fold1/test.txt"

path2 = "/home/clm/Documents/letor/RefTable.txt"

# Sztaki Path:

#path = "/mnt/idms/home/carlos/code/08prsparGOV/data/letor/Fold1/test.txt"

#path2 = "/mnt/idms/home/carlos/code/08prsparGOV/data/letor/RefTable.txt"

df = pd.read_csv(path, sep=" ", header=None)

#n [18]: df[0:2]

Page 77: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 65

# 0 1 2 3 4 5 6 7 8 \

#0 1 qid:WT04-170 1:50 2:6 3:2 4:0 5:58 6:8.356254 7:19.670941

#1 1 qid:WT04-170 1:22 2:4 3:2 4:0 5:28 6:8.356254 7:19.670941

df.iloc[:2, [0, 68]] # col 0 = relevance, col 68 = doc-id

df2 = pd.read_csv(path2, sep="\t", header=None, skiprows=1)

#In [19]: df2[0:2]

# 0 1

#0 G00-00-0000000 0

#1 G00-00-0008511 1

’’’ # ok but in two steps

#join the 2 dfs:

dfres = df.merge(df2, left_on=68, right_on=0, how=’left’)

#In [20]: dfres[:2]

# 0_x 1_x 2 3 4 5 6 7 8 \

#0 1 qid:WT04-170 1:50 2:6 3:2 4:0 5:58 6:8.356254 7:19.670941

#1 1 qid:WT04-170 1:22 2:4 3:2 4:0 5:28 6:8.356254 7:19.670941

#...

# 65 66 67 68 0_y 1_y

#0 64:-2.18467 #docid = G06-90-0596202 G06-90-0596202 164948

#1 64:-3.40075 #docid = G07-38-1931142 G07-38-1931142 191876

dfres.iloc[:2, [0, 1, 70]]

# 0_x 1_x 1_y

#0 1 qid:WT04-170 164948

#1 1 qid:WT04-170 191876

’’’

#shorter (in one step):

dfres = df.merge(df2, left_on=68, right_on=0, how=’left’).iloc[:, [0, 1, 70]]

#path3 = "/ul/exer/letor/res/ref2.txt"

#dfres.to_csv(path3, sep=" ", header=False, index=False)

# This dataframe stores the catalog [Old node id , relevance]

Page 78: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 66

OldIdRelevance = dfres.loc[:,[’1_y’, ’0_x’]]

print "OldIdRelevance"

pprint.pprint(OldIdRelevance.head())

print "OldIdRelevance", len(OldIdRelevance)

’’’ OK: #EXPLORACION DATOS

pd.pivot_table(dfres, index=["1_x"], values=["1_y"], aggfunc=len)

# 1_y

#1_x

#qid:WT04-170 1000

#qid:WT04-176 1000

#qid:WT04-177 1000

dfres.loc[:, "1_x"].drop_duplicates().values.tolist()

#[’qid:WT04-170’,

#’qid:WT04-176’,

#’qid:WT04-177’,

#’qid:WT04-178’,

#’qid:WT04-185’,

’’’

#para rápido lista de nodos que conforman un query

lista = dfres.values.tolist()

listaNodosQuery = []

for item in lista:

if item[1] == "qid:WT04-170":

listaNodosQuery.append(item[2])

print "len listaNodosQuery: ", len(listaNodosQuery)

#inducir el grafo con lista de 1000 del query

#get the full graph

#filter only pairs that contain BOTH items in list2

graph_induced = []

for item in edgeList:

Page 79: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 67

# ok, strictly speaking as we want all nodes in the query list

if ((item[0] in listaNodosQuery) and (item[1] in listaNodosQuery)):

#however, we could get away with using some not in the list

#if ((item[0] in listaNodosQuery) or (item[1] in listaNodosQuery)):

graph_induced.append(item)

print "\nInduced Graph Info"

print "Induced edgeList (data read, first 10):"

pprint.pprint(graph_induced[:10])

print "len induced graph:", len(graph_induced)

# renombrar nodos para que tengan numeración del 0 en adelante

# numeración consecutiva

’’’ #test: ok

listaNodosQuery = [23, 67, 2]

graph_induced = [(23, 67), (23, 2), (67, 2), (1, 1)]

graph_induced = [(23, 67), (23, 2), (67, 2)]

’’’

# this renumbering does not work for the CSR matrix:

# it leaves higher numbering than nodes, however it is correct

# because we need to know WHICH nodes are relevant

# However, we need to renumber the nodes to run the algorithm and

# we will re-code the node numbers, and THEN

# decode back again to know the relevant nodes

#graph_induced_renum = renumbering(listaNodosQuery, graph_induced)

# new renumbering

graph_induced_renum, dictEquivNewOld = renumbering2(graph_induced)

print "graph_induced_renum:"

pprint.pprint(graph_induced_renum[:10])

pprint.pprint(graph_induced_renum[-10:])

escribir_texto(graph_induced_renum, outFilePointer01)

Page 80: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 68

print "dictEquivNewOld:"

pprint.pprint(dictEquivNewOld.items()[:10])

pprint.pprint(dictEquivNewOld.items()[-10:])

print "dictEquivNewOld- length:", len(dictEquivNewOld)

outFilePointer01.close()

# calling process to run hpr

subprocess.call("./comnx07-GOV.py")

# read results file (ranks) with new node Ids

# I am reading the nodes from 2 algorithms, first: HPR, second: PR

top20LNew = leer_texto2(inFilePointer02)

print "top20LNew Id"

pprint.pprint(top20LNew[:10])

pprint.pprint(top20LNew[-10:])

print len(top20LNew)

# need to convert back to old node Id

# do sql query with pandas

catalogNewOld = pd.DataFrame(dictEquivNewOld.items())

print "catalogNewOld"

pprint.pprint(catalogNewOld)

top20LOld = renumbering3(top20LNew, dictEquivNewOld)

print "top20LOld Id"

pprint.pprint(top20LOld[:10])

pprint.pprint(top20LOld[-10:])

HGTopnodes = [operator.itemgetter(0)(item) for item in top20LOld]

print "HGTopnodes"

pprint.pprint(HGTopnodes[:10])

pprint.pprint(HGTopnodes[-10:])

print "HGTopnodes- length:", len(HGTopnodes)

GTopnodes = [operator.itemgetter(1)(item) for item in top20LOld]

Page 81: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 69

print "GTopnodes"

pprint.pprint(GTopnodes[:10])

pprint.pprint(GTopnodes[-10:])

print "GTopnodes- length:", len(GTopnodes)

# convert to DF to make the match

HGTopnodesDF = pd.DataFrame(HGTopnodes)

pprint.pprint(HGTopnodesDF)

GTopnodesDF = pd.DataFrame(GTopnodes)

# then look for them in the results in OldIdRelevance list

# OldIdRelevance [Old node id , relevance]

HGTopScored = HGTopnodesDF.merge(OldIdRelevance, left_on=0, \

right_on="1_y", how=’left’)

pprint.pprint(HGTopScored)

GTopScored = GTopnodesDF.merge(OldIdRelevance, left_on=0, \

right_on="1_y", how=’left’)

pprint.pprint(GTopScored)

# no results, so manually

inFilePointer01.close()

inFilePointer02.close()

if __name__ == ’__main__’:

main()

A.5. Código para procesar las matrices y realizar camina-

ta aleatoria - sólo el main del código

Page 82: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 70

def main():

#XXXXXXXXXXXXXXX BEG: FILE & GRAPH READING XXXXXXXXXXXXXXX

# Read the network to make the hypergraphs

# inFilePointer01 is ptr (read) to network file

# inFilePointer02 is ptr (read) to groups file

# outFilePointer01 is ptr (write) for ranks results

inFilePointer01, \

inFilePointer02, \

outFilePointer01 \

= abrir_archivos()

# This is for automatic dtection of groups with NX

# NOTE: for the Klein example, the graph needs to be directed

’’’

gfb = nx.read_edgelist("data/facebook_combined.txt",

create_using=nx.Graph(),

nodetype=int

)

gfb = nx.read_edgelist("data/smallnet.txt",

create_using=nx.Graph(),

nodetype=int

)

’’’

’’’

# Use DiGraph for directed graph

gfb = nx.read_edgelist("data/smallnet.txt",

create_using=nx.DiGraph(),

nodetype=int

)

Page 83: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 71

gfb = nx.read_edgelist("data/facebook_combined_small.txt",

create_using=nx.Graph(),

nodetype=int

)

’’’

t0 = time.time()

print "\n--Reading matrix from file"

# Network reading from file (necessary for automatic hg overlap)

edgeList = leer_texto(inFilePointer01)

print "\nEdge/Graph Info"

print "edgeList (data read, first 10):"

pprint.pprint(edgeList[:10])

#gfb = nx.DiGraph()

gfb = ig.Graph(directed = True)

#gfb.add_edges_from(edgeList)

print "first gfb.nodes", gfb.nodes()[:10]

print "first gfb.edges", gfb.edges()[:10]

print nx.info(gfb)

’’’

first gfb.nodes [0, 1, 2, 3, 4, 5]

first gfb.edges [(0, 3), (1, 2), (2, 1), (3, 2), (4, 2), (5, 0)]

Name:

Type: DiGraph

Number of nodes: 6

Number of edges: 6

Average in degree: 1.0000

Average out degree: 1.0000

0.00272798538208

communities articially created (read from file)

Page 84: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 72

’’’

t1 = time.time(); tot_t = t1 - t0; print tot_t

#XXXXXXXXXXXXXXX END: FILE & GRAPH READING XXXXXXXXXXXXXXX

#XXXXXXXXXXXXXXX BEG: COMMUNITY STUFF XXXXXXXXXXXXXXX

’’’

print "\n--Community creation"

# community Graph

def detectComm(ingraph, layout):

parts = community.best_partition(ingraph)

values = [parts.get(node) for node in ingraph.nodes()]

plt.axis("off")

nx.draw_networkx(ingraph, pos=layout, cmap=plt.get_cmap("jet"),

node_color=values,

node_size=35,

with_labels=False

)

plt.show()

# drawing of communities disabled for PR code

#okButDisabled: detectComm(gfb, None)

’’’

# Automatic community detection:

# CAREFUL with incompatibilities:

# 1) fb is undirected / Klein is directed

# 2) for fb we generate w/modularity / for Klein, read file

# NOTE: This method only works for non-directed graphs, so we need to

# convert to a non-directed graph before processing

# For community detection I consider it is not important (validate)

Page 85: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 73

gfb4Comms = gfb.to_undirected() # duplicating just for community detect

# DISABLE IF reading COMMUNITIES from outside (such as LabelProp)

’’’

’’’

parts = community.best_partition(gfb4Comms)

# parts is a dictionary having pairs of node-community

# print type(parts)

#original automatic community detection:

partsList = parts.items() # create a new list var to manipulate

print "communities automatically detected\n"

# ENABLE IF reading COMMUNITIES from outside (such as LabelProp)

’’’

# BEG: DISABLE HERE (Manual reading of node-Community file)

print "communities articially created (read from file)\n"

partsList = leer_texto4(inFilePointer02)

# END: DISABLE HERE

’’’

print "\nCommunity Info"

# partsList is a list of 2-tuples, having pairs of (node, community)

# [(0, 0), (1, 0), (2, 0), (3, 0), ..., (4036, 6), (4037, 6), (4038, 6)]

#ok_first10:

print "first partsList "

pprint.pprint(partsList[:10])

#ok_all_items: pprint.pprint(partsList)

#ok_last10:

print "last partsList "

pprint.pprint(partsList[-10:])

’’’

(node, community)

first partsList

[(672890, 145130),

(512760, 8415),

Page 86: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 74

(985335, 260306),

(213045, 817299),

...

last partsList

[(1005289, 39144),

(454459, 1741),

(549549, 106303),

(13114, 55681),

...

’’’

# send node-comm values to file

#escribir_texto(partsList, inFilePointer01)

#XXXXXXXXXXXXXXX END: COMM STUFF XXXXXXXXXXXXXXX

’’’

’’’

#XXXXXXXXXXXXXXX BEG: HYPERG STUFF XXXXXXXXXXXXXXX

# Construct new overlapping hyperedges from non-overlapping ones

# get new edge-community

# edgeList = [[0, 0], [1, 2], [2, 1], [3, 0], [3, 1], [4, 1], \

# [4, 3], [4, 5], [5, 1], [5, 4]]

# partsList = [[0, 0], [1, 1], [2, 2], [3, 0], [4, 1], [5, 1]]

#ok for adjacency-list format:

# x = newEdgeComm(edgeList, partsList) # send edge list & old comm list

#ok: print "x", x

# This returns one list of lists with all node-comm pairs: (overlapping)

# send edge list & old comm list

overlapComms = newEdgeComm3(edgeList, partsList)

#ok print all: print "overlapComms", overlapComms

print "overlapComms[10]", overlapComms[:10]

print "len(overlapComms)", len(overlapComms)

Page 87: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 75

# OUT: overlapComms[10] [(672890, 145130), (512760, 8415),

# Var reassignment to avoid disruption in the downstream code

partsList = overlapComms

#XXXXXXXXXXXXXXX END: HYPERG STUFF XXXXXXXXXXXXXXX

#XXXXXXXXXXXXXXX BEG: MATRIX STUFF FOR HG XXXXXXXXXXXXXXX

# Send only the values of commununities to get the list of unique communit.

commVals = [operator.itemgetter(1)(item) for item in partsList]

uniqCommL = getUniqueComm2(commVals)

lenUComL = len(uniqCommL)

print "\nuniqCommL, lenUComL", uniqCommL[:5], lenUComL

# send only the values of edges to get the list of unique edges.

edgeVals = [operator.itemgetter(0)(item) for item in partsList]

print "len(edgeVals)", len(edgeVals)

#ok print all: print "sorted", sorted(edgeVals)

uniqEdgeL = getUniqueComm2(edgeVals)

lenUEdgL = len(uniqEdgeL)

print "uniqEdgeL, lenUEdgL", uniqEdgeL[:5], lenUEdgL

# Obtain incidence matrix vertex-hyperedge (H)

# en networkx basta con meter la lista que salio de las comunidades

print "\n--Creating Incidence Matrix from node-community pairs\n"

# 2) send 1) node-community 2-tuple list & number of unique communities

# get the incidence matrix

# sparse format

H = createPrevCSR(partsList, lenUEdgL, lenUComL)

print H[:10], "\n"

print H[-10:]

Page 88: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 76

print "\n--Creating Inverse Matrix from node-community pairs\n"

t0 = time.time()

# 3) get invDvMatr

#ok_GOOD:

invDvMatr = getInvDvMatr(partsList)

print "inv vertex Degree Matrix:\n", invDvMatr[:10]

dv_1H = invDvMatr.dot(H)

print "type invDvMatr: ", type(invDvMatr)

print "type H: ", type(H)

print "type dv_1H: ", type(dv_1H)

print "Mult of inv vertex Degree Matrix by Incidence:)\n", \

dv_1H[:10], dv_1H[-10:]

t1 = time.time(); tot_t = t1 - t0; print "tot_t", tot_t

# 0.55733704567, 0.230079889297, 0.236006975174, 0.234042167664,

# 0.235435962677

# dense format (stored row-wise)

#

def createDense(partsList, lenUEdgL, lenUComL):

print "dim", lenUEdgL, lenUComL

comEdgeValL = []

for edge in uniqEdgeL:

for comm in uniqCommL:

if (edge, comm) in partsList:

comEdgeValL.append(1)

else:

comEdgeValL.append(0)

print "first comEdgeValL "

pprint.pprint(comEdgeValL[:20])

Page 89: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 77

print "last comEdgeValL "

pprint.pprint(comEdgeValL[-20:])

mat = np.array(comEdgeValL).reshape(lenUEdgL, lenUComL)

return mat

HDense = createDense(partsList, lenUEdgL, lenUComL)

print "\n--DENSE Inverse Matrix from node-community pairs\n"

t0 = time.time()

# 3a) get invVec for faster time

#ok, just testing array: invDvVec = getInvDvVec(partsList)

invDvVec = np.array(getInvDvVec(partsList))

leninvDv = len(invDvVec)

print invDvVec[:10], invDvVec[-10], "len", leninvDv

’’’

’’’

dv_1HDense = np.empty([lenUEdgL, lenUComL])

for i in range(lenUEdgL):

dv_1HDense[i] = invDvVec[i] * HDense[i]

pprint.pprint(dv_1HDense[:10])

pprint.pprint(dv_1HDense[-10:])

print "type invDvVec: ", type(invDvVec)

print "type HDense: ", type(HDense)

print "type dv_1HDense: ", type(dv_1HDense)

t1 = time.time(); tot_t = t1 - t0; print "tot_t", tot_t

# 0.0468049049377, 0.0475599765778, 0.0488741397858

# with array creation: 0.0517168045044

# 4) get invDeMatr

Page 90: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 78

# es lo mismo que las Dv, pero volteamos los numeros y aplicamos

# lo mismo que Dv, solo intercambiamos indices i -> j:

newList = [(item[1], item[0]) for item in partsList]

# ok newlist:

print "newList for De (changing the indexes)", newList[:10]

invDeMatr = getInvDvMatr(newList) # originally returns sparse matrix

print "inv h-edge Degree Matrix:\n", invDeMatr[:10]

de_1Ht = invDeMatr.dot(H.T)

print "Mult of inv h-edge Degr Matr by Incidence.T:)\n", \

de_1Ht[:10]

#4) dense version

invDeVec = np.array(getInvDvVec(newList))

# get inverse of H

HDenseT = HDense.T

de_1HtDense = np.empty([lenUComL, lenUEdgL]) # opposite dims

for i in range(lenUComL):

de_1HtDense[i] = invDeVec[i] * HDenseT[i]

print "Mult of inv h-edge Degr Matr by Incidence.T:)\n", \

de_1HtDense[:10]

# --- Ahora la lmultiplicacion completa:

MH = dv_1H.dot(de_1Ht)

print "\nMH\n", MH[:10]

# we now have dense multiplication

MHDense = dv_1HDense.dot(de_1HtDense)

#MH = MHDense

# --- Matriz de teletransportacion (to make m\trix irreducible)

matSize = len(MH)

Page 91: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 79

teleMat = [[1. / matSize for j in range(matSize)] for i in range(matSize)]

#check: print "teleMat", teleMat[:3][:3]

teleMat = np.matrix(teleMat)

print "teleMat\n", teleMat[:3, :3]

MH2 = 0.85 * MH + 0.15 * teleMat

print "MH2\n", MH2[:10,:10]

print type(MH2)

# eigenvectors

’’’

evalM, evecM = np.linalg.eig(MH2)

print "eigenvals", evalM[:5], "\n"

print "eigenvec", evecM[:, 1]

’’’

# iteraciones para sacar los demas eigenvectores

# necesitamos el primer eigenvector (eigenvec)

# Define initial vector v

v = np.matrix(makeInitVec(matSize))

print "v", v.T[:3]

# Obtenemos los eigenvec y eigenval con A y v

# NOTE: the code works correctly for column stochastic matrices

# so, if the matrix is row-stochastic, we need to transpose it

eigVal, eigVec = iteration(MH2.T, v.T) # need to be a matrix

print "eigVal = ", eigVal, type(eigVal)

print "eigVec = \n", eigVec[:10], type(eigVec)

nodeEigVec = [(i, j) for i, j in enumerate(np.matrix.tolist(eigVec))]

#ok: print nodeEigVec[:10]

pprint.pprint(nodeEigVec[:10])

Page 92: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 80

print "sorted\n"

sortRanksHG = sorted(nodeEigVec, key=operator.itemgetter(1), \

reverse=True)

pprint.pprint(sortRanksHG[:10])

rankSortSaveHG = [str(x) + " " +str(y[0]) for x, y in sortRanksHG]

print "rankSortSave", rankSortSaveHG[:10]

#XXXXXXXXXXXXXXX END: MATRIX STUFF FOR HG XXXXXXXXXXXXXXX

’’’

#XXXXXXXXXXXXXXX BEG: MATRIX STUFF FOR GRAPH XXXXXXXXXXXXXXX

# We need to build the vertex-edge list [(), (), ...]

# We already have the graph node-node information in edgeList

# obtain incidence matrix vertex-vertex (H)

# en networkx we only need to add the list of (edge, edge)

print "\n--Creating Incidence Matrix from edge-edge pairs\n"

# sparse format

G = createPrevCSR(edgeList, lenUEdgL, lenUEdgL)

print G[:10]

print "\n--Creating Inverse Matrix from edge-edge pairs\n"

# get invDvMatr

invDvMatrG = getInvDvMatr(edgeList)

print "inv vertex Degree Matrix G:\n", \

invDvMatrG[:10]

dv_1G = invDvMatrG.dot(G)

print "Mult of inv vertex Degree Matrix by Incidence \n", \

dv_1G[:10]

# --- Matriz de teletransportacion

matSize = len(dv_1G)

teleMat = [[1. / matSize for j in range(matSize)] for i in range(matSize)]

Page 93: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 81

#check: print "teleMat", teleMat[:3][:3]

teleMat = np.matrix(teleMat)

print "teleMat\n", teleMat[:3, :3]

# up to here, everything is fine with example from Klein

# correct results ae obtained

#ok simple graph of Klein: MG = 0.85 * dv_1G + 0.15 * teleMat

#ok: print "MG\n", MG[:10,:10]

# but now we add the HG matrix to this (telemat already included)

# THINK about whre to add the teletransp matrix

# CAREFUL: add two rw-stochastic or two column-stochastic matrices

MG = 0.85 * dv_1G + 0.15 * MH2

print "MG\n", MG[:10,:10]

print type(MG)

# eigenvectors

’’’

’’’

evalM, evecM = np.linalg.eig(MH2)

print "eigenvals", evalM[:5], "\n"

print "eigenvec", evecM[:, 1]

’’’

’’’

# iteraciones para sacar lso demas eigenvectores

# necesitamos el primer eigenvector (eigenvec)

# Define initial vector v

v = np.matrix(makeInitVec(matSize))

print "v", v.T[:3]

Page 94: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 82

# Obtenemos los eigenvec y eigenval con A y v

# NOTE: the code works correctly for column stochastic matrices

# so, if the matrix is row-stochastic, we need to transpose it

eigVal, eigVec = iteration(MG.T, v.T) # need to be a matrix

print "eigVal = ", eigVal, type(eigVal)

print "eigVec = \n", eigVec[:10], type(eigVec)

# printing node-eigenvector value

nodeEigVec = [(i, j) for i, j in enumerate(np.matrix.tolist(eigVec))]

#ok: print nodeEigVec[:10]

pprint.pprint(nodeEigVec[:10])

print "sorted", sorted(nodeEigVec, key=operator.itemgetter(1), \

reverse=True)[:10]

# (Sorted)Results for original Klein example of simple graph

# (1, [0.618189433764439]), (2, [0.5737952417102831]),

# (0, [0.522037084149513]), (4, [0.07830556262242697]),

# (3, [0.07052079908686405]), (5, [0.07052079908686405])

#XXXXXXXXXXXXXXX END: MATRIX STUFF FOR G XXXXXXXXXXXXXXX

’’’

print "\n--Obtaining PageRank for Graph"

# PR of graph - dictionary {node: pr value}

pr = nx.pagerank(gfb)

# print(type(pr))

print pr.items()[-3:] # print last 10 elements

# ok print: pprint.pprint(pr.items())

sortRankG = sorted(pr.items(), key=operator.itemgetter(1), \

reverse=True)

# print top 10 items w higher pr score

print "sorted PR (Graph)", sortRankG[:10]

# add sorted ranks of graph to rankSortSave for saving to file

rankSortSaveG = [str(x) + " " +str(y) for x, y in sortRankG]

Page 95: Ordenamiento de Páginas Web con Hipergrafos

Apéndice A. Código utilizado para la programación de los algoritmos 83

print "rankSortSaveG (Graph)", rankSortSaveG[:10]

rankSortSave3 = [str(x) + " " +str(y)

for x, y in zip(rankSortSaveHG, rankSortSaveG)]

print "rankSortSave3", rankSortSave3[:10]

escribir_texto3(rankSortSave3, outFilePointer01)

inFilePointer01.close()

inFilePointer02.close()

outFilePointer01.close()

if __name__ == ’__main__’:

main()