Procesado de Lenguaje Natural Fernando Muñoz del Nuevo Ingeniería de telecomunicaciones Universidad Carlos III Av. De la Universidad, 30 28911 Leganés (Madrid) [email protected] RESUMEN El siguiente artículo expone el estado actual del procesado del lenguaje natural y los mecanismos a través de los cuales la inteligencia artificial es capaz de interactuar con un humano y no dar sensación de ser una máquina. Términos Generales Algoritmos, Lenguaje, Etiquetas, Sintáctico, Diagrama de Flujo. Análisis Morfológico, Palabras Clave AIML, PLN, Árboles de Decisión, XML. 1. INTRODUCCIÓN El ser humano desde que tiene conciencia siempre ha tenido necesidad de compañía, por ello no es extraño que siempre haya intentado dotar de vida a lo que le rodea. En éste caso, se está llegando al punto de crear robots con forma humana, que se comporten como los humanos y por último que sean capaces de mantener conversaciones coherentes. Como se puede observar en la figura 1 los robots han llegado a un nivel de parecido con el ser humano muy importante. El procesado del lenguaje natural por el contrario está más lejos del parecido que se muestra en la imagen. Aún nos encontramos con las dificultades propias del lenguaje, de la comprensión del mismo y de las múltiples interpretaciones que puede tener en función de los diferentes significados de las palabras dependiendo del contexto en que se encuentren. La historia del procesado del lenguaje natural (PLN) comienza cuando a finales de los años cuarenta se comenzó a proponer sistemas de traducción automática. Dichos sistemas entre los cuarenta y cincuenta fracasaron debido a la falta de capacidad de procesamiento en comparación con la complejidad del lenguaje, posteriormente en los años setenta y ochenta se logra un nivel aceptable de traducción automática pasando los objetivos del PLN a los campos de interfaces en lenguaje natural y procesamiento de textos. 2. OBJETIVOS Y DIFICULTADES Las interfaces en lenguaje natural pretenden poder dar órdenes a ordenadores y robots mediante el propio lenguaje ya sea hablado o escrito de tal modo que personas que por su casuística no pueden dar órdenes mediante interfaces gráficas lo puedan hacer a través de la voz o un teclado. Esto tiene mucha importancia para las personas con discapacidades físicas que no les permiten ver o actuar con las manos sobre un terminal. El procesamiento de textos es importante porque la mayor cantidad de información de la humanidad se encuentra en textos con la consiguiente importancia de acceder a lo que se desea en el menor tiempo posible, por ello, un procesado de textos bueno nos permitirá tener toda la información de cualquier cosa que deseemos si esta existe. La traducción automática es uno de los problemas más antiguos con una gran importancia puesto que de un buen o mal traductor dependen muchas cosas en determinados ámbitos. Las dificultades con las que se debe lidiar en el PLN son importantes y por ello aún no tenemos un PLN perfecto que nos permita abordar todos los casos anteriormente expuestos. La dificultad principal es que el lenguaje natural es localmente ambiguo, y ésta ambigüedad es la que impide un PLN eficaz. Un ejemplo es la palabra inglesa hit la cual tiene diferentes significados a partir del contexto: Figura 1: Andy, robot humanoide femenina. He hit the nail with the hammer Golpear The car swerved and hit the tree Chocar The soldier fired and hit the target Acertar Por lo tanto el único modo de conocer el significado de la palabra es a partir del contexto, el cual hay que acotar, identificar el significado de las demás palabras y reconocer el significado de la palabra objetivo. Por otro lado, si lo que se está pretendiendo es buscar información acerca de algo en concreto, por ejemplo un paro cardíaco habrá que buscar información no sólo de paros cardíacos sino también acerca de fallos del corazón, enfermedades del corazón y demás búsquedas relacionadas para encontrar la mayor cantidad de información posible. Además de la ambigüedad léxica existe la ambigüedad referencial y la ambigüedad estructural. La primera tiene lugar cuando se utilizan pronombres o sintagmas nominales concisos para hacer referencia a objetos o eventos descritos previamente. En estos casos, el sistema de PLN debe determinar la entidad lingüística previa a que hacen referencia estas anáforas. La segunda es aún más frecuente; el caso más claro de este tipo de ambigüedad es el de la ambigüedad en el nivel de dependencia de los sintagmas preposicionales. Además a veces se cae en constantes repeticiones y poca variedad de respuestas que hace aburrida y poco atractiva la experiencia, por lo tanto el sistema debe tener una gran base de datos de posibles combinaciones de respuestas y en un siguiente paso de complejidad, sería muy importante que pudiera aprender expresiones del usuario para ser mucho más cercano. En busca de la generación correcta del lenguaje, los lingüistas desarrollaron las gramáticas que describen las estructuras correctas de cada lenguaje (lo que aún complica más el asunto teniendo en cuenta la gran cantidad de lenguajes y dialectos existentes en el mundo. Dichas estructuras se representan en árboles como el que se muestra a continuación: Todas estas dificultades son las que debe resolver un sistema de PLN que pretenda dar una sensación de realidad al usuario. 3. COMPONENTES DE UN PLN Un PLN se compone de la realización de las siguientes tareas: • • • • • • Análisis Morfológico: Análisis de las palabras para extraer raíces, rasgos flexivos, unidades léxicas compuestas y otros fenómenos. Análisis sintáctico: El análisis de la estructura sintáctica de la frase mediante una gramática de la lengua en cuestión. Análisis semántico: La extracción del significado de la frase, y la resolución de ambigüedades léxicas y estructurales. Análisis pragmático: El análisis del texto más allá de los límites de la frase, por ejemplo, para determinar los antecedentes referenciales de los pronombres. Planificación de la frase: Estructurar cada frase del texto con el fin de expresar el significado adecuado. Generación de la frase: La generación de la cadena lineal de palabras a partir de la estructura general de la frase, con sus correspondientes flexiones, concordancias y restantes fenómenos sintácticos y morfológicos. Todas estas tareas deben realizarse paralelamente para obtener un resultado adecuado porque si esto se realizara mediante un flujo continuado concatenando dichas operaciones el resultado no sería adecuado. Figura 2: Ejemplo de árbol de gramática inglesa para la oración “The little boy ran quickly”. A partir de ésta forma de representación introducimos el sistema de etiquetado para expresar mediante un lenguaje la gramática y así un ordenador sea capaz de expresarse. Esto nos lleva al lenguaje AIML. 4. ARTIFICIAL INTELLIGENCE MARKUP LANGUAGE (AIML) AIML se desarrolló desde 1995 hasta 2000 por parte de Dr. Richard Wallace y la comunidad de código abierto Alicebot. Es un lenguaje basado en XML que es sencillo de aprender y permite crear en poco tiempo una entidad parlante. Las partes más importantes del lenguaje son: • • • • <aiml>: Es un tag que indica el comienzo de un trozo de código AIML. <category>: Identifica una unidad de conocimiento. <pattern>: Identifica un patrón concreto de una determinada oración. <template>: Contiene la respuesta a una determinada entrada del usuario. Un ejemplo de una arquitectura de un PLN es el siguiente: Un ejemplo de un código en AIML es el siguiente: El usuario le expresa al ordenador sus deseos. La computadora analiza las oraciones proporcionadas. Se realiza el análisis pragmático del texto y proporciona una respuesta final. <category> <pattern>WHAT ARE YOU</pattern> <template> <think><set name="topic">Me</set></think> I am the latest result in artificial intelligence, which can reproduce the capabilities of the human brain with greater speed and accuracy. </template> </category> El siguiente paso que se debe analizar para comprender la dificultad a la que nos exponemos es la de la generación del lenguaje, ya sean textos o voces. No podemos pensar que simplemente por fuerza bruta se puede resolver el problema, hay que tener en cuenta el uso de pronombres, sinónimos, palabras adecuadas en determinados contextos y una jerga concreta para dar una experiencia adecuada al usuario. Éste es un ejemplo del tipo de respuesta que daría el robot en caso de detectar un patrón que le pregunte por qué es. La completa definición del lenguaje se encuentra en la referencia bibliográfica [7]. 4. Uno de los problemas más comunes en la identificación del lenguaje son los errores de escritura o las contracciones, un ejemplo de ello es en el inglés “your” que en la mayoría de los casos se traduciría por “you’re” o “you are” por lo tanto no todas las ocurrencias se traducen por lo mismo. Para ello debe buscarse algo de contexto, el cuál se codifica así. En cualquier caso, un pequeño resumen de los modos de actuación en AIML son los siguientes: 1. Reducción Simbólica Consiste en reducir expresiones complejas a expresiones más simples que coincidan en significado, por ejemplo, la reducción de ¿Sabes quién es Zapatero? a ¿Quién es Zapatero? Se trata de dos oraciones con el mismo significado pero con formaciones distintas por lo tanto se produce a identificar oraciones largas en patrones más cortos de tal modo que sea más sencillo su tratamiento posterior. <category> <pattern>YOUR A *</pattern> <template>I think you mean "you’re" or "you are" not "your." <srai>YOU ARE A <star/></srai> </template> </category> <category> <pattern>DO YOU KNOW WHO * IS</pattern> <template><srai>WHO IS <star/></srai></template> </category> En éste caso el programa corregiría la ambigüedad para adaptarse a lo correcto. 5. 2. Palabras Clave Divide y Vencerás Frecuentemente debemos activar un trozo de código cuando aparece determinada palabra que corresponde a unas determinadas acciones muy particulares. El siguiente ejemplo se incluyó por primera vez en ELIZA Una oración que se componga de dos sub-oraciones como por ejemplo cualquiera que se componga de una afirmación y un posterior comentario a dicha información se puede dividir en dos de tal modo que se analicen por separado y así conseguir una mejor experiencia. <category> <pattern>MOTHER</pattern> <template> Tell me more about your family. </template> </category> <category> <pattern>YES *</pattern> <template><srai>YES</srai> <sr/></template> </category> 3. Deletreado y Correción Gramática. <category> <pattern>_ MOTHER</pattern> <template><srai>MOTHER</srai></template> </category> Sinónimos AIML no permite más de un patrón por categoría, por lo tanto para integrar sinónimos (una de las aplicaciones más usadas del lenguaje) se hace del siguiente modo: <category> <pattern>HELLO</pattern> <template>Hi </category> <category> <pattern>MOTHER _</pattern> <template><srai>MOTHER</srai></template> </category> there!</template> <category> <pattern>_ MOTHER *</pattern> <template><srai>MOTHER</srai></template> </category> <category> <pattern>HI</pattern> <template><srai>HELLO</srai></template> </category> <category> <pattern>HI THERE</pattern> <template><srai>HELLO</srai></template> </category> <category> <pattern>HOWDY</pattern> <template><srai>HELLO</srai></template> </category> <category> <pattern>HOLA</pattern> <template><srai>HELLO</srai></template> </category> En el primer caso detectamos la categoría y aplicamos la regla general, en la segunda categoría tenemos la palabra como sufijo y aplicamos la regla de distinta forma. 6. Condicionales Existe la posibilidad de utilizar condicionales para en función de la proveniencia de la frase responder con reglas distintas. <category> <pattern>WHO IS HE</pattern> <template><srai>WHOISHE<getname="he"/></srai></te mplate> </category> <category> <pattern>WHOISHE *</pattern> <template>He is <get name="he"/>.</template> </category> <category> <pattern>KNOCK KNOCK</pattern> <template>Who is there?</template> </category> <category> <pattern>WHOISHE UNKNOWN</pattern> <template>I don’t know who he is.</template> </category> 7. <category> <pattern>*</pattern> <that>WHO IS THERE</that> <template><person/> who?</template> </category> Targeting El targeting es el proceso mediante el cual el bot aprende en relación con las conversaciones que tiene con el usuario y el creador del bot. La mejor manera de exponer el proceso es el siguiente ejemplo: <category> <pattern>*</pattern> <that>* WHO</that> <template>Ha ha very name="name"/>.</template> </category> User: Where do I find the webpage with Australopithecus? Alice: Where do you want to find it? funny, <get User: Bad Answer Alice, time to Learn a new Line Produce el siguiente diálogo: Alice: How would you answer "Where do I find the webpage with Australopithecus?" C: Knock knock. R: Who’s there? C: Banana. R: Banana who? C: Knock knock. R: Who’s there? C: Banana. R: Banana who? C: Knock knock. R: Who’s there? C: Orange. R: Orange who? C: Orange you glad I didn’t say banana. R: Ha ha very funny, Nancy. User: I would say: "http://www.ancientskulls.net/australopithecus.html" Alice: Thanks, human. Try asking me again. User: Where do I find the webpage with Australopithecus? Alice: http://www.ancientskulls.net/australopithecus.html De éste modo se muestra cómo enseñar al bot a responder de acuerdo a las preguntas realizadas por el usuario. Este escenario por supuesto tiene muchas interrogantes como qué ocurriría si se dejara éste proceso de aprendizaje abierto a los usuarios y el peligro de que Hackers crearan respuestas con contenidos inadecuados y demás ataques. 8. La palabra clave “that” en AIML se refiere a la última referencia del robot, en caso de tener una respuesta de múltiples oraciones, “that” se refiere a la última frase. Un ejemplo es el siguiente: R: Today is yesterday. C: That makes no sense. R: The answer is 3.1412926 approximately. C: That is cool. <category> <pattern>YES</pattern> <that>DO YOU LIKE MOVIES</that> <template>What is your favorite movie?</template> </category> Esta categoría se active cuando el cliente dice YES. El robot intenta saber a qué está diciendo YES, si la pregunta es ¿Te gustan las películas? La categoría coincidirá y la respuesta ¿Cuál es tu película favorita? será la que continúe la conversación por parte del bot. Una aplicación interesante de éstas categorías es que permite al robot responder a determinadas bromas: 9. Estructura “Topic” La estructura “Topic” nos permite adoptar diferentes preguntas y respuestas en función de un tema concreto de tal manera que cuando se converse acerca de una determinada cuestión, la respuesta pueda ser distinta: topic name="CARS"> <category> <pattern>*</pattern> <template> <random> <li>What’s your favorite car?</li> <li>What kind of car do you drive?</li> <li>Do you get a lot of parking tickets?</li> <li>My favorite car is one with a driver.</li> </random> </template> En éste caso el bot respondería aleatoriamente entre alguna de las cuestiones anteriores en cuanto detecte el tema coches. A partir de todos los patrones anteriores y aplicando las técnicas anteriormente expuestas podemos desarrollar un bot que de cierta sensación de inteligencia respondiendo adecuadamente a un gran número de cuestiones. Un ejemplo de diagrama de flujo atendiendo a los anteriores conceptos es el siguiente: Figura 3: Diagrama de flujo del sistema de respuesta del bot utilizando AIML 5. EL CEREBRO DE ALICE Si hacemos una representación neuronal de los árboles de decisión que puede tener el ALICE tenemos diferentes imágenes en función de los programas que tengan cargados que nos muestra el desarrollo de su “cerebro”. Figura 4: Cerebro de ALICE de 24000 categorías con factor de podado de primera categoría de 2000 y de segunda categoría de 2. [9] Figura 6: Cerebro de ALICE mostrado en espiral. Las zonas con mayor cantidad de hojas representan las relaciones con las palabras Quién, Dónde, Qué, Cuándo… [9] 6. ESTADO ACTUAL DE DESARROLLO DE BOTS En la actualidad se está desarrollando una gran cantidad de bots entre los cuales se encuentran los siguientes con sus respectivas direcciones para informarse. Proyecto: Pandorabots URL: http://www.pandorabots.com Director: Dr. Doubly Aimless Información Adicional: Free web based bot hosting Figura 5: ¼ del cerebro de ALICE correspondiente a Srai.aiml. Cerca de 2000 patrones. [9] Proyecto: Oddcast, Inc. URL: http://www.oddcast.com Director: Adi Sideman, CEO Información Adicional: Vhost animated avitars with AIMC Proyecto: Media Semantics / HostABot.com URL: http://www.mediasemantics.com Director: Doug Copeland Información Adicional: Flash characters and AIML engine URL: http://www.monigarr.com Director: Monica Peters Información Adicional: develops chatbots to learn and teach any language Proyecto: AIML Scripting Resourcee URL: http://www.aiml.info Director: Anne Kootstra Información Adicional: Articles, links and downloads Proyecto: Shadowbots URL: http://www.shadowbots.com/ Director: Karen Gibbs Información Adicional: Eggdrop TCL scripts to publish ALICE bots on TalkCity (formerly Dawnhosting.com/bots) Proyecto: Aitools URL: http://www.aitools.org Director: Noel Bush Información Adicional: Program D downloads and info Proyecto: Artificial Intelligence Nexus URL: http://www.knytetrypper.com/ain.html Director: Richard Gray Información Adicional: Link site for Alicebots Proyecto: J-Alice URL: http://j-alice.sourceforge.net/ Director: Jonathan Roewen Información Adicional: Program J: AIML in C++ with IRC client Proyecto: AIMLPad URL: http://www.aimlpad.com Director: Gary Dubuque Información Adicional: Program N: AIML in C++ with extensions for MSAgent and more Proyecto: PASCALice and AIML Tools URL: http://www.sweb.cz/alicebot/ Director: Kim Sullivan Información Adicional: Program P: AIML in Pascal and Shadowchecker Proyecto: Program E URL: http://sourceforge.net/projects/programe/ Director: Sean Elias, Anne Kootstra, Paul Rydell Información Adicional: AIML in PHP Proyecto: Virtualitas URL: http://www.virtualitas.net/perl/aiml/ Director: Ernest Lergon Información Adicional: Program V: AIML in Perl in Apache environment Proyecto: Pyaiml URL: http://pyaiml.sourceforge.net/ Director: Cort Stratton Información Adicional: Program Y: AIML in Python Proyecto: AimlBot URL: http://www.windowpane.com/alice/ Director: Conan Callen Información Adicional: allows VB developers to create new front ends and applications Proyecto: CyN URL: http://www.daxtron.com/123start.htm?Cyn Director: Kino Coursey Información Adicional: merger of AIML with the OpenCyc inference engine Proyecto: Onkwehonwehneha A.I. Proyecto: Searchers: Ask? URL: http://www.searchers.com/ask/ Director: Kym Kinlin Información Adicional: Intelligent NLP Search Engine based on AIML and Haptek Proyecto: VirtualFem URL: http://www.virtualfem.com/ Director: Mike, Developer Información Adicional: This site contains adult-oriented material Proyecto: Charliebot URL: https://sourceforge.net/projects/charliebot/ Director: Josip Almasi Información Adicional: based on ALICE, ANNA v7.0, and Program D Proyecto: Robot-Hosting URL: http://www.robot-hosting.com Director: Tom Davies, Marketing Director Información Adicional: V-bots use AIML, Haptek chacters, and other systems Proyecto: Intellibuddy URL: http://www.intellibuddy.com/ Director: Rami Mayron, Chief Executive Officer Información Adicional: uses Oddcast Vhosts Proyecto: TrillAlice URL: http://www.estmatic.net/category/trillalice/ Director: Esteban Aparicio, Project Director Información Adicional: AIML plugin for Trillian IM Proyecto: The Bot Factory URL: http://www.thebotfactory.com/ Director: Tom Delanoy Información Adicional: Flash interfacce with lip synch Proyecto: ChatterBean URL: http://chatterbean.bitoflife.cjb.net/ Director: Helio Perroni Filho Información Adicional: Java AIML interpreter Proyecto: libaiml URL: http://omicron.at4x.net/ Director: Omicron Información Adicional: C++ AIML interpreter Entre los chatbots de aficionados y grupos universitarios de desarrollo se realiza un torneo, éste torneo tiene como premio el “Loebner Prize” que sería de 100000 $ para el ganador si éste es totalmente indistinguible de un humano en una conversación larga. A ésa máquina se podrá decir que “piensa”, aunque de momento ninguno ha ganado dicha medalla, el premio de bronce se da a la mejor de las máquinas presentadas. Los últimos ganadores son los siguientes: 2000 Richard Wallace (ALICE) 2001 Richard Wallace (ALICE) 2002 Kevin Copple 2003 Juergen Pirner 2004 Richard Wallace (ALICE) 2005 Rollo Carpenter 2006 Rollo Carpenter 2007 Robert Medeksza 2008 Fred Roberts and Artificial Solutions 2009 David Levy de necesidades humanas a través de robots con una comprensión del lenguaje cercana a la que un humano tiene. Aunque todavía falta mucho para lograr el robot que piensa, si podemos decir que el aprendizaje del lenguaje verbal es cada vez mayor y su perfeccionamiento nos abrirá un nuevo nivel en lo que a IA se refiere. De momento, el robot más desarrollado del mundo es Albert Hubo. 7. APLICACIONES Y CONCLUSIONES Las aplicaciones en las que puede ser útil además del mero disfrute de tener una máquina que sea capaz de responder coherentemente a cualquier pregunta son las siguientes: 7.1 Personas discapacitadas. Los desarrollos de sistemas de reconocimiento de voz y habla basados en la AIML pueden ser muy útiles para que personas con algún tipo de discapacidad física puedan relacionarse con una máquina que les facilite su vida dentro de su casa, o fuera de la misma. Un ejemplo sería el caso de un invidente en su casa pudiera preguntar al robot central de la casa si llueve o no, si hay algún obstáculo en su camino (todo esto combinado con otro tipo de AI no explicadas en este artículo). Otro ejemplo sería el caso de una persona de movilidad reducida que pudiera haber tenido algún incidente lejos del teléfono, simplemente hablando con el robot podría ponerse éste en contacto con emergencias para recibir ayuda convenientemente. 7.2 Coducción de vehículos Puesto que gestionar un GPS con las manos mientras se conduce está prohibido y es peligroso, un bot que tuviera un buen reconocimiento verbal e interpretara adecuadamente las frases del conductor podría perfectamente orientar al conductor siendo interpelado por éste de tal modo que encuentre su destino sin necesidad de desviar la mirada de la carretera. También puede ser útil para otro tipo de controles como intermitentes, limpiaparabrisas, la radio, DVD de los asientos traseros y demás interacciones que distraen de la conducción. Además, el ordenador podría a través de nuestras órdenes verbales conectarse a la información del tráfico para corregir la trayectoria y encontrar el trayecto más adecuado sin necesidad de soltar las manos del volante. Además de éstas aplicaciones, en función del desarrollo y perfeccionamiento del lenguaje que sean capaces de alcanzar los robots podremos llegar a utilizarlos para reducir la sensación de soledad en personas con tendencia a la depresión, robots que reaccionen instantáneamente y de forma adecuada a las órdenes de sus dueños/jefes y demás aplicaciones que podrían parecernos de ciencia ficción. 7.3 Conclusiones A modo de conclusiones se puede decir que la IA en éste campo está en pleno desarrollo y pretende cubrir una gran parte Figura 7: Albert Hubo, el robot más avanzado hasta el momento. Sus funciones lingüísticas están desarrolladas y se puede ver un video de presentación en el link a continuación: http://hubolab.kaist.ac.kr/index.php 8. REFERENCIAS [1] http://upload.wikimedia.org/wikipedia/commons/1/16/A ctroid-DER_01.jpg [2] http://cvc.cervantes.es/obref/congresos/sevilla/tecnologi as/ponenc_carbonell.html [3] http://es.wikipedia.org/wiki/Procesamiento_de_lenguaje s_naturales [4] http://www.monografias.com/trabajos17/lenguajenatural/lenguaje-natural.shtml [5] http://es.wikipedia.org/wiki/AIML.html [6] http://www.alicebot.org/aiml.html [7] http://alicebot.org/TR/2005/WD-aiml/WD-aiml-1.0.1008.html [8] http://www.pandorabots.com/pandora/pics/wallaceaimlt utorial.html [9] http://www.alicebot.org/documentation/gallery/ [10] http://alicebot.org/TR/2005/WD-aiml/WD-aiml-1.0.1008.html [11] http://en.wikipedia.org/wiki/Albert_Hubo