Una tarea fundamental del proceso de datamining consiste en encontrar ítems similares. Un ejemplo es buscar dentro de una colección de páginas web para encontrar páginas near-duplicadas. Estas páginas abundan en la Internet; corresponden a plagios, mirrors, campañas, etc.
Comenzaremos con una noción básica de similaridad basada en conjuntos con relativa gran intersección.
Luego avanzamos con una técnica llamada minhashing, que consiste en comprimir grandes conjuntos de elementos en una pequeña firma (signature) donde se mantenga la noción de cercanía.
Referencias: http://mmds.org
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Tópicos de Big Data - Items Similares
1. Tópicos de Estadística & Data Mining
en Big Data
Items Similares
Lic. Ernesto Mislej
Maestría en Exploración de Datos y
Descubrimiento del Conocimiento
Universidad de Buenos Aires
ernesto@7puentes.com
Octubre 2014
2. Outline
Intro
Aplicaciones de búsqueda por vecindad
Documentos near-duplicados
Collaborative Filtering
Jaccard Similarity de Conjuntos
Singling de Documentos
Minhashing
Locality-Sensitive Hashing para documentos
3. Intro
Una tarea fundamental del proceso de datamining consiste en
encontrar ítems similares. Un ejemplo es buscar dentro de una
colección de páginas web para encontrar páginas
near-duplicadas. Estas páginas abundan en la Internet;
corresponden a plagios, mirrors, campañas, etc.
Comenzaremos con una noción básica de similaridad basada en
conjuntos con relativa gran intersección.
Luego avanzamos con una técnica llamada minhashing, que
consiste en comprimir grandes conjuntos de elementos en una
pequeña firma (signature) donde se mantenga la noción de
cercanía.
4. High dimensional data
Muchos problemas pueden ser modelados a partir de encontrar
conjuntos similares de elementos:
Encontrar vecindades en espacios multi-D.
Páginas/Documentos similares a partir de tener contenido
similar.
Modelos de clasificación por vecindad.
Modelos de user-similarity para sistemas de
recomendación.
Usuarios NetFlix con gustos similares en películas.
Productos con el mismo club-de-usuarios.
Imágenes con características similares.
Usuarios que visitaron los mismos websites.
5. ƒ !#$!##$%'()(*$(+,$%$'(%$)#')$*)$'#$)*+#$%$
'#*,$*-'#,)#.'*%-$/$'#$)*+#$%$'#*,$0-*%-1$
ƒ '()2345$367$8$934ˆ369/934‰369$
ƒ !#$!##$%-(.+/#0$:#'(##-$)#')$*)$4$;*-0)$
'#*,$=..=,$)*;*?=,*'@1$
ƒ %2345$367$8$4$A$934ˆ369/934‰369$
Jaccard Similarity de Conjuntos
Jaccard similarity de conjuntos S and T = jS Tj=jS [ Tj
Jaccard distance = 1 - Jaccard similarity
3 in intersection
8 in union
Jaccard similarity= 3/8
Jaccard distance = 5/8
4/4B/6C46$ 0,#$D#)E%F#.5$G'=-%,$36HI1$J*-*-K$J=))*F#$L='=)#')$ 44$
Extensión: Jaccard Similarity de Bags
6. Documentos Similares
Dado un gran número (N en el orden de los millones o 1000M)
de documentos de textos, el objetivo es encontrar pares de near
duplicates.
Plagio.
Páginas en espejo (mirror sites).
Artículos originarios de la misma fuente, news aggregators.
Pequeñas partes, fragmentos de un documento que se
encuentran en otro.
Son muchos documentos para pensar en comparar todos
los pares.
...y no entran en memoria.
7.
8. Paso a paso
1 Shingling: Convertir a los documents, emails, etc., a
conjunto de n-grams
2 Minhashing: Convertir sets a signatures, mientras
conservamos la noción de similitud
3 Locality-sensitive hashing: Operar sobre el espacio de
signatures para encontrar grupos de documentos similares
9. Bigpicture
!#
Docu-ment
The set
of strings
of length k
that appear
in the doc-ument
Signatures:
short integer
vectors that
represent the
sets, and
reflect their
similarity
Locality-
Sensitive
Hashing
Candidate
pairs:
those pairs
of signatures
that we need
to test for
similarity.
!$!%$'!# ()*+#,+-./0+12#34567/*8#9:;#=66?#=5--0+#@545-+4-#
10. Shingling
Un k-shingle (o k-gram) para un documento es una
secuencia de k tokens que ocurren en un documento.
Los tokens pueden ser chars, palabras, u otra combinación
dependiendo de la aplicación.
Asumimos tokens como chars
Ejemplo: k = 2; D1 = abcab
Conjunto de 2-shingles: S(D1) = ab; bc; ca
Opcional: Shingles como bags, contaríamos ab 2 veces.
11. Comprimir los Shingles
Representar a los docs como un conjunto de valores de
hash para sus k-shingles.
S(D1) = h(ab); h(bc); h(ca)
Podemos usar una función de hash que mapee a 4 bytes
Debemos ser cuidadosos en la elección del k
k = 5 está OK para docuentos cortos
k = 10 funciona mejor para documentos largos
12. Similitud en el conjunto de Shingles sets
El documento D1 = conjunto de k-shingles C1 = S(D1)
Equivalentemente, cada documento es un vector de 0/1 en
el espacio de k-shingles.
Cada shingle es una dimensión.
Los vectores son muy esparsos/ralos.
Jaccard similarity!
13. Motivación para minhashing/LSH
Supongamos que necesitamos encontrar near-duplicados en
un conjunto de N = 1 millón documentos
Estamos tentados a realizar Jaccard para cada par de docs
N(N 1)=2 5;1011 comparaciones.
Supongamos 105 segs/día y 106 comp/seg, tarda 5 días.
Para N = 10 millones, tarda más de 1 año!
14. Codificar los conjuntos como vectores de bits
Codificar a los conjuntos usando vectores de bits
1 dimensión por elemento
Interpretamos a la intersección como bitwise AND, y a la
unión como bitwise OR
(No necesariamente persitiremos la matriz completa, nuestra
matriz es muy esparsa)
Ejemplo: C1 = 10111; C2 = 10011
Tamaño de la intersección = 3; tamaño de la union = 4,
Jaccard sim = 3/4
Distancia: d(C1; C2) = 1 - (Jaccard similarity) = 1/4
15. De conjuntos a una matriz de vectores de bits
Las columnas son los documentos
Las filas son las shingles.
Ejemplo:
Tamaño de la intersección = 3; tamaño de la union = 6,
Jaccard sim = 3/6
Distancia: d(C1; C2) = 1 - (Jaccard similarity) = 3/6
16. Hashing sobre las columnas
Idea: aplicar una función de hash para cada columna C a
h(C), talque:
1 h(C) es pequeña para que la firma entre en memoria RAM
2 Trataremos sim(C1; C2) como lo mismo que la sim de firmas
h(C1) y h(C2)
Objetivo: encontrar la función de hash h() que satisfaga:
si sim(C1; C2) es alta, luego con alta probabilidad
h(C1) = h(C2)
si sim(C1; C2) es baja, luego con alta probabilidad
h(C1)6= h(C2)
Aplicamos hash a los documentos y esperamos que la
mayoría de los pares de documentos near-duplicados caigan
en el mismo bucket
17. Min-hashing
Imaginemos las filas de esta matriz booleana permutada
por una permutación cualquiera.
Luego definamos una nueva hash function h(C) = el
número de la primera fila (en el orden permutado ) con
valor 1:
h(C) = min(C)
Usaremos muchas (por ej. 100) funciones de hash
independientes para armar la firma de cada documento
19. Min-hashing y Jaccard
La pobabilidad que la función minhash para una
permutación aleatoria produzca los mismos valores para 2
conjuntos, es igual a la similitud de Jaccard para esos
conjuntos.
P(h(C1) = h(C2)) = sim(C1; C2)
21. LSH
Objetivo: Encontrar documentos con similitud Jaccard al menos
s (para algún umbral, por ejemplo, s = 0;8)
Idea general de LSH: Usar una función f (x; y) que dija si x e
y son candidatos
Columnas x and y de M son un par candidatos si sus firmas
comparten al menos una fracción s de sus filas:
M (i, x) = M (i, y) para al menos una fracción s de los
valores de i
Espeamos que los documentos x e y tengan la misma
similitud Jaccard en sus firmas
23. Ejemplo de bandas
Supongamos 100.000 columnas of M (100k docs)
Signatures de 100 ints (rows)
Luego signatures tienen 40Mb
Elejimos 20 bandas de 5 ints/band
Objetivo: Encontrar pares de documentos de al menos s =
80% similar