Este documento presenta un curso sobre procesamiento de lenguaje natural (NLP). Cubre la historia y conceptos clave de NLP, incluyendo herramientas como NLTK, OpenNLP y Stanbol. El documento también explora las dificultades del NLP como ambigüedad y segmentación de palabras, y cómo el NLP puede usarse para extraer y resumir información de documentos.
2. Introducción
Una 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. Tema 1 Historia
Aunque 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. 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 ifelse 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. Tema 2 Conceptos sobre NLP
Para 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ágina
En cuanto a los enfoques de la web semántica, se pueden distinguir dos:
● Topdown: análisis de la información, Web Scraping, NLP.
● Downtop: 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. 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. 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. ● 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 autocompletarte 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. 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 AIComplete o AIHard.
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.
● Partofspeech 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 AIComplete.
● Speech segmentation: separar en palabras un audio.
● Topic segmentation: separa el texto en segmentos que comparten un tema común.
9
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 Tagging
Ademá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 texttospeech
(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. 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. 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 A1 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álogo
Algunos 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. 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_langua
ge_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. Tema 3 NTLK
Como 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
● IOBtagged 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] *= 1
rankid_words = sorted(count.items, key= itemgetter(1))
14
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 o'clock on Thursday morning
... Arthur didn't feel very good."""
15
17. Obtener las colocaciones de un texto (colocaciones son palabras que suelen ir juntas):
>>> text4.collocations()
Building collocations list
United 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 money
Tambié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
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 libro
El 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. Tema 4 OpenNLP
OpenNLP 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
● POStagging
● NER
● Chunking
● Parsing
● Coreference resolution
La 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. POStagging
3. 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() throws
InvalidFormatException,
IOException {
String paragraph = "Hi. How are you? This is Mike.";
20
24. Tema 5 Stanbol
Apache 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 nosemá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
● Entityhub
24
25. ● Sparql
● Rules
● Ontonet
● Reasoners
● Cmsadapter
Ademá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. 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 de
varios formatos de documentos y extrae los metadatos de varios formatos de
documentos (ejemplos de formatos: doc, PDF o incluso audio).
● Language Identification Engine: detección de idioma para contenido de tipo texto
utilizando Apache Tika.
● Named Entity Extraction Enhancement Engine: procesamiento del lenguaje natural
utilizando 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. 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. 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. 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
● SPARQL
Los reasoners ofrecen una serie de servicios que toman ventaja de motores de inferencia
automáticos.
El módulo implementa una API común para servicios de razonamiento, ofreciendo la posibilidad
de enchufar diferentes razonadores y configuraciones en paralelo.
El módulo incluye los servicios abstractos basados en OWLApi y Jena, con implementaciones
concretas 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 un
estado 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. 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.iksproject.eu/
30
31. Tema 6 Curiosidades
A continuación van una serie de curiosidades o elementos a mirar como curiosidad:
● Siri o Sherpa
● Cleverbot
● Wolframalpha
○ http://www.makeuseof.com/tag/10searchtermsputwolframalphagoodeveryd
ay/
○ http://www.telegraph.co.uk/technology/5349245/Top10funnysearchesinWolfra
mAlpha.html
○ http://www.howtogeek.com/106925/10amazingusesforwolframalpha/
○ 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.aspx
31