GESTIN DE DATOS MASIVOS DIPLOMADO DE DATOS 2017

  • Slides: 72
Download presentation
GESTIÓN DE DATOS (MASIVOS) DIPLOMADO DE DATOS 2017 Clase 5: Recuperación de Información (I)

GESTIÓN DE DATOS (MASIVOS) DIPLOMADO DE DATOS 2017 Clase 5: Recuperación de Información (I) Aidan Hogan aidhog@gmail. com

MANEJANDO DATOS DE TEXTO

MANEJANDO DATOS DE TEXTO

Sobrecarga de información

Sobrecarga de información

Si no se pudiera usar buscadores … • Contiene todos libros posibles con –

Si no se pudiera usar buscadores … • Contiene todos libros posibles con – – – 25 caracteres en el alfabeto 80 caracteres por línea 40 líneas por página 410 páginas 410 x 40 x 80 = 1. 312. 000 car. 251. 312. 000 libros • Contendría cada libro imaginable – Incluyendo un libro con la ubicación de todos libros útiles ; ) Información total = Cero información

El libro que indexa la biblioteca

El libro que indexa la biblioteca

BÚSQUEDA EN LA WEB

BÚSQUEDA EN LA WEB

Implementando la búsqueda de Google

Implementando la búsqueda de Google

Implementando la búsqueda de Google ¿Qué procesos y algoritmos necesita Google para implementar su

Implementando la búsqueda de Google ¿Qué procesos y algoritmos necesita Google para implementar su búsqueda de la Web? 1. 2. 3. Crawling Parsear enlaces de las páginas Ordenar los enlaces para descargar Descargar páginas, GOTO 1 Ranking ¿Qué tan relevante es una página? ¿Qué tan importante es? ¿Cuántos clics tiene? 1. 2. 3. Indexación Parsear keywords de las páginas Indexear sus keywords Administrar actualizaciones. . .

RECUPERACIÓN DE INFORMACIÓN: CRAWLING

RECUPERACIÓN DE INFORMACIÓN: CRAWLING

¿Cómo sabe Google acerca de la Web?

¿Cómo sabe Google acerca de la Web?

Crawling Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls while(!frontier_i. is. Empty())

Crawling Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls while(!frontier_i. is. Empty()) new list frontier_i+1 for url : frontier_i page = download. Page(url) frontier_i+1. add. All(extract. Urls(page)) store(page) i++ ¿Qué le falta a este código?

Crawling: Evitar Ciclos Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls new

Crawling: Evitar Ciclos Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls new set done while(!frontier_i. is. Empty()) new list frontier_i+1 for url : frontier_i page = download. Page(url) done. add(url) frontier_i+1. add. All(extract. Urls(page). remove. All(done)) store(page) i++ ¿Cómo es el rendimiento?

Crawling: Rendimiento Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls new set

Crawling: Rendimiento Descargar la Web crawl(list seed. Urls) frontier_i = seed. Urls new set done while(!frontier_i. is. Empty()) new list frontier_i+1 for url : frontier_i page = download. Page(url) done. add(url) frontier_i+1. add. All(extract. Urls(page). remove. All(done)) Ø La mayoría del tiempo se gastará esperando conexiones store(page) Ø El uso del disco duro/CPU será casi 0 i++ Ø El ancho de banda no será maximizado ¿Cómo es el rendimiento?

Crawling: "Multi-threading" es importante crawl(list seed. Urls) frontier_i = seed. Urls new set done

Crawling: "Multi-threading" es importante crawl(list seed. Urls) frontier_i = seed. Urls new set done while(!frontier_i. is. Empty()) new list frontier_i+1 new list threads for url : frontier_i thread = new Download. Thread. run(url, done, frontier_i+1) threads. add(thread) threads. poll() i++ Download. Thread: run(url, urls. Seen, frontier_i+1) page = download. Page(url) synchronised: done. add(url) synchronised: frontier_i+1. add. All(extract. Urls(page). remove. All(done)) synchronised: store(page)

Crawling: "Multi-threading" es importante (por ejemplo) Haciendo un crawl de mil URLs … ¿Cuál

Crawling: "Multi-threading" es importante (por ejemplo) Haciendo un crawl de mil URLs … ¿Cuál es el peligro de usar muchos hilos?

Crawling: ¡Es importante ser cortés! Ataqué de Denegación de Servicio (Distribuido) "(Distributed) Denial of

Crawling: ¡Es importante ser cortés! Ataqué de Denegación de Servicio (Distribuido) "(Distributed) Denial of Server Attack": (D)Do. S

Crawling: Evitar hacer un (D)Do. S Christopher Weatherhead Ø ¡Preso por 18 meses! …

Crawling: Evitar hacer un (D)Do. S Christopher Weatherhead Ø ¡Preso por 18 meses! … pero más probable que tu IP será baneada

Crawling: Planificador de sitio web crawl(list seed. Urls) frontier_i = seed. Urls new set

Crawling: Planificador de sitio web crawl(list seed. Urls) frontier_i = seed. Urls new set done while(!frontier_i. is. Empty()) new list frontier_i+1 new list threads for url : schedule(frontier_i) # maximiza el tiempo entre dos peticiones al mismo sitio thread = new Download. Page. Thread. run(url, done, fronter_i+1) threads. add(thread) threads. poll() i++ Download. Page. Thread: run(url, done, frontier_i+1) page = download. Page(url) synchronised: done. add(url) synchronised: frontier_i+1. add. All(extract. Urls(page). remove. All(done)) synchronised: store(page)

Protocolo de exclusión de robots http: //website. com/robots. txt User-agent: * Disallow: / No

Protocolo de exclusión de robots http: //website. com/robots. txt User-agent: * Disallow: / No se permiten bots en este sitio web User-agent: * Disallow: /user/ Disallow: /main/login. html No se permiten bots en la carpeta /user/ ni la página /main/login. html User-agent: googlebot Disallow: / Banea solo el bot con el “user-agent” googlebot.

Robots Exclusion Protocol (non-standard) User-agent: googlebot Crawl-delay: 10 Le dice al googlebot que haga

Robots Exclusion Protocol (non-standard) User-agent: googlebot Crawl-delay: 10 Le dice al googlebot que haga una petición no más de una vez cada 10 segundos User-agent: * Disallow: / Allow: /public/ Banea todo menos la carpeta /public/ para todos los bots User-agent: * Sitemap: http: //example. com/main/sitemap. xml Da un enlace al "site map"

Site-Map: Más información sobre el sitio

Site-Map: Más información sobre el sitio

Crawling: Puntos importantes • Lista de semillas: Puntos de entrada para el crawling •

Crawling: Puntos importantes • Lista de semillas: Puntos de entrada para el crawling • Frontera: Los próximos URLs a descargarse • Lista de vistos: Para evitar ciclos • Multihilos: Mantiene a las máquinas ocupadas • Cortesía: No sobrecargar los sitios web – Aplicar un retraso entre dos peticiones – Seguir lo que se dice en el archivo robots. txt – Revisar si hay un "site-map"

Crawling: Distribución ¿Cómo implementaríamos un crawler distribuido? for url : frontier_i-1 map(url, count) 1

Crawling: Distribución ¿Cómo implementaríamos un crawler distribuido? for url : frontier_i-1 map(url, count) 1 2 3 4 5 Beneficios similares al uso de multihilos ¿Cuál será el cuello de botella al aumentar el número de máquinas? El bando ancho o la cortesía (los retrasos entre peticiones)

Crawling: ¿Toda la Web? ¿Podemos hacer un crawl de toda la Web?

Crawling: ¿Toda la Web? ¿Podemos hacer un crawl de toda la Web?

Crawling: All the Web? ¿Podemos hacer un crawl de toda la Web? ¿Puede Google

Crawling: All the Web? ¿Podemos hacer un crawl de toda la Web? ¿Puede Google hacer un crawl de toda la Web?

Crawling: Inaccesibilidad (Pajarita) Broder et al. “Graph structure in the web, ” Comput. Networks,

Crawling: Inaccesibilidad (Pajarita) Broder et al. “Graph structure in the web, ” Comput. Networks, vol. 33, no. 1 -6, pp. 309– 320, 2000

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"?

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"?

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente •

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente • Protegido contraseña

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente •

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente • Protegido contraseña • "Dark Web" (usa criptografía)

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente •

Crawling: Inaccesibilidad ("Deep Web") ¿Qué es la "Deep Web"? • Contenido generado dinámicamente • Protegido contraseña • "Dark Web" (usa criptografía) Se inventan 46% de las estadísticas en el momento

Crawling: All the Web? ¿Podemos hacer un crawl de toda la Web? ¿Puede Google

Crawling: All the Web? ¿Podemos hacer un crawl de toda la Web? ¿Puede Google hacer un crawl de si mismo?

Apache Nutch • Framework open-source para hacer crawling • Compatible con Hadoop https: //nutch.

Apache Nutch • Framework open-source para hacer crawling • Compatible con Hadoop https: //nutch. apache. org/

RECUPERACIÓN DE INFORMACIÓN: INDEXACIÓN INVERTIDA

RECUPERACIÓN DE INFORMACIÓN: INDEXACIÓN INVERTIDA

Índices invertidos • Un mapa de palabras a documentos – “Invertido” pues normalmente documentos

Índices invertidos • Un mapa de palabras a documentos – “Invertido” pues normalmente documentos mapean a palabras ¿Cuáles son las aplicaciones?

Índices invertidos: Un ejemplo 1 Fruitvale Station is a 2013 American drama film written

Índices invertidos: Un ejemplo 1 Fruitvale Station is a 2013 American drama film written and directed by Ryan Coogler. Índice invertido: Term List Posting List a (1, 2, …) american (1, 5, …) and (1, 2, …) by (1, 2, …) directed (1, 2, …) drama (1, 16, …) … …

Índices invertidos: Un ejemplo de búsqueda american drama • AND: Intersección de "posting lists"

Índices invertidos: Un ejemplo de búsqueda american drama • AND: Intersección de "posting lists" • OR: Unión de "posting lists" • PHRASE: ? ? ? ¿Cómo deberíamos implementar PHRASE? Índice invertido: Term List Posting List a (1, 2, …) american (1, 5, …) and (1, 2, …) by (1, 2, …) directed (1, 2, …) drama (1, 16, …) … …

Índice invertidos: Frases 1 1 10 18 21 23 28 37 43 47 55

Índice invertidos: Frases 1 1 10 18 21 23 28 37 43 47 55 59 68 71 76 Fruitvale Station is a 2013 American drama film written and directed by Ryan Coogler. Índice invertido: Term List Posting Lists List a (1, 2, …) (1, [21, 96, 103, …]), (2, […]), … american (1, 5, …) (1, [28, 123]), (5, […]), … and (1, 2, …) (1, [57, 139, …]), (2, […]), … by (1, 2, …) (1, [70, 157, …]), (2, […]), … directed (1, 2, …) (1, [61, 212, …]), (4, […]), … drama (1, 16, …) (1, [38, 87, …]), (16, […]), … … …

Índice invertidos: Niveles de indexación "Record-level" (nivel de registro) Mapea palabras a documentos sin

Índice invertidos: Niveles de indexación "Record-level" (nivel de registro) Mapea palabras a documentos sin sus posiciones en el documento "Word-level" (nivel de palabra) Mapea palabras a documentos con sus posiciones en el documento

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Índice invertido:

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Índice invertido: Term List Posting Lists a (1, [21, 96, 103, …]), (2, […]), … american (1, [28, 123]), (5, […]), … and (1, [57, 139, …]), (2, […]), … by (1, [70, 157, …]), (2, […]), … directed (1, [61, 212, …]), (4, […]), … drama (1, [38, 87, …]), (16, […]), … … …

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras:

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras: "Stemming" corta los sufijos de las palabras según reglas genéricas: { America , American , americas , americanise } → { america }

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras:

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras: "Stemming" corta los sufijos de las palabras según reglas genéricas: { America , American , americas , americanise } → { america } "Lematización" usa conocimiento de la palabra para normalizarla { better , goodly , best } → { good }

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras:

Índices invertidos: Normalización de palabras drama america ¿Cómo podemos resolver este problema? Normalizar palabras: "Stemming" corta los sufijos de las palabras según reglas genéricas: { America , American , americas , americanise } → { america } "Lematización" usa conocimiento de la palabra para normalizarla { better , goodly , best } → { good } Reemplazar palabras sinónimas { film , movie } → { movie } Ø La normalización es especifica al lenguaje Ø Hay que usar la misma normalización para el documento y la consulta

Índice invertidos: Espacio "Record-level" (nivel de registro) Mapea palabras a documentos sin sus posiciones

Índice invertidos: Espacio "Record-level" (nivel de registro) Mapea palabras a documentos sin sus posiciones en el documento ¿Espacio? (la suma de palabras únicas en cada documento) "Word-level" (nivel de palabra) Mapea palabras a documentos con sus posiciones en el documento ¿Espacio? (la suma de las ocurrencias de palabras en cada documento)

Íncide Invertido: Palabras únicas No hay tantas palabras únicas … • Ley de Heap:

Íncide Invertido: Palabras únicas No hay tantas palabras únicas … • Ley de Heap: – K ∈ [10; 100] – β ∈ [0, 4; 0, 6] Número de palabras únicas • En inglés: Palabras únicas contra palabras totales Número de palabras totales

Índice invertidos: Espacio "Record-level" (nivel de registro) Mapea palabras a documentos sin sus posiciones

Índice invertidos: Espacio "Record-level" (nivel de registro) Mapea palabras a documentos sin sus posiciones en el documento ¿Espacio? (la suma de palabras únicas en cada documento) "Word-level" (nivel de palabra) Mapea palabras a documentos con sus posiciones en el documento ¿Espacio? (la suma de las ocurrencias de palabras en cada documento)

Íncide Invertido: Palabras comunes Muchas ocurrencias de pocas palabras / Pocas ocurrencias de muchas

Íncide Invertido: Palabras comunes Muchas ocurrencias de pocas palabras / Pocas ocurrencias de muchas palabras • Ley de Zipf • En inglés: – – “the” 7% “of” 3. 5% “and” 2. 7% 135 palabras cubren la mitad de las ocurrencias Ley de Zipf: la palabra más común aparecerá n-veces más qué la enésima palabra ¡Deberíamos esperar "posting lists" muy largos para las palabras más comunes! ¿Solución?

Índices Invertidos: Palabras comunes • ¿Tal vez implementar "stop-words"? • Las palabras más comunes

Índices Invertidos: Palabras comunes • ¿Tal vez implementar "stop-words"? • Las palabras más comunes dan la menor cantidad de información the drama in america

Índices Invertidos: Palabras comunes • ¿Tal vez implementar "stop-words"? • ¿Tal vez implementar "block-addressing"?

Índices Invertidos: Palabras comunes • ¿Tal vez implementar "stop-words"? • ¿Tal vez implementar "block-addressing"? Fruitvale Station is a 2013 American drama film written and directed by Ryan Coogler. Bloque 2 Bloque 1 ¿Cómo afectaría eso la búsqueda por frase? Depende del tamaño de los bloques Term List Posting Lists a (1, [1, …]), (2, […]), … american (1, [1, …]), (5, […]), … and (1, [2, …]), (2, […]), … by (1, [2, …]), (2, […]), … … …

Íncide Invertido: Palabras comunes Muchas ocurrencias de pocas palabras / Pocas ocurrencias de muchas

Íncide Invertido: Palabras comunes Muchas ocurrencias de pocas palabras / Pocas ocurrencias de muchas palabras • Ley de Zipf • En inglés: – – “the” 7% “of” 3. 5% “and” 2. 7% 135 palabras cubren la mitad de las ocurrencias Ley de Zipf: la palabra más común aparecerá n-veces más qué la enésima palabra ¡Deberíamos esperar "posting lists" muy largos para las palabras más comunes! ¡Deberíamos esperar más consultas usando palabras más comunes!

La larga cola de búsqueda "The long tail of search"

La larga cola de búsqueda "The long tail of search"

La larga cola de búsqueda ¿Qué optimización podemos usar? Cachear consultas populares como “coffee”

La larga cola de búsqueda ¿Qué optimización podemos usar? Cachear consultas populares como “coffee”

Para quien le interese…

Para quien le interese…

Implementación de búsqueda • Indexación del Term list: – Hashing: búsquedas O(1) (con hashing

Implementación de búsqueda • Indexación del Term list: – Hashing: búsquedas O(1) (con hashing ideal) • consultas exactas (sin prefijos o rangos) • fácil de actualizar (aunque ¡rehashing es caro!) – Sorting/B-Tree: búsquedas O(log(u)) (u palabras únicas) • consultas con prefijos o rangos • más difícil de actualizar (pero hay, por ejemplo, técnicas como B-trees) – Tries/FST: búsquedas O(p) (p largo de la palabra) • consultas con prefijos o rangos • comprimido • indexación se vuelve difícil (especialmente en el disco duro) Tries? FSTs? (en la clase)

Almacenamiento • Term list (palabras) – Más pequeño en general – De menudo cabe

Almacenamiento • Term list (palabras) – Más pequeño en general – De menudo cabe en memoria principal • Posting lists (documentos): – Más grandes en general – Almacenados en el disco duro (con cachés) Term List Posting List a (1, [21, 96, 103, …]), (2, […]), … american (1, [28, 123]), (5, […]), … and (1, [57, 139, …]), (2, […]), … by (1, [70, 157, …]), (2, […]), … … …

Técnicas de compresión • Compresión numérica es importante Term List Posting Lists country (1),

Técnicas de compresión • Compresión numérica es importante Term List Posting Lists country (1), (2), (3), (4), (6), (7), … … …

Técnicas de compresión de alto nivel • Indexación de intervalos – Un ejemplo aquí

Técnicas de compresión de alto nivel • Indexación de intervalos – Un ejemplo aquí para indexación de "record-level" • Aplica igual para "word-level" o "block-level" Term List Posting List country (1), (2), (3), (4), (6), (7), … … … Term List Posting List country (1– 4), (6– 7), … …

Técnicas de compresión de alto nivel • Gap indexing – Un ejemplo aquí para

Técnicas de compresión de alto nivel • Gap indexing – Un ejemplo aquí para indexación de "record-level" • Aplica igual para "word-level" o "block-level" Term List Posting List country (1), (3), (4), (8), (9), … … … Term List Posting List country (1), 2, 1, 4, 1 … … ¿Cuál es la ventaja? Números bajos y repetitivos son más fáciles de comprimir

Técnicas de compresión: Nivel de bits • Codificación de largo variable: técnicas a nivel

Técnicas de compresión: Nivel de bits • Codificación de largo variable: técnicas a nivel de bits • Por ejemplo, codificación Elias γ (gamma) – Asume muchos números pequeños z: integer de entrada n = �log 2(z)�en unario 1 0 2 1 0 0 100 3 1 0 1 101 4 11 0 00 11000 5 11 0 01 11001 6 11 0 10 11010 7 11 0 11 11011 8 111 0 000 1110000 … … … ¿Puedes descifrar un marcador 0 las próximas n cifras binarias código Elias γ 0 <1, 2, 1, 1, 4, 8, 5>

Técnicas de compresión: Nivel de bits • Codificación de largo variable: técnicas a nivel

Técnicas de compresión: Nivel de bits • Codificación de largo variable: técnicas a nivel de bits • Por ejemplo, codificación Elias δ (delta) – Mejor para algunas distribuciones de números z: integer de entrada n = �log 2(z)� en Elias γ las próximas n cifras en binaria código Elias δ 1 0 2 100 0 1000 3 100 1 1001 4 101 00 10100 5 101 01 10101 6 101 10 10110 7 101 11 10111 8 11000000 … … 0 ¿Puedes descifrar “ 0110000011001001”? <1, 9, 3, 1, 17>

Técnicas de compresión: Nivel de bytes • Usar códigos de longitud variable • Usar

Técnicas de compresión: Nivel de bytes • Usar códigos de longitud variable • Usar último bit del byte para terminar el número • Por ejemplo: 00100100 10100010 18 81 00000101 00100100 274

Compresión parametrizada • Métodos previos son generales – No toman valores de configuración •

Compresión parametrizada • Métodos previos son generales – No toman valores de configuración • Otras técnicas son parametrizados: – ej. , codificación Golomb-3 z: integer de entrada n = �(z-1)/3� en unario 1 separador de 0 el resto en binario código Golomb-3 0 0 00 2 0 10 010 3 0 11 011 4 1 0 0 100 5 1 0 10 1010 6 1 0 11 1011 7 11 0 00 1100 8 11 0 010 11010

Otras optimizaciones • Top-Doc: Ordena las posting lists para que entreguen los documentos más

Otras optimizaciones • Top-Doc: Ordena las posting lists para que entreguen los documentos más importantes (en los top-k rel ranking de los resultados) primero • Selectividad: Carga las posting lists para las palabras claves más raras primero • Distribución: Use múltiples máquinas ¿Cómo se puede distribuir un índice invertido? 1. Partición por palabra 2. Partición por documento

Extremadamente escalable/eficiente. . . cuando se implementa bien.

Extremadamente escalable/eficiente. . . cuando se implementa bien.

ÍNDICES INVERTIDOS: UNA SOLUCIÓN

ÍNDICES INVERTIDOS: UNA SOLUCIÓN

Apache Lucene • Índice invertido – Open Source – Java • La base de

Apache Lucene • Índice invertido – Open Source – Java • La base de varios otros proyectos

Doug Cutting (arriba) & Mike Cafarella (abajo) ¿Cómo se llama del elefante amarillo de

Doug Cutting (arriba) & Mike Cafarella (abajo) ¿Cómo se llama del elefante amarillo de Doug? Hadoop

Apache Lucene: Indexando Documentos … continua …

Apache Lucene: Indexando Documentos … continua …

Apache Lucene: Indexando Documentos … continua …

Apache Lucene: Indexando Documentos … continua …

Apache Lucene: Buscando Documents

Apache Lucene: Buscando Documents

Apache Lucene: Buscando Documents

Apache Lucene: Buscando Documents

¿Preguntas?

¿Preguntas?