GPU-based clustering over spanish wikipedia articles.
This project was made as part of an Artificial Intelligence undergrad Computer Science course in 2015 by Juan Carlos Pujol Mainegra and Damian Valdés Santiago.
En este trabajo se realiza una experimentación con los artículos de Wikipedia en
español, basada en métodos de agrupamiento (e.g. Python 2.7
y los módulos nltk 3.0
, sklearn 0.13
, numpy 1.6
, scipy 0.11
y py-opencl
.
Primeramente, se transformaron los JSON que contenían los artículos, en
elementos de una tabla de la base de datos wiki.db
cuyo tamaño aproximado es
de 7 Gb, y donde cada artículo se guarda con un id
, el título
, el usuario
que lo publicó y el texto
en el propio artículo. Este procedimiento se realizó
con el código database_fill
.\ Luego, se realizó un estudio exploratorio sobre
los textos de los artículos en el formato específico de la Wikipedia para
determinar qué elementos pudieran eliminarse con el fin de refinar el texto para
después realizar el procesamiento de texto clásico. Se borran entonces las
tablas, plantillas, hipervínculos, referencias, fórmulas matemáticas, etc. Esto
se logró mediante expresiones regulares en Python y un parser XML.\ Este
filtrado del texto se realizó con el código en plain_text
guardando el
resultado en la base de datos miniwiki.db
cuya tabla corpus_mini
contiene
id
, título
, usuario
y el texto
procesado. Además contiene una llave
foránea a la tabla topics
donde se almacenan las etiquetas dadas por los
autores a cada artículo, lo que servirá para evaluar posteriormente la calidad
del agrupamiento. En el estudio se detectaron 518 tópicos.\ Durante este
proceder se hallaron artículos que no cumplen con el formato observado, por
ejemplo, no había un cierre equilibrado de corchetes ([[]]
). Uno de estos
artículos es el referido a Azerbaiyán donde la tabla Clima no tiene el cierre
debido.
Se utilizó el módulo nltk
para la eliminación de las stop words y el
Snowball stemming. La experimentación demostró que estos dos procesamientos, a
pesar de su demora, no mejoran la eficacia del agrupamiento. Para la
construcción de los vectores de caracteristicas se utilizó un modelo vectorial
basado en frecuencia de términos y frecuencia inversa de términos (tf-idf).
Esta vectorización se realizó con la clase TfidfVectorizer
del módulo
sklearn
.
El agrupamiento (clustering) consiste en agrupar objetos similares entre ellos y disimilares respecto a los objetos fuera del grupo. Existen muchos algoritmos para clustering cuyo denominador común es el uso de distancias que permitan determinar la similaridad o no de los datos. En el caso restrictivo donde cada objeto sea descrito por los valores de solo dos atributos, se pueden representar los datos en un plano como se muestra en la Figura [fig:Data].
fig: Data. Datos para agrupar [@Bramer2013].
Los puntos de la Figura [fig:Data] pueden agruparse visualmente en cuatro grupos que se muestran en la Figura [fig:Cluster1].
fig: Cluster1. Datos agrupados [@Bramer2013]
Sin embargo, frecuentemente existen varias posibilidades para hacer el agrupamiento. Por ejemplo, los puntos en la esquina inferior derecha de la Figura [fig:Data] puede agruparse con dos clusters como se muestra en Figura [fig:Cluster2].
fig:Cluster2. Datos agrupados (segunda versión) [@Bramer2013]
Estas distintas cantidades de clusters para un mismo conjunto de datos se debe a la noción de similitud (disimilitud) entre dos datos que se use en el algoritmo. La medida más usada es la distancia euclidiana.
El algoritmo
El algoritmo determina los
Para la experimentación se usó la implementación de sklearn
.
Esta variante consiste en el mismo algoritmo descrito en kmeans pero con
paralelización. Para esto se partió del ejemplo k-means autoclustering que
brinda AMD APP SDK versión 3.0 beta, y se modificó para trabajar con vectores de
El algoritmo DBSCAN agrupa los datos los puntos núcleo que tienen cierta cantidad de vecinos en un cierto radio de acción. Después que se determinan los núcleos, el grupo se expande agregando sus vecinos al grupo que contiene al núcleo y se chequea recursivamente si alguno de ellos es un núcleo. Formalmente, un punto es considerado núcleo si tiene más de un mínimo de puntos que tienen una similaridad mayor que un umbral determinado. Este algoritmo es muy usado para detectar outliers o ruido.
Método | Parámetros | Escalabilidad | Casos de uso | Distancia |
---|---|---|---|---|
|
Número de grupos | Muy grande | Propóstio general, número par de grupos, pocos grupos, geometría plana | Distancia entre puntos |
DBSCAN | Tamaño de la vecindad | Muy grande | Geometría no plana, tamaño impar de grupos | Distancia entre puntos más cercanos |
Se les llama grupos de geometría no plana a los grupos cuya forma no es circular, cuadrada, etc.
Mide cuán similares son dos asignaciones de cluster: la real y la dada por un
algoritmo. El número que se le de al cluster no tiene importancia. Mientras más
cercano es su valor a 1 mejor es el agrupamiento, es peor si el valor es
negativo o cercano a 1. El rango de valores es
Si
El Rand Index sin ajustar es:
El Rand Index ajustado es:
Similar al Rand Index. El rango de valores es
Rosenberg and Hirschberg (2007) definen caracteristicas deseables en cualquier agrupamiento:
-
Homogenity: cada cluster contiene solo miembros de su clase.
-
Completeness: todos los miembros de la clase son asignados al mismo cluster.
Ambas medidas están en el rango
Las definiciones formales son:
Esta medida puede usarse para evaluar la similitud entre dos asignaciones independientes en el mismo conjunto de datos. Si es mala (cercana a 0), se usan homogenity y completeness como medida de calidad. No asume estructura del cluster.
La definición formal es:
No se necesita la asignación correcta y la dada por el algoritmo de
agrupamiento. Mientras mayor sea el coeficiente, más definidos estarán los
grupos. El rango de valores es
La definición formal es:
La experimentación se realiza con el archivo vectorize.py
donde pueden hacer
dos tipos de pruebas: agrupando los artículos solo en dos grupos o agrupándolos
en un número creciente de grupos.
Se toman los primeros 1000 artículos que están en la base de datos. El método
[ 15px 2000 2001 2002 2003
2004 2005 2006 2007 2008
2009 2010 2011 2012 2013
2014 20px 2º alemania amateur
and archivo argentina año años
botánica botánicos campeonato carrera categoría
ciclismo ciclista ciclistas ciencias colombia
contrarreloj cup después dos ed
enlaces equipo equipos españa estudios
et etapa etapas externos francia
física ganó general giro gold
gran grandes historia http ik
in instituto investigación isbn italia
juegos medal miembro mundial mundo
nacido nacional of olímpicos palmarés
parte png pp premio primera
profesional profesor publicaciones referencias resultados
ruta ser siglo svg team
template teoría the tour trabajo
unidos universidad vuelta vueltas with ]
Método | ARI | AMI | H | C | V | SC | Grupos | Tiempo (s) |
---|---|---|---|---|---|---|---|---|
|
0.9979999 | 0.9942933 | 0.9942953 | 0.9942961 | 0.99429 | 0.3580206 | 2 | 0.08099985 |
KMeansOpenCL | 0.9979999 | 0.9942933 | 0.9942953 | 0.9942961 | 0.9942957 | 0.3580206 | 2 | 0.01300001 |
DBSCAN | 0.0002829324 | 0.0001105662 | 0.03061625 | 0.08104242 | 0.04444286 | $-$0.4573770 | 57 | 0.147 |
Se tomaron combinaciones de grupos de los siguientes tópicos:
Cantidad de documentos | Tópicos |
---|---|
76001 | Ficha de taxón |
64854 | Ficha de entidad subnacional |
12488 | Ficha de localidad |
11207 | Ficha de futbolista |
10439 | Ficha de artista |
9068 | Ficha de actor |
7987 | Ficha de álbum |
7632 | Ficha de película |
7443 | Ficha de persona |
6140 | Ficha de deportista |
5788 | Ficha de autoridad |
5547 | Ficha de estación |
4404 | Ficha de sencillo |
3568 | Ficha de serie de televisión |
3170 | Ficha de organización |
3126 | Ficha de equipo de fútbol |
2954 | Ficha de escritor |
2731 | Ficha de revista |
2635 | Ficha de isla |
2438 | Ficha de científico |
2086 | Ficha de videojuego |
2085 | Ficha de cuerpo de agua |
2051 | Ficha de vía de transporte |
1874 | Ficha de país |
1788 | Ficha de noble |
1697 | Ficha de libro |
1640 | Ficha de obra de teatro |
1605 | Ficha de conflicto |
1520 | Ficha de templo |
1390 | Ficha de edificio |
1388 | Ficha de montaña |
1339 | Ficha de episodio de televisión |
1219 | Ficha de ciclista |
1201 | Ficha de espacio natural |
1192 | Ficha de militar |
1174 | Ficha de torneo de fútbol |
1147 | Ficha de compuesto químico |
1133 | Ficha de transporte público |
1083 | Ficha de partido |
1081 | Ficha de recinto deportivo |
1043 | Ficha de universidad |
1011 | Ficha de cuerpo celeste |
Se obtuvieron los siguientes resultados con Ficha de torneo de fútbol y Ficha de escritor:
Método | ARI | AMI | H | C | V | SC | Grupos | Tiempo |
---|---|---|---|---|---|---|---|---|
|
0.9920120 | 0.9811704 | 0.9811772 | 0.9811886 | 0.9811829 | 0.3779664 | 2 | 0.08299994 |
KMeansOpenCL | 0.9920120 | 0.9811704 | 0.9811772 | 0.9811886 | 0.9811829 | 0.3779664 | 2 | 0.009999990 |
DBSCAN | 0.00738551 | 0.009947429 | 0.08011485 | 0.08281686 | 0.08144345 | $-$0.45190686 | 16 | 0.1289999 |
Con Ficha de estación, Ficha de serie de televisión, Ficha de videojuego y Ficha de templo se obtuvo que:
Método | ARI | AMI | H | C | V | SC | Grupos | Tiempo |
---|---|---|---|---|---|---|---|---|
|
0.9622013 | 0.9480221 | 0.9480643 | 0.9483980 | 0.948231 | 0.405231 | 4 | 0.312000 |
KMeansOpenCL | 0.6205381 | 0.7150742 | 0.7153060 | 0.8220825 | 0.76498631 | 0.19023479 | 4 | 0.031000 |
DBSCAN | 0.00161035 | 0.002103556 | 0.04129197 | 0.1498903 | 0.06474729 | $-$0.4775756 | 65 | 0.5250000 |
En general, el algoritmo
A raíz de estos resultados se realizó una extracción de características tomando los términos exclusivos de las clases conocidas, i.e. eliminando los términos comunes de las clases. De esta forma se obtuvieron resultados prometedores.