I attach my slides for my seminar presentation on "Ontologies and Knowledge Representation".
The slides are based on the paper:
"Automatic Generation of Domain Models for Call Centers from Noisy Transcriptions " by Shourya Roy and Venkata Subramaniam
The paper considers an automatic way to build a taxonomy from raw text. It also considers potential applications of the automatic built taxonomy
martes, 11 de diciembre de 2012
lunes, 10 de diciembre de 2012
Presentacion sobre Tecnologias del Lenguaje
Hace poco hice una corta presentacion para la semana de la expresion en la Universidad del Valle sede Tulua sobre Tecnologias del Lenguaje.
Me aventure a realizar mi presentacion con www.prezi.com
La presentacion esta disponible aqui para quienes quieran verla,usarla o mejorarla;
http://prezi.com/3azvcqs6rtkr/ensenandole-a-la-computadora-a-hablar-semana-expresion-2012-univalle/
Para mas informacion sobre el evento http://comunicaciones.univalle.edu.co/InformesPrensa/2012/noviembre/OC-299-2012.html
Me aventure a realizar mi presentacion con www.prezi.com
La presentacion esta disponible aqui para quienes quieran verla,usarla o mejorarla;
http://prezi.com/3azvcqs6rtkr/ensenandole-a-la-computadora-a-hablar-semana-expresion-2012-univalle/
Para mas informacion sobre el evento http://comunicaciones.univalle.edu.co/InformesPrensa/2012/noviembre/OC-299-2012.html
lunes, 5 de noviembre de 2012
Como funciona Google Search Voice de Android - Sistema de Preguntas-Respuestas
La nueva versión de Android introduce
un sistema de búsqueda por voz mas sofisticado que en versiones
anteriores.
Pero como funciona esta tecnología?
entienden realmente estos dispositivos lo que Preguntamos?.
Como puede responder a preguntas como: ¿Cuando es el día del
padre, o ¿Cual es la
capital de Suecia?
Los Lenguajes naturales son la interfaz
de usuario mas avanzada, imaginen un dispositivo que pueda entender
en principio todo lo que decimos,
seria impresionante no? imaginen que en
vez de programar en 'lenguajes de programación' pudiéramos darles
ordenes a un alto nivel a nuestros dispositivos en espaniol, imaginen
a la abuelita programando!
En este post intentare explicar los
principios de como funcionan los sistemas de Preguntas &
Respuestas..
La diferencia entre Conocimiento e Información
Vivimos en la era de la información, o
eso dicen, pero ¿que quiere decir exactamente?
para mi quiere decir que tenemos acceso
a gran cantidad de contenidos y al mismo tiempo
que estamos en capacidad de generar
contenidos y compartirlos con otros.
Por ejemplo: compartimos contenido
cuando tweeteamos, cuando opinamos sobre productos en twitter estamos
generando información, generamos información cuando publicamos en
4square que estamos en un restaurante y que nos agrada o detestamos
lo que ordenamos para comer.
Conocimiento es usar grandes cantidades
de información para establecer ,por ejemplo, patrones de
comportamiento, tomar decisiones, predecir sucesos.
generas información cuando escuchas
música y usas el scrobber de last.fm para almacenar las canciones
que has escuchado durante el ultimo anio, conocimiento es cuando
last.fm en base a todas esas canciones te recomienda una canción
nueva que probablemente te agrade.
Ahora mismo vivimos un boom en cuanto a
la generacion de conocimiento, el boom esta tomando lugar por que
existen las plataformas para generar y compartir informacion. Esto
implica dos problemas:
1. Es demasiada información ? como
procesarla?, de allí el éxito de la computación en la nube y
frameworks como hadoop que facilitan a los desarrolladores trabajar
en ambientes distribuidos
2. La información no esta
estructurada, es decir no es una gran Base de datos a la cual podemos
consultar con sql, todo lo que la gente escribe en blogs, foros,
twitter,facebook,reddit es lenguaje natural.. el reto esta en como
extraer información y relaciones entre la información descrita en
estos lenguajes.
Recuperación de Información
Recuperación de información es lo que
ha hecho Google durante todo este tiempo. Formalmente es: dado un
conjunto de palabras clave, retornar una lista de documentos que se
relacionen con las palabras clave.
Este es el paradigma que hemos usado
todo este tiempo, Si es el mejor o no, es una discusión.
Lo que si es cierto, es que queremos
optimizar nuestro tiempo, no queremos perder nuestro tiempo buscando
y leyendo documentos que no nos interesan.
Imagina que quieres comprar un nuevo
teléfono , el teléfono X, probablemente antes de comprarlo quieras
saber:
1.Que opina la gente que ya compro
ese teléfono
2.Comparativas entre el teléfono X
y sus competidores mas cercanos
Lo que tu haces, es generar distintas
búsquedas en Google, leer un foro, probablemente alguien hizo una
pregunta en Yahoo Answers como "cual teléfono debo comprar el X
o el Y?" ..etc.. generas varias búsquedas, lees un poco de los
resultados arrojados.. ¿talvez buscas algo relacionado en twitter?,
y finalmente tomas tu decisión.
Imagina un sistema, que no solo indexe
la información de la web si no que ademas razone sobre ella,que
entienda lo que esta escrito.
Entonces le podrías decir que te haga
un resumen/compendio sobre el teléfono X, y en vez de una lista de
sitios web , te devuelva talvez una lista solo con las opiniones,
comparaciones que es realmente lo que te interesa para tomar tu
desicion...
esto, para mi, es la recuperación de
inforamcion en el futuro...¿por que? : por tiempo (vas a usar menos
tiempo), el resultado que obtengas sera tan preciso como sea tu
pregunta, y si no es precisa sera un overview a gran escala de muchas
fuentes diferentes, así, talvez los resultados que obtengas no sea
información si no, conocimiento, eso es el poder de la información.
Ok... lo anterior fue un poco de
fantasía, talvez en 5? 10? anios?, no lo se.
Aterrizando un poco al 2012 creo que
Google le apunta a ello, tienen la información y quieren procesarla,
de allí apuntarle a los sistemas de preguntas y respuestas.
Sistemas de Pregunta/Respuesta
A un sistema de preguntas y respuestas,
le lanzas una pregunta, el sistema en vez de responderte con una
lista de documentos que se relacionen con las palabras en la
pregunta, te da una respuesta concreta o cercana a la pregunta que
fue ingresada.
¿Esto es magia?.. no, es procesamiento
de lenguaje natural.
Lo que probablemente esta haciendo
Google en estos momentos es generando una ontologia ( una
representación del conocimiento) donde se especifican conceptos y
relaciones entre esos conceptos. Creo que ello hace parte de lo que
ellos llaman
"TheKnowledge Graph" , si van al sitio web, pueden navegar
entre conceptos (ejemplo: Italia) y como se relaciona un
concepto con otros (ejemplo: Italia<-> davinchi).
La que probablemente están haciendo es
algo llamado: OpenInformation Extraction, que consiste en extraer
conceptos y relaciones de texto en lenguaje natural.
Por ejemplo, a partir de un noticia que
diga:
"La esposa de barack
obama, michell, ha participado con la fundación X..."
El sistema de Google extrae un
registro:
( michell obama, participar,
fundacion X)
Obviamente mas relaciones son posibles
aun para este ejemplo juguete que acabo de dar.
Ejemplo:
A partir de esos registros crea una
ontologia como la 'the knowledge graph' automáticamente.
Obviamente esto requiere muchos
procesos relacionados con inteligencia artificial , tienes que
entrenar sistemas para que reconozcan cosas mas avanzads por ejemplo
que a partir de una relación como :
"X fue asesinado por
Y" se concluye que otra relacion : "X esta
muerto"
se que parece muy sencillo, pero a
nivel computacional es muy muy difícil, por que involucra lo que
llamamos "sentido común"...
Apatir de esta ontologia se puede crear
un sistema que permita responder preguntas, aquí el sistema tiene
que 'entender la pregunta'.. y en base a ello calcular la posible
respuesta
¿Como entender la pregunta y encontrar la respuesta?
Lamentablemente no contamos con
sistemas muy avanzados con respecto al entendimiento de lenguajes. En
mi humilde opinión, solo son trucos estadísticos que crean la
fantasía que la computadora puede entender lo que decimos.
Supongamos que la pregunta al sistema
es, "donde murio Michael Jackson?".
El componete del sistema encargado de
procesarla se fija en varias cosas:
1,Encontrar una partícula que le
indique que tipo de pregunta es y que es lo que esta buscando.
en este caso "Donde" le
indica que lo que esta buscando como respuesta es una "locación",
lo que sea la respuesta debe de ser en su base de conocimientos una
"locación"..
2.Encontrar el tema de la pregunta, tiene que descartar las palabras menos relevantes, y encontrar la mas predominante, en este caso el tema es "michael Jackson".
3.Usar las palabras del contexto para encontrar posibles relaciones. en este caso podría ser la palabra "morir"..
A partir de ello el sistema sabe que
va a buscar algo en la ontologia que tiene que ver con "Michael
Jackson", que lo que va a retornar como respuesta tiene que ser
una locación en la ontologia, y ademas que la relación entre ese
lugar y "Michael Jackson" tiene que ver con:
"muerte","morir"..
Peros...
Pero como saber si todas las relaciones
que se extraen son correctas? que tal si alguien escribe: "Michael
Jackson murio en Bogota, Colombia..."" entonces la Base
de conocimientos es errónea..y las respuestas serán erradas..
Lo que ocurre en este tipo de casos es
que muy probablemente Google descarta las relaciones encontradas en
ciertos sitios, o usa por ejemplo el sistema de búsquedas actual
lanzando una búsqueda como "michael jackson muere en bogota"
si esta consulta arroja menos de cierta cantidad de resultados
entonces la considera como una relación falsa.
Una pregunta con la partícula "Donde"
es fácil de responder, buscas un lugar, pero ¿que pasa con: "Como"
o "Por que"?..
estas preguntas requieren un
razonamiento mas avanzado, y no creo que tengamos pronto un sistema
que pueda resolverlas.
Finalmente..
El tema de lenguaje natural es algo
filosófico al momento:) lo que si es seguro es que companias como
Google y Apple le apuesten fuertemente a iniciativas en esta
dirección, y en mi opinión el siguiente gran salto en interfaces de
usuario va relacionado con poder entender los lenguajes naturales y
poder generar frases en estos lenguajes tal que estas frases suenen
lo menos robóticas posibles. (alguien ha escuchado a Hatsune Miku?
<3 )
este es un articulo divertido con varias preguntas que le hacen al sistema "70 things to try with Google's Android 4.1 Voice Search"
Espero este articulo les de una idea de
como funcionan ciertos servicios, los cuales probablemente se van a
volver muy sofisticados en los próximos anios.
@dav009
Etiquetas:
android,
answering,
google search,
jelly bean,
lenguaje natural,
nlp,
pln,
procesamiento de lenguaje natural,
question,
question answering system,
sistema preguntas y respuestas,
the knowledge map
jueves, 25 de octubre de 2012
Analizadores Sintacticos : Dependency Parsing
Analizadores Sintacticos : Dependecy Parsing
Un Analizador Sintactico es un componente de Software cuya entrada es una oracion especificada en un lenguaje (formal o no formal) y como salida arroja una estructura que representa las relaciones entre los componentes de la oracion de entrada.
En Ciencias de la computacion normalmente un parser o analizador sintactico es un sub-componente de los compiladores de los lenguajes de programacion.
Este componente se encarga de asegurarse que las intrucciones esten definidas correctamente segun una gramatica.
Adicionalmente el analizador sintactico retorna una estructura de datos, usualmente un arbol que establece relaciones entre los componentes de la oracion de entrada, usualmente este arbol es usado posteriormente por un analizador semantico que se encarga de 'traducir' el significado de una oracion a lenguaje de maquina.
Los lenguajes de programacion se consideran lenguajes formales y parsearlos es, digamos, un problema resuelto.
Parsing en Procesamiento de Lenguaje Natural
En el procesamiento de Lenguaje Natural existen componentes de software que analizan sintacticamente una oracion. Sin embargo en el contexto de lenguajes no formales el reto es mas complicado, existen una gran cantidad de variaciones, y posibilidades para expresar ideas, de manera correcta.
A nivel Linguistico existen muchas discusiones en las que se debaten como saber si algo es gramatical o no, la mejor respuesta al momento es: preguntele a un nativo de ese idioma si una frase es gramatical o no.
A nivel de Lenguaje Natural existen algoritmos de parseo muy conocidos como es el Algoritmo de CYK(Cocke–Younger–Kasami), este algoritmo recibe una gramatica libre de contexto que especifica las reglas para formar oraciones correctas en un lenguaje (por ejemplo: espaniol, ingles...etc) y apartir de estas reglas es capaz de establecer :
- Si una oracion es correcta o no con respecto a la gramatica
- En caso de ser una oracion correcta construye un arbol de derivacion sintactica. Es decir un arbol en el cual se especifica la relacion entre los componentes de la oracion con respecto a la gramatica especificada
El arbol en la imagen representa la salida de un analizador sintactico para la oracion "john ha limpiado la impresora".
NP= Noun Phrase (frase Nominal)Este arbol fue establecido a una gramatica que define cada uno de los componentes anteriormente mencionados. Las gramaticas en este caso CFG( context free grammar) usualmente se escriben en notacion BNF.
Aux=Verbo Auxiliar
VP=Verb Phrase (Frase Verbal)
Det =Determiner = Determinante
N=Noun=Sustantivo
En esta gramatica almenos deberia existir una regla que diga por ejemplo que:
S=NP AUX VPPara poder generar este tipo de arboles sintacticos se necesita de un experto, seguramente un linguista que pueda especificar las reglas del lenguaje que se desea modelar. Ello puede ser un trabajo muy arduo y complicado, se necesitan muchas reglas para poder capturar la esencia de un lenguaje.
Npr= John
N=impresora
NP=Npr | DET N
...
Dada la dificultad mencionada se empezo a usar aprendizaje de maquina para construir analizadores sintacticos que puedan aprender en base a un conjunto de ejemplos con arboles de parseo.
De esta forma no se necesita de la especificacion de miles de reglas para cosntruir un analizador que arroje resultados medianamente buenos.
Dependency Parsing
El analisis sintactico que mencione en la seccion anterior genera arboles que establecen la relacion entre los constituyentes linguisticos de una oracion, es decir establece cual es la verbo de una oracion, y atraves de la construccion del arbol establece cual es posible sujeto y objeto de una oracion.
Este tipo de parseo resulta no solo computacionalmente caro (la complejidad de CYK(O(N^3)) ) si no que ademas el resultado es dificil de usar en las aplicaciones.
Los analizadores sintacticos nacieron de la necesidad de tener un analizador sintactico que sea computacionalmente mas 'barato' y cuyos resultados sean mas faciles de usar a nivel aplicativo.
Un analizador sintactico retorna como salida un Grafo dirigido no ciclico, este grafo recibe el nombre de grafo de dependencias.
En este grafo las palabras corresponden a Nodos y las aristas corresponden a relaciones entre palabras.
Cada arista del grafo tiene una etiqueta que identifica la relacion entre las dos palabras.
Ejemplo:
En este ejemplo 'Subj' significa que la relacion entre john y hit, es la de 'sujeto'.
Y que 'the' es el determinante de 'Ball'.
Es una estructura mucho mas simple que la de un arbol de constituyentes (La imagen del primer ejemplo) porque es una estructura mas facil de procesar computacionalmente hablando, pues no contiene otros constituyentes anidados como es el caso del primer ejemplo.
El parseo por dependencias se usa en una gran cantidad de aplicaciones, por ejemplo en extraccion de informacion para identificar cuales son los objetos asociados a una relacion, extraccion de entidades...
Existen dos implementaciones de Analizadores sintacticos muy famosas, el MaltParser y el MSTParser.
MaltParser
Web: http://www.maltparser.org/
El MaltParser funciona usando un algoritmo basado en transiciones.
Basicamente tiene una serie de estados y un clasificador basado en ejemplos es capaz de determinar para cada caso en particular que estado es el mas adecuado para llegar a un grafo de dependencias correcto.
Para la toma de esta desicion el clasificador entrenado toma en cuenta que tipo es la palabra que actualemtne esta analizando, que otras palabras se encuentan alrededor, que otras relaciones ha identificado al momento.
El Maltparser ha arrojado en sus experimentos buenos resultados con lenguajes cuyo orden es menos flexible por ejemplo: chino, ingles, espaniol.
Para lenguajes donde el orden es flexible Mlatparser tiene problemas , es el caso de turco y checo por ejemplo.
Lo anterior se debe a que el MaltParser asume ciertas restricciones sobre los grafos de dependencias, estas restricciones no le permiten manejar cierta cantidad de construcciones que son mas comunes en lenguajes cuyo orden es mas flexible.
MSTParser
Web: http://www.seas.upenn.edu/~strctlrn/MSTParser/MSTParser.html
Este Constructor de Analizadores Sintactico aprende al igual que el Malt apartir de una serie de ejemplos parseados.
Apartir de esos ejemplos el MSTParser es capaz de calcular una funcion que dado un grafo evalua que tan probable es que ese grafo sea correcto. Apartir de esa funcion esta estrategia busca dada una oracion, el grafo para esa oracion cuyo valor es el maximo.
El MST es en otras palabras un problema de optimizacion donde se busca el grafo con mayor peso posible segun una funcion de peso.
Comparacion
Ambos Malt y MST tienen puntajes excelentes de porencima del 80% analizando sintacticamente diferentes lenguajes.
El MaltParser usa un algoritmo que es Voraz (Greedy) para cada estado dentro de su procesamiento escogera aquel que parezca de momento el mas adecuado. En contraste el MSTParser busca dentro todo el espacio de posibles grafos, cual seria la combinacion mas apropiada para obtener el grafo mas probable.
Ambos tienen sus ventajas y desventajas. Por ejemplo el MaltParser es capaz de capturar con mejor rendimiento construcciones particulares, esto con el costo que un error sera propagado para el resto de las desiciones a tomar.
Algunos Papers han propuesto la union de ambos metodos, como es el caso de: Integrando MST y MALT
Material Sobre el tema: Diapositivas de una mis presentaciones acerca del tema en un Seminario de mi maestria.
miércoles, 24 de octubre de 2012
Computacion Distribuida - Hadoop y otros frameworks
Procesar lenguaje natural usualmente plantea tres escenarios:
- Se requiere procesar una gran cantidad de datos para obtener buenos resultados
- El procesamiento que tiene que realizarse es muy complejo (computacionalmente hablando)
- La combinacion de los escenarios anteriores.
La opcion mas obvia es actualizar la maquina con mas memoria ram o procesador, pero esta no es una solucion escalable a medida que el volumen de datos o la complejidad de diferentes procesamientos empiezan a aumentar.
Es alli cuando viene la idea de formar clusters de computadoras. En vez de tener una super computadora que resuelva el problema, es mas eficiente, barato y escalable tener muchas computadoras que puedan resolver un problema de manera conjunta.
Escalable? si, porque aumentar el poder computacional consiste simplemente en agregar nuevas computadoras al cluster.
Desde el punto de vista del desarrollo de software, resolver el problema en el cluster plantea retos, primero el problema tiene que ser divido, luego tiene que asignarse porciones de ese problema a cada maquina dentro del cluster y adicionalmente debe existir un mecanismo de comunicacion entre cada computadora para resolver el problema eficientemente.
Aqui es cuando Hadoop entra en juego.
Hadoop
Hadoop es un sistema de archivos distribuido basado en el google file system y adicionalmente es un framework con el paradigma map and reduce que facilita el desarrollo de soluciones de manera distribuida. Es decir, que para el usuario de hadoop es transparente todo lo relativo a como se distribuye y se solucionan los problemas a bajo nivel, el desarrollador solo se preocupa por la logica para solucionar el problema.
Hadoop empezo como una extension a apache lucene (framwork de recuperacion de informacion) y como una alternativa libre luego que google publicara un paper donde describian un sistema de archivos distribuidos que ellos llaman Google File System.
Eventualmente Yahoo, que tenia problemas de escalabilidad y estaba construyendo su propia solucion decidio aportar al desarrollo de Hadoop contratando a algunos de sus desarrolladores y usando Hadoop para solucionar varios problemas de escalabilidad en su buscador.
Hadoop es usado por companias como facebook, last.fm y yahoo.
HDFS (Hadoop Document File System)
Empezare por el sistema de archivos llamdo Hadoop Document File System (HDFS), es basicamente un sistema de archivos distrubidos basados en el GFS.
En un sistema de archivos distribuidos un archivo no se encuentra en su totalidad en una maquina, sino que se encuentra distribuido entre diferentes maquinas, y adicionalmente esta replicado 3 veces para asegurar su persistencia.
Ventajas
La capacidad de almacenamiento en discos duros ha aumentado notablemnte en los ultimos 10 anios, sin embargo la velocidad de lectura no va al mismo ritmo.Esto quiere decir que leer un archivo por completo en un solo disco duro va a tardar mas, que si leemos pequenos trozos de el, en muchos discos duros al mismo tiempo.
Esto representa rapidez y escalabilidad en cuanto a capacidad de almacenamiento.
Map and Reduce
Map and reduce tambien fue introducido por Google, es un concepto muy sencillo basado en dividir y conquistar y el paradigma funcional.
Map and reduce es un paradigma para plantear y resolver un problema. De esta forma el desarrollador expresa su problema usando este paradigma y hadoop se encarga de todos los detalles a bajo nivel que tiene que ver con computucion distribuida.
Map & Reduce consiste basicamente en la definicion de dos funciones: la funcion Map, y la funcion Reduce.
La funcion Map se encarga de partir la entrada en subproblemas en tuplas (llave,Valor) , la funcion Reduce se encarga de unir las tuplas cuya llave es la misma, y resolver el problema en particular.
Por ejemplo, si quisieramos leer un texto y hacer una tabla de frecuencias de cuantas veces aparece una palabra usando map & reduce tendriamos algo parecido a:
funcion map(Texto):
Para Palabra en Texto:
emitir(llave: palabra, 1)
funcion reduce(llave, valores):
cuentaTotal=largo(valores)
emitir(llave, cuentaTotal)
Map en este caso se encarga de leer cada palabra del texto de entrada y de emitir un evento con una tupla, cuya llave es la palabra, y un valor, en este caso 1.
Reduce se encarga de recibir una llave con una lista de valores. Esta lista de Valores es la concatenacion de varios valores emitidos por map con la misma llave.
Reduce cuenta cuantos elementos tiene la lista, lo cual equivale a cuantas veces ha sido vista la palabra llave. Finalmente emite un evento, donde registra el resultado de contar cuantas veces fue vista la palabra llave.
Ejemplo:
suponga que el texto es:
"A B C D A A B C"
map emitiria: (A,1) , (B,1) (C,1), (D,1) (A,1)(A,1),(B,1),(C,1)...
por lo cual la funcion Reduce seria llamda con los siguientes valores:
reduce(A, [1,1,1]) , como resultado emitiria : (A,3)
reduce (B, [1,1]), como resultado emitiria: ( B,2)
...
Para el desarrollador en hadoop bastaria con implementar estas dos funciones.
Todo lo demas estaria acargo de Hadoop.
A continuacion escribo una breve descripcion sobre otros framework construidos sobre hadoop y que facilitan tareas de desarrollo.
Cascading
Para problemas mas complejos un solo map & reduce no es suficiente, probablemnte se requieran de varios map-reduce.
En este tipo de problemas el desarrollo puede convertirse en algo sucio, pues se tienen que manejar una cantidad de llaves ,tuplas y transformaciones entre tuplas.
Cascading es un framework hecho sobre hadoop que ayuda a desarrollar problemas mas complejos siguiendo el paradigma map & reduce.
Hive
Es un framework de Datawarehousing que funciona sobre hadoop.
Las bases de datos corrientes funcionan sobre estructuras de datos basadas en B-Trees.
El problema con estas estructuras de datos es que tienen limites de escalabilidad.
Facebook funcionaba sobre una BD oracle, en su momento cuando tuvo problemas de escalabilidad empezo a usar hive para hacer analisis sobre sus bases de datos.
Hive permite hacer consultas en un lenguaje muy parecido a SQL, la diferencia es que estas consultas corren a bajo nivel con procesos map&reduce, y que la base de datos esta distribuida usando HDFS.
web: http://hive.apache.org/
Etiquetas:
big data,
cascading,
cluster,
Escalabilidad,
framework,
gfs,
hadoop,
hdfs,
map,
natural language processing,
nlp,
pln,
procesamiento,
procesamiento de lenguaje natural,
reduce,
system
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:
- Cargar Tweets en base a un Query. i.e: "Uribe Velez"
- Preprocesar los Tweets. quitar tildes y caracteres indeseados i.e : "#"
- Aplicar POS(Part of Speech) Tagging.
- Quitar palabras cuyas etiquetas POS no interesen
- Quitar StopWords
- Calcular la frecuencia de las palabras
- 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]
Etiquetas:
espanol,
extraccion de informacion,
gource,
grafos,
IE,
mineria,
nlp,
nltk,
part of speech,
POS,
twitter
Suscribirse a:
Entradas (Atom)