NLP

897 views

Published on

Material para el curso de Big Data

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
897
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
43
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

NLP

  1. 1. CURSO NLPIntroducciónTema 1 ­ HistoriaTema 2 ­ Conceptos sobre NLPTema 3 ­ NTLKTema 4 ­ OpenNLPTema 5 ­ StanbolTema 6 ­ Curiosidades1
  2. 2. IntroducciónUna de las tecnologías en las que más se está trabajando actualmente es en el procesamiento                             del lenguaje natural. Sus siglas en inglés son NLP, pero no hay que confundirlas con Neuro                             Linguistic Programming, que hace referencia a otro campo completamente diferente.El procesamiento del lenguaje natural pretende que las máquinas sean capaces de entender el                         lenguaje humano, ya sea escrito, oral o incluso imágenes. Todo esto implica muchísimo                       desarrollo no solo tecnológico, sino un amplio entendimiento del lenguaje. Hay que tener en                         cuenta, por ejemplo, que en lenguajes como el inglés o el español, las palabras están                           perfectamente separadas, ya sea por un espacio o un signo de puntuación. En cambio, en                           idiomas como el chino, esto no sucede, por lo que lo que parece tan simple como separar                               palabras se convierte en una tarea muy complicada.¿Qué permite que una máquina sea capaz de entender texto escrito? Con toda la información                           que hay actualmente en Internet, poder entender lo que se dice habilita la posibilidad de realizar,                             por ejemplo, búsquedas más concretas. O por ejemplo, realizar un resumen completo de la                         Wikipedia por idiomas de los artículos que hablan sobre un tema concreto de forma positiva.Hay partes del NLP que ya están prácticamente solucionadas; otras, en cambio, aún les queda                           un largo camino por recorrer. De hecho, esto del procesamiento del lenguaje natural no es algo                             del siglo XX, sino que viene de más atrás. Comenzaremos hablando sobre la historia y                           evolución del NLP.2
  3. 3. Tema 1 ­ HistoriaAunque los primeros datos sobre investigaciones en este campo datan del siglo XVII, no es                           hasta 1950 cuando Alan Turing publica su artículo “Computing Machinery and Intelligence” y                       propone lo que hoy en día se llama el Test de Turing. Dicho test es un criterio de inteligencia, y                                     lo que mide es la capacidad o habilidad que tiene un programa de ordenador de imitar a una                                 persona en una conversación escrita en tiempo real.En 1954 sucedió el experimento de Georgetown, donde consiguieron traducir más de 60 frases                         del ruso al inglés. La curiosidad de esto es que se hizo de forma completamente automática,                             sin que ninguna persona ayudara en el proceso. Al finalizar, la conclusión fue que en poco                             tiempo se conseguiría que esto fuese completamente automático. Diez años más tarde,                     habiendo sobrepasado las expectativas de forma negativa, esta investigación fue recortada.                   Hubo que esperar hasta 1980 a la construcción de los primeros sistemas de traducción                         estadísticos. Hoy en día, aún no se ha conseguido de forma perfecta.Sin embargo, en medio de todo este lío, hubo una serie de avances muy buenos. Entre ellos                               está el Universal Grammar en 1957, de Noam Chomsky, un sistema basado en reglas de                           estructuras sintácticas. Y por supuesto, SHRDLU, un programa que entendía en lenguaje                     natural y permitía al usuario entablar algo parecido a una conversación con la máquina a través                             de diferentes métodos, y ELIZA, cuya parte más famosa se llamaba DOCTOR (Rogerian                       psycotherapy) y permitía al usuario mantener una conversación algo primitiva.Hasta 1980, la mayoría de los sistemas NLP estaban basados en conjuntos de reglas                         3
  4. 4. complejas escritas a mano. Sin embargo, a principios de esa década, las cosas comenzaron a                           cambiar gracias a la introducción de los algoritmos de aprendizaje. ¿Por qué surgieron estos                         algoritmos? Principalmente por dos razones:● El incremento de la potencia computacional.● Disminución del dominio de las reglas de Chomsky.A pesar de esto, algunos algoritmos eran muy parecidos a los que se hacían a mano. Por                               ejemplo: el algoritmo de árboles de decisión. Dicho algoritmo se parecía notablemente a una                         gran serie de reglas if­else creadas a mano. Otros se basaban en inferencia estadística, pero                           todos tenían una serie de ventajas respecto a las reglas escritas a mano:● Se centraban en la mayoría de los casos, cuando las reglas escritas a mano suelen                           centrarse en casos específicos.● Uso de algoritmos de inferencia estadísticos.● Se hacen más precisos según se les dé más datos (entrenamiento).De aquí salen conceptos como el NLL o Natural Language Learning.También se han realizado investigaciones centradas en modelos estadísticos. Dichos modelos                   realizan decisiones probabilísticas basándose en una serie de pesos reales otorgados al texto                       de entrada.Actualmente, los mayores logros conseguidos están divididos en dos campos:● Traducción automática (machine translation)● Algoritmos de aprendizaje.4
  5. 5. Tema 2 ­ Conceptos sobre NLPPara comenzar esta sección, conviene también hablar ligeramente sobre la web semántica. La                       web semántica introduce un nuevo concepto en la web y es introducir información en la web de                               una forma que las máquinas lo puedan entender, tanto de forma directa como indirecta. Aquí                           hay dos visiones separadas:● Sintáctica, el estudio de la gramática (cómo se dice algo)● Semántica, el estudio del significado (qué significa lo que se dice)El problema entonces reside en el HTML. El HTML define la sintaxis de la web, pero no la                                 estructura de la misma. Por eso, las máquinas no pueden entender el significado de una página                             HTML. Se quiere pasar de un conjunto de elementos enlazados a un conjunto de elementos                           relacionados. Es por esto que HTML5 introduce nuevas etiquetas para la estructura de una web:● <nav>: bloque de navegación● <footer>: pie de página● <article>: contenido de la páginaEn cuanto a los enfoques de la web semántica, se pueden distinguir dos:● Top­down: análisis de la información, Web Scraping, NLP.● Down­top: incluir anotaciones semánticas en la información.Para el NLP, el primer punto es muy costoso. Algunas de las razones son porque necesita                             intervención humana, necesita mucho trabajo de mantenimiento o incluso puede conllevar                   problemas legales. El segundo punto, suele apoyarse en los RDFs. Los RDFs (Resource                       Description Framework) contienen sentencias simples formadas por tres elementos para                 describir los recursos de la Web.Para poder realizar consultas sobre RDFs, es necesario utilizar SPARQL. Por ejemplo, buscar                       5
  6. 6. todos los actores de televisión italianos en dbpedia (http://querybuilder.dbpedia.org/):De todo esto sale el concepto de la Web 3.0:● Web estandarizada y semántica● Poner orden y estructura donde antes había “caos”● Estándares de cambio de información de W3C● Movimiento de los agentes virtuales, “cloud computing” y “big data”● Etc.Hasta aquí el tema de la web semántica, pero ¿qué tiene que ver NLP con todo esto? El objetivo                                   principal sobre NLP es poder entender lo que se dice en el lenguaje humano. Para poder                             entender, hace falta realizar dos pasos:● Analizar, bien sea texto, voz o imágenes.● Parsear.Para el primer punto, analizar la voz necesita un paso previo y es transformar la voz en texto.                                 En cuanto a las imágenes, este es un campo en el que se está trabajando actualmente.Básicamente este es el proceso que siguen los humanos, y es lo que se busca que hagan las                                 máquinas. Pero ¿por qué es tan difícil? Existen varias complejidades que, a pesar de ser fáciles                             de detectar para los humanos, no lo es para un programa:● Crash blossom, concepto que hace referencia a que una frase tenga 2 o más                         significados.● Ambigüedad● Lenguaje no estándar o coloquial● Problemas de segmentación● Idiomas● Neologismos● Conocimiento mundial● Nombres de entidades “con truco”● Etc.Un ejemplo de crash blossom puede ser: “Teacher strikes idle kids”. Esta frase puede tener dos                             significados: si el verbo es strikes y idle es adjetivo o si el verbo es idle y strikes es nombre.                                     Además, el significado es totalmente diferente.6
  7. 7. Detectar la ambigüedad es muy difícil y a veces imposible. Por ejemplo: “Jon no quiere a su                               hermano porque es muy envidioso”. Y la pregunta a responder sería, ¿quién es envidioso? ¿Jon                           o su hermano? Con este pedazo de texto es imposible saberlo. A veces la ambigüedad también                             tiene que ver con que una palabra tiene varios significados.Otro ejemplo de dificultad son los problemas de segmentación. Normalmente las palabras están                       separadas por espacio o algún signo de puntuación, por ejemplo, el punto. Pero ¿y si son unas                               siglas? El punto ya no vale como separador. Además, el hecho de que una coma esté en un                                 sitio y otro de una frase puede modificar mucho su significado. Véase el siguiente ejemplo:● Si no fumas mucho, mejor.● Si no fumas, mucho mejor.El simple hecho de modificar la coma delante o detrás de la misma palabra hace que el                               significado cambie totalmente. Se verá más adelante que, entre otras cosas, el NLP intenta                         hacer fácil el análisis de sentimiento de los textos. Un cambio de coma puede hacer una frase                               cambie de positiva a negativa totalmente.Hasta ahora solo se han visto teorías y dificultades, pero ¿cómo se aplica todo esto? Veamos                             un ejemplo. Imaginémonos que tenemos un montón de libros y relatos sobre la guerra civil                           española y necesitamos saber de ellos qué pensaban las personas implicadas en la guerra                         sobre Dios. Para ello, volviendo al año actual, deberíamos contratar a una persona para que se                             lea cada uno de los libros y relatos de los que disponemos, entendiendo y anotando lo que lee                                 para extraer información sobre el tema solicitado. Posteriormente escribirá el resultado.                   ¿Cuánto tarda en hacer todo esto? Pongamos que aproximádamente 5 meses. El primer paso                         que se dio en todo esto fue la digitalización. Gracias a este proceso, todos los libros están en                                 formato texto que una máquina puede indexar. Al poder indexarlo, se puede poner un motor de                             búsqueda sobre estos contenidos. ¿Qué pasa si buscamos la palabra Dios? Pues                     seguramente aparezcan frases en las que esté esta palabra, pero seguramente no tengan nada                         que ver con lo que pensaban. Pero, indudablemente se ha reducido el tiempo de trabajo de esta                               persona, ya que solo tiene que leer ciertos pasajes en vez de todos los contenidos al completo.                               Su tiempo se ve reducido, y puede tardar 5 días en realizar el trabajo. Pero ¿y si entendemos lo                                   que el texto pone? Lo que intenta el NLP es, a través de un análisis y una serie de procesos,                                     extraer información y estructura del contenido. De esta forma, se podría extraer directamente                       los únicos pasajes de los contenidos que hablen del tema solicitado. Si además el programa es                             capaz de realizar el resumen y conclusiones automáticamente, ni siquiera necesitamos a una                       persona para hacer este trabajo: estaría hecho en 5 minutos.Actualmente, el uso de NLP está bastante extendido. Los siguientes elementos son algunos de                         los ejemplos de utilización de esta tecnología:● Motores de búsqueda.● Recomendaciones de sitios.● Filtro de spam.● Bases de conocimiento y sistemas expertos.7
  8. 8. ● Sistemas automáticos de soporte al cliente.● Publicidad.● Analíticas de comportamiento de consumidores.Pongamos un ejemplo de cada uno de ellos. En cuanto a los motores de búsqueda, Google por                               ejemplo. Según estás escribiendo es capaz de darte una serie de recomendaciones de la                         palabra siguiente incluso auto­completarte la palabra que estás escribiendo, basándose en                   búsqueda anteriores y en collocations (pequeñas secuencias de palabras que aparecen juntas                     normalmente).Las recomendaciones de sitios son por ejemplo “quizás te interese visitar también...”. Estas                       recomendaciones, para tratarse de NLP, tienen que analizar el contenido que estás visitando y                         saber lo que realmente puede interesante de otros sitio, habiendo analizado el resto antes. Por                           ejemplo, Google es capaz de saber tu edad con las búsquedas que has realizado previamente.                           Las pruebas realizadas han acertado en un gran porcentaje. Se puede ver esto accediendo a                           los ajustes de Google Ads.El filtro de spam es algo que ya está muy extendido y es ampliamente utilizado. Este tipo de                                 filtros analizan el contenido para determinar si lo que se está recibiendo es basura o no. Cabe                               decir que también hay una serie de direcciones de spammers que automáticamente son                       filtradas y marcadas como spam incluso sin leer su contenido. Este último punto no es                           considerado NLP, sino blacklist.Las bases de conocimiento son las que se utilizan en la web semántica sobre todo. Tratan de                               describir el conocimiento de una manera lógica. Muchos de los avances en este campo están                           relacionados con la medicina. Por ejemplo, la Escuela de Medicina de la Universidad de Tufts ha                             creado TUSK (Tufts University Sciences Knowledgebase) y sirve como base de conocimiento.                     Esta infraestructura de software ya es compartida por tres escuelas de medicina en los                         Estados Unidos, tres en África y otra en la India. Normalmente estas bases de conocimiento                           poseen una ontología que especifica la estructura de su contenido y su esquema de                         clasificación. Se hablará más de ontologías en este documento.Los sistemas automáticos de soporte al cliente son por ejemplo, cuando llamas al servicio de                           atención al cliente de ‘x’ y te coge una máquina diciendo “diga brevemente lo que le ocurre”. La                                 máquina normalmente entiende bastante bien lo que dice el usuario, busca una posible                       respuesta y, en el caso de encontrar varias, te da las opciones encontradas. En cambio, si algo                               no lo entiende, te pasa con una persona para que puedas continuar la consulta. Hoy en día,                               muchas de estas consultas no pasan a manos de ninguna persona, y tareas triviales como                           activar o desactivar el buzón de voz han dejado de ser respondidas por personal humano.La publicidad es otro de los campos en los que más se ha avanzado. Antiguamente la                             publicidad era de forma masiva. Algunos sitios se fijaban en la dirección IP del usuario para                             poder saber su localización y aportar una publicidad cercana al usuario. Actualmente, como ya                         se ha visto, incluso Google sabe tus preferencias gracias, entre otras cosas, a tus búsquedas                           previas o a tu cuenta de Google+. Sabiendo esto, hay publicidad que está completamente                         8
  9. 9. dirigida al usuario, y puedes estar navegando por una web y que te muestre publicidad sobre                             “compra esta consola” (sabiendo que el usuario es medianamente gamer) y otro usuario, en la                           misma web, recibir publicidad sobre “viaja a Nueva York”. Por un lado, los usuarios ganan: ya                             que voy a recibir publicidad qué mejor de las cosas que me interesan. Por otro lado, los que se                                   publicitan también ganan: su publicidad está dirigida a las personas que realmente están                       interesadas en sus productos.El último tema, analítica de comportamiento de clientes, es muy parecido al punto anterior. Este                           tema se ve mejor en la parte del curso dedicada a Big Data y reportes, solo que habría que                                   añadirle el componente de que realmente se sabe y se interpretan los datos de forma                           automática, por lo que las analíticas pueden ser mucho más que datos procesados.Hasta aquí se han visto diferentes usos que se le está dando al procesamiento del lenguaje                             natural. Pero existen multitud de investigaciones en curso sobre NLP. A continuación se                       exponen las investigaciones más comunes:● Resumen automático: sabiendo el tipo de texto.● Coreference resolution: relaciona menciones con entidades, resolviendo, por ejemplo               anáforas.● Discourse analysis: identifica la estructura de un discurso.● Machine translation: este es un problema identificado como AI­Complete o AI­Hard.                   Trata de traducir el de un lenguaje a otro.● Segmentación morfológica: separar las palabras en morfemas.● Named Entity Recognition (NER): enlaza los términos de un texto con personas,                     lugares, organizaciones...● Natural Language Generation: de bases de datos a idioma entendible por una persona.● Natural Language Understanding: convertir el texto para que los ordenadores puedan                   entenderlo y manipularlo más fácilmente.● Optical Character Recognition (OCR): permite, por ejemplo, a los escáneres obtener el                     texto de una imagen.● Part­of­speech tagging (POS tagging): etiquetar cada palabra por la posición en la que                       aparece. Se verán ejemplos de esto más adelante.● Respuesta de preguntas: dada una pregunta, que sea capaz de responder. Aquí hay                       cosas muy sencillas, como “¿cuál es la capital de España?”; en cambio hay otras                         imposibles, como “¿cuál es el sentido de la vida?”.● Extracción de relaciones: es capaz de obtener relaciones como hermanos, parejas, etc.                     de un texto.● Sentence breaking: permite delimitar las frases. Como se ha visto más arriba, esto no                         es siempre trivial ya que el punto no siempre es fin de frase.● Análisis de sentimiento: extrae información subjetiva de una serie de documentos para                     determinar una polaridad (positiva, negativa o neutra).● Speech recognition: de audio a representación textual. También AI­Complete.● Speech segmentation: separar en palabras un audio.● Topic segmentation: separa el texto en segmentos que comparten un tema común.9
  10. 10. ● Word segmentation: separar en palabras un texto. Esto no es tan fácil si el texto está en                               chino, por ejemplo.● Desambiguación del sentido de palabra: para las palabras que tengan más de un                       significado.POS TaggingAdemás, también hay una serie de tareas que son subcampos del NLP:● Information Retrieval (IR): almacenar, buscar y obtener información. Es un campo                   separado que se acerca más al tema de bases de datos.● Information extraction (IE): extracción de información semántica del texto. Esto incluye                   NER, coreference resolution, extracción de relaciones, etc.● Speech processing: este apartado incluye speech recognition además de text­to­speech                 (por ejemplo, Loquendo) y tareas relacionadas.Todo esto son una gran cantidad de elementos que maneja NLP actualmente. Algunos de ellos                           están más resueltos que otros. Por ejemplo, se puede decir que están más o menos                           solucionados los siguientes temas:● Detección de spam● POS tagging● Named Entity Recognition (NER)Algunos otros llevan un buen camino, y aunque no están del todo solucionados, se han                           10
  11. 11. realizado grandes avances que les permiten distanciarse del desconocimiento de su solución:● Análisis de sentimiento● Coreference solution● Desambiguación de palabras● Parseado● Traducción (Machine Translation)● Information Extraction (IE)Por poner un ejemplo de uno de ellos, la extracción de información es un elemento que se utiliza                                 mucho en el entorno del email. Si por ejemplo recibes un correo con una fecha, el software es                                 capaz de detectar esta fecha, leer el resto del correo y sacar un posible asunto y al pulsar sobre                                   la fecha, te crea automáticamente una entrada en el calendario con ese asunto extraído, que por                             supuesto se puede cambiar. Incluso es capaz de extraer ubicaciones (véase, reservada el aula                         301 para la reunión).Otro ejemplo, sobre análisis de sentimiento, pero dirigido más al consumidor podría ser el                         siguiente. Imaginémonos que queremos comprar una cámara digital. Sabemos que lo que nos                       interesa de la cámara son los siguientes parámetros:● Duración de la batería.● Pantalla.● Objetivo(s).● Megapíxeles.● Etc.11
  12. 12. Con NLP podríamos buscar por una serie de webs que hagan análisis (reviews) sobre unas                           cámaras que hayamos seleccionado, cojan estos valores y hagan un análisis de sentimiento.                       “Sobre la cámara A­1 hablan positivamente (+19,3) de la batería, (+11,3) pantalla y etc. Hablan                           negativamente (­24,5) del objetivo...”. Con un informe de cada cámara, sería muy sencillo                       seleccionar la mejor.Como último ejemplo, en cuanto a traductores, efectivamente ya se ha avanzado mucho. Está                         por ejemplo Google Translator con muchísimos idiomas. Es más, en su navegador, Google                       Chrome, te va detectando el idioma de las páginas en las que navegas. Si alguna no está en tu                                   idioma nativo, Chrome te propone su traducción a este idioma. Aún así, una página traducida                           por Google no es igual que una traducida por una persona, y leyendo una traducción de estas se                                 puede ver claramente la diferencia. Aquí ha habido gente que ha sacado multitud de fallos a                             estos sistemas mediante la “doble traducción”. Esto quiere decir: traducir un texto de inglés a                           español y de nuevo de español a inglés y ver si coincide. Existen webs que coleccionan una                               serie de frases graciosas de doble traducción ya que muchas veces se pierde alguna palabra o                             se modifica y el sentido es completamente diferente.Por último, cabe destacar la existencia de un grupo de elementos que, a pesar de estar                             recibiendo bastantes avances en la actualizada, todavía están muy lejos de ser solucionados.                       Dentro de este grupo se encuentran los siguientes temas:● Respuesta a preguntas (Question Answering)● Paraphrase● Resumen (Summarization)● DiálogoAlgunos de ellos ya se han citado anteriormente, pero pongamos un par de ejemplos para                           situarlos algo mejor. Hablando sobre la respuesta a preguntas, como ya se ha visto, puede ser                             algo tan sencillo como la capital de un país. Puede ser algo más complejo pero que, manejando                               cierta información, se pueda obtener. Por ejemplo “¿cuál es el autor del libro que vivió en el país                                 ‘x’ y tiene otro libro de vampiros?”. Y, por supuesto, hay preguntas que no tienen una respuesta                               concreta, lo que dificultan la solución de este tema.En cuanto al diálogo, ya se han hecho grandes avances con este tema. Uno de los robots más                                 famosos con los que se puede entablar una conversación es Cleverbot. En su web                         http://www.cleverbot.com/ puedes mantener una charla con este robot en la que muchas veces                       se duda si realmente es un programa o una persona que está detras la que está respondiendo a                                 tus mensajes. A continuación una imagen de una conversación con Cleverbot:12
  13. 13. Todo esto es la teoría básica sobre el procesamiento del lenguaje natural. Ahora, ¿cómo llevar                           todo esto a la práctica? ¿Cómo comenzar a programar nuestro software NLP? Existen                       muchísimas librerías para prácticamente todos los lenguajes de programación que facilitan esta                     labor, por lo que no hay que programar nada desde 0. Existe una lista bastante extensa en                               Wikipedia. Para ello, hay que dirigirse a la dirección URL:● http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits#Natural_language_processing_toolkits.De todas estas herramientas, veremos dos un poco por encima: NTLK, una librería para                         Python, y OpenNLP, para JAVA. Además, veremos un software llamado “Apache Stanbol” que                       reúne una serie de componentes semánticos para ofrecer una serie de funcionalidades en las                         que los diferentes CMS se pueden apoyar para aumentar sus capacidades.13
  14. 14. Tema 3 ­ NTLKComo introducción, veamos un par de elementos de NLP.El mundo de Internet esta lleno de texto por todos lados: noticias, blogs, textos en varios                             idiomas, etc. El primer paso que se dio es indexar este contenido y realizar una serie de                               motores de búsqueda para poder acceder a un contenido más específico. Posteriormente,                     aparecieron las herramientas de NLP. Dichas herramientas, como se ha visto, permiten extraer                       y procesar la estructura de un texto y crear un conocimiento.Las metas de NLP se dividen en dos grupos. El primero tiene que ver con la ingeniería, y se                                   compone de elementos como la traducción o pregunta ­ respuesta. El otro grupo es científico,                           y tiene que ver con entender la estructura, entender la naturaleza del lenguaje humano, etc.Existen diferentes tipos de datos:● Chunked tagged WSJ text● Parsed WSJ text● IOB­tagged text● Named Entity Classification● Tagged biomedical text in xml● CMU Pronunciation lexicon● Etc.Dicho esto, la herramienta NTLK se compone de varios elementos. Lo primero es que facilita el                             acceso a los datos. Los datos son difíciles de leer, incluso cuando están en formato CSV. Por                               eso, cuando la gente consigue realizar algo en este ámbito, lo comparten. Internet está lleno de                             librerías para leer archivos de tipo CSV, XML, JSON y prácticamente todos los formatos.Lo segundo de lo que hablar sobre NTLK son los algoritmos estándar. Esta parte es muy                             complicada porque hay que entender y hay que aprender muchos elementos que componen el                         lenguaje humano. Por suerte, esta herramienta, basada en el lenguaje de programación Python,                       permite un acceso sencillo a todo este conocimiento. Dentro de su web hay numerosos                         tutoriales y documentación. Veamos un ejemplo.Se quiere obtener las 20 palabras más frecuentes en un texto. En Python, el código sería el                               siguiente:counts = defaultdict(int)for words in text.split( ):  count[word] *= 1rankid_words = sorted(count.items, key= itemgetter(1))14
  15. 15. print(word for (word, count) in reversed(ranked_words)[:20])En cambio, todo esto se puede realizar en una sola línea con NTLK:print FreqDist(tokenize.wordpunt(text)).sorted()[:20]Por otro lado, el primer ejemplo separa las palabras por espacios, pero ¿qué pasa si hay signos                               de puntuación? El código no es del todo correcto. En cambio, la función de NTLK es capaz de                                 detectar este tipo de cosas.Actualmente, todas esas librerías se centran en el texto. El lenguaje hablado, para poder trabajar                           con él, primero es pasado a texto, y después se utilizan las mismas herramientas. En cambio,                             es posible también analizar imágenes con algunas herramientas, pero principalmente, texto.                   Con este texto, una de las cosas que se quiere hacer es poder entender lo que dice para, por                                   ejemplo, realizar un resumen. Si hay un texto largo sobre una carrera de bicicletas, nos gustaría                             que la herramienta resumiera el texto diciendo “la persona X ganó la carrera” (hipótesis). Eso a                             veces es sencillo, pero si el texto es “(...) consiguió una medalla de oro en la carrera”, ya no es                                     tan sencillo, ya que hay que entender que “conseguir una medalla de oro” significa ganar.En el apartado anterior ya se han visto campos en los que trabaja NLP: extracción de                             información, diálogo, respuesta a preguntas, resumen de textos... Para trabajar esto, NTLK,                     junto a otras herramientas, dispone de 5 componentes tecnológicos:● Word overlap● Structural correspondence● Semantic ­ pragmatic inference● Paraphrase at word and phrase level● Background knowledge (ontological knowledge)Los avances en todos estos elementos han hecho posible cosas impresionantes. Por ejemplo,                       en Japón existe una máquina que imita perfectamente a un niño de aproximadamente 10 años.NTLK no es una herramienta mágica, pero si ayudará en ciertos aspectos. Esta disponible para                           las plataformas Windows, Linux y Mac bajo el lenguaje de programación Python. Es una                         herramienta Open Source gratuita que está desarrollada por la comunidad. Ofrece varios                     interfaces de fácil utilización para muchísimas fuentes léxicas y otros elementos como por                       ejemplo WordNet, además de una serie de librerías para procesar texto: clasificación,                     tokenización, parseo, razonamiento semántico, etc. Es una herramienta muy didáctica que                   permite hacer gran cantidad de acciones en el mundo del procesamiento del lenguaje natural.Veamos un ejemplo dividido en tres partes. La primera parte separar el texto en palabras                           (tokenize). Se realizaría de la siguiente forma:>>> import nltk>>> sentence = """At eight oclock on Thursday morning... Arthur didnt feel very good."""15
  16. 16. >>> tokens = nltk.word_tokenize(sentence)>>> tokens[At, eight, "oclock", on, Thursday, morning,Arthur, did, "nt", feel, very, good, .]El siguiente paso es etiquetar el texto para saber los tipos de palabras.>>> tagged = nltk.pos_tag(tokens)>>> tagged[0:6][(At, IN), (eight, CD), ("oclock", JJ), (on, IN),(Thursday, NNP), (morning, NN)]Por último, realizar un reconocimiento de elementos dentro del texto:>>> entities = nltk.chunk.ne_chunk(tagged)>>> entitiesTree(S, [(At, IN), (eight, CD), ("oclock", JJ),           (on, IN), (Thursday, NNP), (morning, NN),       Tree(PERSON, [(Arthur, NNP)]),           (did, VBD), ("nt", RB), (feel, VB),           (very, RB), (good, JJ), (., .)])Con todo esto, se puede mostrar un árbol de parseo, algo como lo que muestra la siguienteimagen:A continuación, veamos otros ejemplos interesantes sobre cosas que se pueden hacer con                       NTLK.Sacar unos gráficos de dispersión de palabras sobre un texto:>>> text.dispersion_plot(["citizens", "democracy", "freedom",     "duties", "America"])>>>16
  17. 17. Obtener las colocaciones de un texto (colocaciones son palabras que suelen ir juntas):>>> text4.collocations()Building collocations listUnited States; fellow citizens; years ago; Federal Government;             General Government; American people; Vice President; Almighty God;             Fellow citizens; Chief Magistrate; Chief Justice; God bless; Indian               tribes; public debt; foreign nations; political parties; State             governments; National Government; United Nations; public moneyTambién dispone de una serie de robots para entablar una conversación bastante primitiva. Los                         robots se pueden mostrar mediante el siguiente comando:● nltk.chat.chatbots()Es importante recordar la importación de la librería “ntlk” al comienzo. Este tipo de robots                           disponen de una arquitectura concreta. La imagen que se muestra a continuación enseña cómo                         se procesa un texto desde su entrada y como se devuelve una salida al usuario que está                               interactuando.17
  18. 18. Obtener las frases de un texto:>>> from nltk.corpus import gutenberg>>> macbeth_sentences = gutenber.sents(shakespeare­macbeth.txt)>>> macbeth_sentences[[[, The, Tragedie, of, Macbeth, by, William,           Shakespeare,1603, ]], [Actus, Primus, .], ...]Obtener las palabras menos usadas en un texto:>>> unusual_words(nltk.corpus.gutenberg.words(austen­sense.txt))[abbeyland, abhorrence, abominably, abridgement, accordant,       accustomary,adieus, affability, affectedly, aggrandizement, alighted,       allenham,amiably, annamaria, annuities, apologising, arbour,       archness, ...]Un juego: palabras que contengan estas letras, obligatoria la ‘R’.18
  19. 19. La solución:>>> puzzle_letters = nltk.FreqDist(egivrvonl)>>> obligatory = r>>> wordlist = nltk.corpus.words.words()>>> [w for w in wordlist if len(w) >= 6...                     and obligatory in w...                     and nltk.FreqDist(w) <= puzzle_letters][glover, gorlin, govern, grovel, ignore, involver,         lienor,linger, longer, lovering, noiler, overling, region,         renvoi,revolving, ringle, roving, violer, virole]Pronunciación:>>> entries = nltk.corpus.cmudict.entries()>>> len(entries)127012>>> for entry in entries[39943:39951]:...    print entry...(fir, [F, ER1])(fire, [F, AY1, ER0])(fire, [F, AY1, R])(firearm, [F, AY1, ER0, AA2, R, M])(firearm, [F, AY1, R, AA2, R, M])(firearms, [F, AY1, ER0, AA2, R, M, Z])(firearms, [F, AY1, R, AA2, R, M, Z])(fireball, [F, AY1, ER0, B, AO2, L])El libroEl libro para aprender a utilizar NTLK es muy recomendable. Existe una versión online gratuita                           en la siguiente dirección URL:● http://nltk.org/book/De ahí se han extraído los ejemplos mencionados anteriormente. Cada capítulo del libro                       contiene además una serie de ejercicios para practicar lo que se ha explicado en ese capítulo.                             Cualquier persona que quiera aprender esta herramienta, seguramente esta sea la mejor forma                       de hacerlo.19
  20. 20. Tema 4 ­ OpenNLPOpenNLP es una librería de Apache que posee un conjunto de herramientas basadas en el                           aprendizaje de la máquina. Realiza tareas como:● Tokenización● Segmentacion de frases● POS­tagging● NER● Chunking● Parsing● Coreference resolutionLa gente no tiene problemas en entender el idioma. Elementos como la ironía o el sarcasmo                             son algo normal del lenguaje y ambos son utilizados a diario. Pero las máquinas tienen un                             problema para entender este tipo de concepto. Por eso:● Los ordenadores no tienen conocimiento del sentido común.● Los ordenadores no tienen capacidad de razonamiento.Por lo que, antes de poder entender, hay que analizar el texto. Este tipo de herramientas                             contiene funcionalidades para estructurar el texto. Una secuencia normal seguiría los siguientes                     pasos:1. Texto “crudo” (raw text)2. POS­tagging3. NER (Named Entity Recognition)4. Análisis sintáctico (syntactic parsing)5. Texto anotado (annotated text)OpenNLP está disponible como un paquete descargable desde su propia web:● http://opennlp.apache.org/También está disponible como repositorio de Maven. La herramienta está únicamente disponible                     para el lenguaje de programación Java, y funciona en cualquier plataforma que tenga Java                         correctamente instalado.A continuación, veamos una serie de ejemplos de las acciones que se pueden realizar con                           OpenNLP.El primer ejemplo es sobre detección de frases.public static void SentenceDetect() throwsInvalidFormatException,IOException {String paragraph = "Hi. How are you? This is Mike.";20
  21. 21. // always start with a model, a model is learned fromtraining dataInputStream is = new FileInputStream("en­sent.bin");SentenceModel model = new SentenceModel(is);SentenceDetectorME sdetector = newSentenceDetectorME(model);String sentences[] = sdetector.sentDetect(paragraph);System.out.println(sentences[0]);System.out.println(sentences[1]);is.close();}El siguiente ejemplo es sobre el tokenizer:public static void Tokenize() throws InvalidFormatException,IOException {InputStream is = new FileInputStream("en­token.bin");TokenizerModel model = new TokenizerModel(is);Tokenizer tokenizer = new TokenizerME(model);String tokens[] = tokenizer.tokenize("Hi. How are you?This is Mike.");for (String a : tokens)System.out.println(a);is.close();}El siguiente, sobre name finder:public static void findName() throws IOException {InputStream is = new FileInputStream("en­ner­person.bin");TokenNameFinderModel model = new TokenNameFinderModel(is);is.close();NameFinderME nameFinder = new NameFinderME(model);String []sentence = new String[]{    "Mike",    "Smith",    "is",    "a",    "good",    "person"    };Span nameSpans[] = nameFinder.find(sentence);for(Span s: nameSpans)System.out.println(s.toString());}21
  22. 22. POS Tagger:public static void POSTag() throws IOException {POSModel model = new POSModelLoader().load(new File("en­pos­maxent.bin"));PerformanceMonitor perfMon = newPerformanceMonitor(System.err, "sent");POSTaggerME tagger = new POSTaggerME(model);String input = "Hi. How are you? This is Mike.";ObjectStream<String> lineStream = newPlainTextByLineStream(new StringReader(input));perfMon.start();String line;while ((line = lineStream.read()) != null) {String whitespaceTokenizerLine[] =WhitespaceTokenizer.INSTANCE.tokenize(line);String[] tags = tagger.tag(whitespaceTokenizerLine);POSSample sample = newPOSSample(whitespaceTokenizerLine, tags);System.out.println(sample.toString());perfMon.incrementCounter();}perfMon.stopAndPrintFinalResult();}El último ejemplo es sobre el parser:public static void Parse() throws InvalidFormatException, IOException{InputStream is = newFileInputStream("en­parser­chunking.bin");ParserModel model = new ParserModel(is);Parser parser = ParserFactory.create(model);String sentence = "Programcreek is a very huge and usefulwebsite.";Parse topParses[] = ParserTool.parseLine(sentence, parser,1);for (Parse p : topParses)p.show();is.close();}22
  23. 23. El resultado de este último es:23
  24. 24. Tema 5 ­ StanbolApache Stanbol ofrece una serie componentes reusables para la gestión de contenido                     semántico. Su uso deseado es para extender los sistemas tradicionales de gestión de                       contenido con servicios semánticos como: uso directo de aplicaciones web (por ejemplo,                     extracción o sugerencia de etiquetas, autocompletado de campos de búsqueda), workflows de                     contenido inteligente o ruteado de correos electrónicos en base a entidades extraídas, temas,                       etc.Para ser utilizado como motor semántico vía sus servicios, todos sus componentes ofrecen                       sus funcionalidades como API de un servicio web RESTful. Sus características principales:● Content enhancement: servicios que añaden información semántica a partir de                 contenido no­semántico.● Reasoning: servicios que son capaces de extraer información semántica adicional sobre                   el contenido basándose en la información semántica obtenida por el content                   enhancement.● Knowledge models: servicios que se usan para definir y manipular los modelos de datos                         (como ontologías) usados para almacenar la información semántica.● Persistence: servicios que almacenan (o cachean) información semántica y la hacen                   “buscable”.Todo se controla desde una web. Pero, como se ha visto, los componentes son RESTful, así                             que es muy sencillo programar una aplicación que utilice estos endpoints. Para este                       documento, nos basaremos solo en la web. Tras instalar y lanzar el launcher completo, al visitar                             la URL http://localhost:8080/ se puede ver la web mostrada en la siguiente imagen. En la parte                             superior de la misma, existen unos enlaces. Cada uno de esos enlaces corresponde con un                           componente instalado y configurado en el sistema. En este caso, los componentes son:● Enhancer● Content hub● Enhancer VIE● Factstore● Entityhub24
  25. 25. ● Sparql● Rules● Ontonet● Reasoners● CmsadapterAdemás de esto, existe una consola realizada con Apache Felix que permite configurar la                         plataforma por completo. Pulsando sobre “system console”, y, por defecto, usuario “admin” y                       contraseña “admin”.Hemos hablado de un montón de elementos, pero ¿qué hace cada uno de ellos? A continuación                             se explican brevemente.El enhancer es una interfaz stateless que permite al cliente enviar contenido para analizar por                           25
  26. 26. los Enhancement Engines y obtener el resultado sin que se almacene nada en el lado del                             servidor.De la imagen anterior, se obtienen los siguientes conceptos:● Tika Engine: está basado en Apache Tika. Detecta el tipo de contenido, extrae el texto devarios formatos de documentos y extrae los metadatos de varios formatos dedocumentos (ejemplos de formatos: doc, PDF o incluso audio).● Language Identification Engine: detección de idioma para contenido de tipo textoutilizando Apache Tika.● Named Entity Extraction Enhancement Engine: procesamiento del lenguaje naturalutilizando OpenNLP NER. Detecta la aparición de personas, lugares y organizacionesúnicamente.● Named Entity Tagging Engine: sugiere enlaces a varias fuentes de datos conectadas(por ejemplo, dbpedia).El gráfico que se muestra a continuación contiene los diferentes endpoints de este componente                         de Stanbol. No se van a comentar en este documento, pero queda constancia de las diferentes                             posibilidades que hay:26
  27. 27. El entitityhub es el componente de Stanbol responsable de ofrecer información sobre                     entidades relevantes para el dominio del usuario. La siguiente imagen muestra una vista general                         de las características del Entityhub:27
  28. 28. El content hub es una interfaz stateful para enviar contenido a ser analizado y almacenar los                             resultados en el servidor. Una vez almacenados, es posible navegar por los elementos del                         contenido analizado. A largo plazo, el objetivo de esto es implementar búsquedas semánticas.                       Es un repositorio de documentos basado en Apache Solr que permite almacenamiento de                       documentos basados en texto y facilidades de búsqueda semántica personalizables.El resultado es el mismo que en el enhacer, solo que esta vez el resultado no es volátil, sino                                   que permanecerá almacenado (statefull).El enhancer VIE es una interfaz stateful para enviar contenido para ser analizado y almacenado                           en el servidor. Después es posible navegar por los elementos analizados con los resultados                         obtenidos. Como en el caso anterior, se intentará realizar búsquedas semánticas de contenido                       previamente analizado. VIE ofrece un puente entre Backbone.js y la web semántica. La                       información sobre este elemento puede ser encontrada en http://viejs.org/. Un ejemplo de                     funcionamiento se muestra en la siguiente imagen:28
  29. 29. El sparql es la parte final del Stanbol store. Es un lenguaje estándar de queries utilizado                             mayormente para ofrecer acceso interactivo a bases de conocimiento semántico: grafos RDF                     resultantes, especialmente, todos los resultados gestionados por el contenthub.El ontology manager ofrece un entorno controlado para gestionar ontologías, redes de                     ontologías y sesiones de usuarios para el modelado de datos semánticos tras ellos. Ofrece                         acceso completo a ontologías completas almacenadas en la capa de persistencia. Gestionar                     una red de ontología significa que se pueden activar y desactivar partes de un modelo complejo                             de tiempo en tiempo, para que los datos puedan ser vistos y clasificados bajo diferentes logical                             lenses. Especialmente útil para operaciones de razonamiento (se verá más adelante).Las reglas son un componente de Stanbol que soporta la construcción y ejecución de reglas de                             inferencia. Una regla de inferencia, o regla de transformación, es una regla sintáctica o función                           que toma premisas y devuelve una conclusión. Las Reglas de Stanbol permiten añadir una capa                           para expresar lógicas de negocio por medio de axiomas, que codifican las reglas de inferencia.                           Estos axiomas pueden ser organizados en un contenedor llamado recipe, que identifica una                       serie de reglas que comparten la misma lógica de negocio y se interpretan como un todo.Stanbol permite añadir reglas a otros componentes de Stanbol o third parties en tres formatos                           diferentes:● SWRL (Semantic Web Rule Language)● Jena Rules● SPARQLLos reasoners ofrecen una serie de servicios que toman ventaja de motores de inferenciaautomáticos.El módulo implementa una API común para servicios de razonamiento, ofreciendo la posibilidadde enchufar diferentes razonadores y configuraciones en paralelo.El módulo incluye los servicios abstractos basados en OWLApi y Jena, con implementacionesconcretas para Jena RDFS, OWL, OWLMini y servicio de razonamiento HermiT.Cada razonador puede ser accedido con una de tres tareas:● check: para realizar una comprobación de consistencia. Este servicio devuelve unestado 200 si los datos son consistentes, 204 si no lo son.● classify: para materializar todas las sentencias rdf:type.● enrich: para materializar todas las sentencias inferidas.El CMS Adapter actúa como puente entre sistemas de gestión de contenido y Apache Stanbol.                           Hay que tener en cuenta que todos los componentes de Apache Stanbol tienen servicios                         RESTful que permiten ser accedidos desde fuera. El adaptador CMS interactúa con sistemas                       29
  30. 30. de gestión de contenidos a través de especificaciones JCR y CMIS. Existen actualmente dos                         funcionalidades principales que ofrece este componente: Bidirectional Mapping y Contenthub                 Feed.● Bidirectional Mapping. Habilita a los sistemas de gestión de contenido a representar                     su estructura del repositorio de contenido en formato RDF. Esto ayuda a construir                       servicios semánticos por encima de sistemas de gestión de contenido existentes                   usando su representación RDF.● Contenthub Feed. Ofrece gestión de elementos del repositorio de contenidos en el                     Contenthub. El proceso de gestión incluye solo dos tipos de operaciones: enviar y                       eliminar. Enviando elementos de contenido al Contenthub se puede hacer uso de                     funcionalidades de indexado y búsqueda sobre los elementos enviados.Por último, el factstore es un componente que permite usar relaciones de almacenamiento                       entre entidades identificadas por sus URIs. Una relación entre dos o más entidades se llama un                             fact.DEMO: http://dev.iks­project.eu/30
  31. 31. Tema 6 ­ CuriosidadesA continuación van una serie de curiosidades o elementos a mirar como curiosidad:● Siri o Sherpa● Cleverbot● Wolframalpha○ http://www.makeuseof.com/tag/10­search­terms­put­wolfram­alpha­good­everyday/○ http://www.telegraph.co.uk/technology/5349245/Top­10­funny­searches­in­Wolfram­Alpha.html○ http://www.howtogeek.com/106925/10­amazing­uses­for­wolfram­alpha/○ http://www.wolframalpha.com/input/?i=zoidberg+curve● Boilerpipe● CoreNLP (Stanford): demo http://nlp.stanford.edu:8080/corenlp/● http://www.wordhippo.com/● http://www.snappywords.com● http://lsikeywords.com/● http://www.sensebot.net/sense6.aspx31

×