jueves, 8 de marzo de 2012

El Problema del Parafraseo.

Esta vez escribo un poco sobre lo que estoy haciendo en mi trabajo.
Trabajo en un proyecto que pretende modelar el sentido común.
Al momento estamos resolviendo un sub-problema que tiene que ver con el parafraseo.



El problema del parafraseo consiste en determinar automaticamente cuando 2 frases tienen la misma interpretación. Y cuando escribo automaticamente, me refiero a que la computadora lo haga.


Cuantas formas existen de expresar el mismo contenido?
Infinitas! Los lenguajes son creativos y variables.

Variables? Si!, variables!!
Por ejemplo, pensemos en una persona, digamos Obama. Puedes referirte a el como "el presidente", "Obama", "Barack O.","B. Obama ". Un solo concepto puede expresarse linguisticamente de diferentes formas.

 Creativo?
Es un poco mas difícil de explicar, pero la idea es que puedes  adornar una frase infinitamente de cuantos atributos,adjetivos,adverbios y aclaraciones quieras.

 Parafrase?
Imagina que estas en tu casa y acabas de terminar el almuerzo, tu mama puede decir "lleva los platos a la cocina"."recoje los platos" o "limpia la mesa".

En esta situación podríamos pensar que todas esas 3 frases significan "mas o menos" lo mismo.
Se que alguien se preguntara, pero "limpia la mesa" podria referirse a mas que simplemente levantar los platos, o que "recojer los platos" no necesariamente implica llevarlos a la cocina.
Pero dada la ambientacion sobre la situación, es muy probable que todas signifiquen 'mas o menos' la misma actividad.
Y en esto juega un papel importante el 'Sentido Comun', sabemos  [a menos que sea un lugar/situación fuera de lo común] que normalmente lavamos los platos en la cocina, y por eso no mencionamos a donde hay que llevar los platos, es 'simple' 'Sentido Comun'.


La Computadora puede encontrar parafrases?

Como hacerlo de manera automática es aun una pregunta sin respuesta.

Linguisticamente se ha establecido que el significado de una frase es la suma del significado de sus componentes [exceptuando los mal llamados 'dichos'].

Existen Ontologías como WordNet que permiten calcular la similitud entre dos palabras(no frases), apartir de grafos y conjuntos de sinónimos, lastimosamente su precision deja mucho que desear.
Sin embargo para las soluciones actuales, WordNet es un feature que no se puede despreciar.
No es un feature suficiente para la solucion  del problema, pero si necesario.

Lo que estamos haciendo  actualmente es definir un modelo de optimizacion (algunos lo llaman ILP(integer linear Programming), otros lo llaman investigación de operaciones).
En este modelo se definen restricciones y una funcion objetivo que se desea maximizar.

La idea es encontrar clusters(conjuntos) de parafrases de tal forma que el valor que se calcule de la función objetivo sea la máxima.

Que Features usar?
Bueno, la similaridad semántica establecida por WordNet, Similitud de los actores (sujetos y objetos) de las frases, entre otras. :)






domingo, 4 de marzo de 2012

Mineria de Tweets en Espanol

[ Offtopic Primer post,quiero seguir escribiendo en español porque no hay mucha información sobre Procesamiento del lenguaje Natural escrita en espaniol. Sin embargo espero perdonen mis bajos niveles ortográficos  y especialmente mi desinterés por escribir con tildes. ]


Luego de leer este post: 
sobre  extracción de información ingenua en twitter, me decidí a realizar una re-implementación  para espaniol. La re-implementación la realice en 1 día.

En la imagen se ve un árbol que relaciona los términos mas relevantes y populares escritos por los tweeteros colombianos en la ultima semana de febrero.
 Aproximadamente 4000 tweets. 

Cada nodo blanco representa un keyword, y los nodos naraja representan tweets acerca de ese tema. 
Cada arista conectando dos nodos representa un termino adicional.
Por ejemplo en este árbol el termino principal es "FARC" apartir de ese termino se desprenden otros conceptos que tienen que ver con la raíz. por ejemplo : secuestrados.

Extracción sobre los Trends de la ultima semana de Febrero para Colombia

Extracción sobre  los Trends de la ultima semana de Febrero para Colombia

Extracción sobre "cosasQueAmanLasMujeres" (Al parecer comprar: ropa, zapatos, tacones, helados y besos en el cuello  y sufrir por amor[según los tweets] )


El post sobre visualizacion en tiempo real de tweets, me causo curiosidad porque se parece en algo a mi trabajo actual, así que decidí reproducir los resultados lo cual no fue muy difícil pues la implementación mencionada en el post tomo tan solo 2 días y es bastante simple.

El español en extracción de información implica mayores dificultades que el ingles, 
puesto que las herramientas de base para la construccion del extractor tienen menos precisión que las herramientas usadas para ingles. Además el español es morfologicamente mas activo que el ingles.

Me decidí a seguir en general las mismas pautas establecidas para la extracción propuestas por el post, agregando pequeñas adaptaciones para extraer menor cantidad de basura. Así que aplique los siguientes pasos:

  1. Cargar Tweets en base a un Query. i.e: "Uribe Velez"
  2. Preprocesar los Tweets. quitar tildes y caracteres indeseados i.e : "#"
  3. Aplicar POS(Part of Speech) Tagging. 
  4. Quitar palabras cuyas etiquetas POS no interesen
  5. Quitar StopWords
  6. Calcular la frecuencia de las palabras
  7. Clasificar los tweets extraidos en base a las palabras con mayor frecuencia usando un árbol.

POS (Part of Speech) Tagging: Es un tarea común en el procesamiento del Lenguaje Natural , consiste en encontrar una etiqueta para cada palabra de una cadena de caracteres. Esa etiqueta equivale a la función gramatical de la palabra dentro de la cadena.

Por ejemplo:

si la cadena de entrada es : "Juan visita Alemania"
Un POS tagger puede etiquetar la cadena de la siguiente forma "N V N"
donde :
  • N(Noun) indica que "Juan" es un Sustantivo
  • V(Verb)indica que "visita" es un Verbo
  • N(Noun) indica que  "Alemania" es un Sustantivo
 POS tagger es una herramienta que realiza POS Tagging. 

Un POS tagger puede ademas retornar información adicional por ejemplo , cual es el infinitivo de un verbo, si identifico que una palabra era un verbo.
Esto resulta útil, porque muchos tweets se pueden referir a un mismo verbo con diferentes inflexiones en tiempo y numero.
Por ejemplo un tweet puede decir "comprando" , mientras otro "compre".

 La infomacion de POS tagging es útil para que el árbol  final sea mas refinado y que no existan variaciones para acciones comunes, que se refieren exactamente a la misma actividad.
Para realizar el POS tagging se uso TreeTagger, creado por Helmut Schmid de la Universidad de Stuttgart. [1]

StopWords son palabras comunes que no aportan ningún sentido. Artículos como "el" , "eso", "ella", y algunas preposiciones suelen ser muy comunes y suelen ser removidas.
Existen listas ya establecidas de Stopwords, por ejemplo el paquete nltk[3] para python trae una lista pre-establecida de stopwords que pueden ser usadas.

Calcular la frecuencia de las palabras, consiste en encontrar, luego de toda la limpieza ya mencionada , las palabras mas populares de los tweets.
Esas palabras son usadas en la construccion del árbol.

Para la visualizacion del árbol se uso Gource. [2]