scieee AI-readable full text Open interactive document viewer

Desarrollo de un Asistente Virtual turístico para la ciudad de Madrid

Santos Buitrago, Rocío

Abstract

Un asistente virtual o chatbot es un agente que permite al usuario mantener una conversación “inteligente” utilizando lenguaje natural, hablado o escrito, a través de una aplicación que puede integrarse con un determinado canal. El objetivo de este proyecto es investigar las plataformas que permiten la creación de un asistente virtual y las distintas tecnologías que intervienen en su desarrollo. El resultado final es la implementación del prototipo de un recomendador de museos para la comunidad y ciudad de Madrid. Se diseña un chatbot integrado en un canal de mensajería para facilitar la comunicación con el usuario. El desarrollo está basado en el servicio Watson Conversation de IBM. El asistente recibe la información obtenida a través del procesamiento del lenguaje natural y además gestiona la comunicación entre el usuario y el bot.

Full text

Desarrollo de un Asistente Virtual turístico para la ciudad de Madrid Trabajo de Fin de Grado Curso 2017–2018 Autor Rocío Santos Buitrago Director Pablo Gervás Gómez-Navarro Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid Desarrollo de un Asistente Virtual turístico para la ciudad de Madrid Trabajo de Fin de Grado en Ingeniería Informática Departamento de Ingeniería del Software e Inteligencia Artificial Autor Rocío Santos Buitrago Director Pablo Gervás Gómez-Navarro Convocatoria: Junio 2018 Calificación: Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid 8 de junio de 2018 Autorización de difusión El abajo firmante, matriculado en el Grado en Ingeniería en Informática de la Facultad de Informática, autoriza a la Universidad Complutense de Madrid (UCM) a difundir y utilizar con fines académicos, no comerciales y mencionando expresamente a su autor el presente Trabajo Fin de Grado: “Desarrollo de un Asistente Virtual turístico para la ciudad de Madrid”, realizado durante el curso académico 2017/2018 bajo la dirección de D. Pablo Gervás Gómez-Navarro en el Departamento de Ingeniería del Software e Inteligencia Artificial, y a la Biblioteca de la UCM a depositarlo en el Archivo Institucional E-Prints Complutense con el objeto de incrementar la difusión, uso e impacto del trabajo en Internet y garantizar su preservación y acceso a largo plazo. Rocío Santos Buitrago 8 de junio de 2018 v Dedicatoria A mis padres por ser el pilar fundamental en todo lo que soy. En mi educación, tanto académica como de la vida. Por su incondicional apoyo y confianza perfectamente mantenida a través del tiempo. A mis abuelos, por quererme y apoyarme siempre. A mis hermanos, Beatriz, Marta, Patricia y Gustavo, por estar conmigo y escucharme siempre, los quiero mucho. Todo este trabajo ha sido posible gracias a ellos. vii Agradecimientos Después de un intenso período de nueve meses, hoy es el día: escribo este apartado de agradecimientos para finalizar mi trabajo de fin de grado. Ha sido un gran período de aprendizaje, no solo en el campo científico, sino también a nivel personal. Escribir este trabajo ha tenido un gran impacto en mi y es por eso que me gustaría agradecer a todas aquellas personas que me han ayudado y apoyado durante este proceso. Me gustaría agradecérselo especialmente a mi tutor, Pablo Gervás. Agradecerte tu cooperación y darte las gracias por todas las oportunidades que me has dado durante la investigación. Definitivamente, me brindaste todas las herramientas necesarias para completar mi trabajo de fin de grado satisfactoriamente. También quiero mostrar mi gratitud a Narciso Martí Oliet por sus muchos y buenos consejos. También me gustaría agradecer a mis padres sus consejos y su comprensión. Siempre habéis estado ahí para mí. ¡Muchas gracias a todos! ix 5. Conclusión 65 5.1. Conclusiones ........................... 65 5.2. Trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . . 66 5. Conclusions and Future Work 67 5.1. Conclusions............................ 67 5.2. FutureWork ........................... 68 A. Código en Python 69 A.1. recomendadorMR.py . . . . . . . . . . . . . . . . . . . . . . . 69 A.2.botWatson.py........................... 72 Bibliografía 79 Índice de figuras 1.1. Chatbot based on Eliza. . . . . . . . . . . . . . . . . . . . . . 3 1.2. Examples of chatbots. . . . . . . . . . . . . . . . . . . . . . . 4 1.1. Chatbot basado en Eliza. . . . . . . . . . . . . . . . . . . . . 9 1.2. Ejemplos de chatbots. . . . . . . . . . . . . . . . . . . . . . . 10 2.1. TestdeTuring........................... 14 2.2. Timeline visual de la historia de los chatbots. . . . . . . . . . 14 2.3. Eliza. ............................... 15 2.4. Chatbots de algunas tiendas. . . . . . . . . . . . . . . . . . . 16 2.5. ChatbotdeH&M. ........................ 17 2.6. ElPaísBot............................. 18 2.7. Búsquedas en El País Bot. . . . . . . . . . . . . . . . . . . . . 18 2.8. KittyBus. ............................. 18 2.9. Conversación con KittyBus. . . . . . . . . . . . . . . . . . . . 19 2.10. Chatbot TiDi del supermercado online tudespensa.com. . . . 20 2.11. Consultas al chatbot TiDi. . . . . . . . . . . . . . . . . . . . . 20 2.12.IBMWatson. ........................... 21 2.13. T-Bot de Microsoft. . . . . . . . . . . . . . . . . . . . . . . . 22 2.14.Dialogflow. ............................ 23 2.15. Una sencilla aplicación del tiempo atmosférico con Wit.Ai. . . 24 2.16. Aplicación con Wit.Ai con diálogos más complejos. . . . . . . 24 2.17. Bot desarrollado con AWS que ayuda a encargar flores. . . . . 25 2.18. Chatbot Tay. ........................... 31 2.19. Lenguaje utilizado por los milenials. .............. 32 3.1. Arquitectura de la aplicación. . . . . . . . . . . . . . . . . . . 34 3.2. Protocolo de encriptación de Telegram . . . . . . . . . . . . . 36 3.3. Búsqueda del bot en Telegram. . . . . . . . . . . . . . . . . . 37 3.4. Inicio de conversación en Telegram. . . . . . . . . . . . . . . . 38 3.5. Menú de ayuda en Telegram. . . . . . . . . . . . . . . . . . . 38 3.6. Recomendaciones del bot por precio, lugar y tipo. . . . . . . . 39 xvii 4.1. Diferentes canales disponibles para conexión con el bot. . . . 42 4.2. Herramientas de gestión del bot. . . . . . . . . . . . . . . . . 44 4.3. Intención #Hola. ......................... 46 4.4. Intención #Adiós.......................... 46 4.5. Creación de entidades. . . . . . . . . . . . . . . . . . . . . . . 47 4.6. Entidades del sistema en el espacio de trabajo. . . . . . . . . 47 4.7. Diálogos Bienvenido yEn otras cosas............. 47 4.8. Entidades definidas. . . . . . . . . . . . . . . . . . . . . . . . 51 4.9. Definición de la entidad Museo. ................. 51 4.10. Definición de intenciones. . . . . . . . . . . . . . . . . . . . . 52 4.11. Intenciones #Hola y#Adiós.................... 52 4.12. Intención #Ayuda.......................... 53 4.13. Intenciones #Localización y#Horario. ............ 53 4.14. Intenciones #Precio y#Descuento................ 54 4.15. Intenciones #Precio online y#Precio en taquilla. . . . . 54 4.16. Intención #DíaEspectador. ................... 56 4.17. Organización del diálogo en función de las entidades. . . . . . 56 4.18. Detalle de la creación del contenido del nodo horario. . . . . 57 4.19. Nodo horario. .......................... 57 4.20. Saludo y despedida del bot. . . . . . . . . . . . . . . . . . . . 58 4.21. Entidad precio delmuseo. ................... 59 4.22. Entidad lugar delmuseo. .................... 60 4.23. Entidad tipo delmuseo...................... 60 4.24. Intención ayuda enWatson.................... 61 4.25. Intenciones de Watson. . . . . . . . . . . . . . . . . . . . . . . 61 4.26. Diálogo del recomendador en Watson. . . . . . . . . . . . . . 62 Índice de tablas 2.1. Principales plataformas para construir chatbots (1/2). . . . . 26 2.2. Principales plataformas para construir chatbots (2/2). . . . . 27 xix Índice de listados 4.1. Actualizaciones.......................... 63 4.2. Dependencias........................... 63 4.3. Iniciar/Detener MongoDB . . . . . . . . . . . . . . . . . . . . 63 4.4. Creación.............................. 64 4.5. Actualizaciones.......................... 64 A.1. recomendadorMR.py . . . . . . . . . . . . . . . . . . . . . . . 69 A.2.botWatson.py........................... 72 xxi Chapter 1 Introduction This chapter begins with a brief introduction of the bots to provide an overview of the different types. Then, a section is dedicated to chatbots. Finally, we describe different scenarios where it is possible to find them. 1.1. Bot and types In the decade of the Seventies the term “bot” was registered for the first time. Bot use has grown rapidly in recent years. Wikipedia provides the definition of Dunham and Melnick: “A bot (apheresis of a robot) is a computer program that automatically performs repetitive tasks via Internet, which would be impossible or very tedious for a person to perform” (Wikipedia, 2013; Dunham y Melnick, 2008). In other words, bots are computer applications that perform automated tasks, which allow users to interact with them through the applications. The idea is that through a single application you can get everything you want, without having to waste time with search engines. Not only are there conversational bots, like the chatbots (Salandra, 2017). Later in this chapter, a categorization of the different types of bots is presented. Although bots do not have a specific limit, they do not necessarily have to use a cognitive service or Artificial Intelligence. Furthermore, they are not based solely on natural language processing, that is, it is not necessary to understand the user since simple searches can be carried out. Not only are they referred to text interfaces, such as text conversations, but they can contain images, audios, etc. We can distinguish different types of bots according to their characteristics: CRAWLERS: They collect information from other websites and index it in their database. There are hundreds of web crawlers and bots that 1 2Chapter 1. Introduction roam the Internet. The most famous one is the GoogleBot, also known as “spider”, which is a software designed by Google to index new or updated content on the Internet (Wikipedia, 2017). INFORMATIVE BOTS: They help to manage the information in the channels. For example, Twitter has an informative bot that publishes tweets on a regular basis (Twitter, 2018). But they can also be seen in many other sectors, where they publish posts with their latest news. Another example in the pharmaceutical field is Bot PLUS App, which provides information for pharmacists and healthcare professionals about authorized medicines (Consejo General de Colegios Oficiales de Farmacéuticos, 2018). CHAT BOTS: They are characterized by simulating a conversation with a human. We will dedicate the following section to explain more in detail this type of bot. TRANSACTIONAL BOTS: They act as intermediaries between people and external media, performing transactional operations in a satisfactory manner. They are part of the area known as automation of business processes. Quite a few companies are starting to offer it and, according to a Gartner study, it is expected that an 85% of transactions will be made through bots by 2020. HACKER BOTS: Its main function is to distribute viruses and perform fraudulent actions. The bots on infected computers connect to other infected computers to perform attacks autonomously. For example, botnets are used in general to make money through deceptive uses (Kaspersky Lab, 2013). Among the most common uses are mining and cryptocurrency theft and distributed denial of service (DDoS) attacks. SPAM BOTS: All unwanted advertising and junk content on the Internet is called spam. This spam is generated by spambots and spammers, which seek illicitly gain (CCM, 2013). They are responsible for browsing the web in the search of email addresses, to add them to lists and then send them to those addresses in bulk. GAME BOTS: This type of bot allows the user to play and offers a great variety of categories (Aristimuño, 2017). SCRAPER BOTS: They are usually built to steal personal information such as emails, images, etc. One method of this type of bots is web scraping, which is used to extract information from websites (Wikipedia, 2018b). That information from the web is indexed with a robot that can be analyzed and stored in a central database. It is used in most of the search engines. 1.2. Chatbot 3 1.2. Chatbot “Chatbots” are computer programs that allow to keep a conversation with the user and makes them feel as if they were talking to a human being. Chatbots talk with humans, answer their questions, provide suggestions, facilitate user tasks, help improve customer service, increase reservations and/or sales in businesses, .. . Each program has a “specific personality”, that is, internally each one has an associated business logic and can execute the actions as they wish. Eliza has been considered the first chatbot in history (Norvig, 1992). In comparison with the current chatbots, the limitations of the passage of time can be observed. It worked by maintaining a conversation with the user, recognizing key words and asking about them pretending to be a psychologist. Figure 1.1 shows a chatbot based on Eliza. Figure 1.1: Chatbot based on Eliza [http://deixilabs.com/eliza.html]. Currently users can interact with chatbots through applications. Normally the applications always perform the same interactions with the users. However, chatbots provide the user with a full control experience (Wikipedia, 2018a). The most advanced chatbots can connect with the user, know their mood and react to those needs; although the bot itself is not able to generate questions or create feelings as a human. Chatbots are computer programs, to which the answers to certain questions are indicated or it answers according to similar words. Most bots fail to fully understand the phrases, or make decisions for themselves. In terms of learning ability, a chatbot can expand its database with new questions and the use other techniques. One of these techniques is the connection to external services (e.g., cognitive services that allow “bot” to be provided with “intelligence”). An example of applications that use these systems are Siri and Cortana. Figure 1.2 shows some images of chatbots in which you can observe the use of information in real time. A second case is the chatbots that are used by applications that allow a 10 Capítulo 1. Introducción En cuanto a la capacidad de aprendizaje, un chatbot puede ir ampliando su base de datos con nuevas preguntas y utilizar otras técnicas. Una de esas técnicas es la conexión a servicios externos (e.g., servicios cognitivos que permiten dotar de “inteligencia” al bot). Un ejemplo de aplicación que utiliza estos sistemas son Siri o Cortana. La Figura 1.2 muestra unas imágenes de chatbots en las que se puede observar la utilización de información en tiempo real. Figura 1.2: Ejemplos de chatbots. Un segundo caso lo constituyen los chatbots que se utilizan mediante aplicaciones que permiten una difusión multi-canal. Se puede tener un chatbot conectado a cualquier servicio de mensajería, como Skype, Facebook Messenger, Telegram o Slack, entre otras (Schlicht, 2016). En estas aplicaciones se incorpora el chatbot como un contacto más. Además puede conectarse a APIs de redes sociales de servicios como Facebook o Twitter. En el capítulo siguiente se detallarán ejemplos de los chatbots actuales más destacados. 1.3. Escenarios más habituales En la sociedad actual para muchas personas es habitual pasar una gran parte del día interaccionando con sus teléfonos. Hay numerosas actividades que los usuarios realizan con frecuencia y numerosas acciones que están au- 1.4. Objetivos 11 tomatizadas que son periódicas y se realizan a menudo. Un chatbot es una experiencia proactiva que aporta una comodidad novedosa al usuario. Las aplicaciones normalmente realizan siempre las mismas interacciones y no dan libertad al usuario. Otras veces perdemos mucho tiempo con la navegación de una página a otra hasta encontrar la información que se desea. Un asistente puede ayudar en muchas tareas, como la de facilitar recordatorios relacionados con momentos, lugares o personas. Con un simple mensaje se pueden activar alarmas. También puede realizar el seguimiento y monitorización de equipos, intereses y vuelos; enviar correos electrónicos y mensajes de texto; mantener al usuario al día; charlar y jugar; abrir cualquier aplicación del sistema; solicitar reservas en restaurantes y hoteles; realizar actividades de marketing; etc. Se pueden encontrar chatbots en una gran variedad de ámbitos, por ejemplo, en el realización de pedidos: un bot se encarga de recibir el pedido, contestar al cliente y tramitarlo. En el ámbito de la atención al cliente, un bot puede almacenar las preguntas frecuentes y la información necesaria para contestar en función de la pregunta. De esta forma se evita invertir en personas con conocimiento del negocio que contestan a los usuarios y que siempre contestan las mismas preguntas. También se evita que el usuario tenga que estar horas al teléfono hasta ser atendido. En las solicitudes de asistencia médica, los bots facilitan la reserva de consultas, pueden disponer de una agenda y saber cuándo su médico estará disponible, etc. Por todas estas facilidades de los bots, se espera un auge de su uso en los próximos años. Los usuarios los prefieren en las búsquedas y en el acceso a los contenidos y servicios digitales. Además los bots pueden dispensar un trato personalizado que se mejora según el bot aprende con la experiencia adquirida y con el conocimiento de las preferencias del usuario. 1.4. Objetivos El objetivo de este proyecto es investigar las plataformas que permiten la implementación de un chatbot y las distintas técnicas que se utilizan para su desarrollo. Para demostrar la aplicación del estudio se elaborará, mediante las tecnologías existentes, un prototipo de un asistente virtual que ofrezca servicios turísticos de la comunidad y ciudad de Madrid. Cuando un turista se encuentra en una ciudad, le surgen dudas que necesita resolver al momento. A través de una simple conversación, se podría obtener tanto la información de su destino, como la historia de los monumentos o los personajes relacionados con ellos. La ciudad de Madrid dispone de una gran cantidad de actividades, por ejemplo, numerosos museos y una 12 Capítulo 1. Introducción amplia y variada oferta gastronómica. Además, nuestra ciudad cuenta con gran número de cines, bibliotecas y otros servicios turísticos. Gracias a este chatbot se puede obtener la recomendación de un museo, en base a unos atributos, a través de una simple conversación. Capítulo 2 Estado de la cuestión La primera sección de este capítulo muestra la evolución de los chatbots desde sus inicios hasta la actualidad. A continuación se analiza cómo los chatbots han llegado a introducirse hoy en día. Se mostrarán también los chatbots más importantes y utilizados en la actualidad. Por último, se estudiarán las distintas plataformas existentes para la creación de chatbots y las técnicas que se utilizan para desarrollar el diálogo. También se comentan las ventajas y limitaciones que se han encontrado en el desarrollo de estos trabajos. 2.1. Evolución histórica Para situarnos en el momento actual hay que hacer un recorrido desde principios de los años cincuenta. En 1950 Alan Turing propuso en su ensayo Computer Machinery and Intelligence un test para calificar la inteligencia de las máquinas (Turing, 1950). La prueba de Turing es uno de los temas más controvertidos en Inteligencia Artificial, filosofía de la mente y ciencia cognitiva (Saygin et al., 2000). Si una máquina fuera capaz de hacernos creer que estamos dialogando con un humano, entonces pasará esta prueba y la consideraremos inteligente (ver Figura 2.1). Unos años más tarde John McCarthy acuñó el término de Inteligencia Artificial. La describe como la ciencia y la ingeniería de hacer máquinas inteligentes (McCarthy, 1960; Cerdas Mendez, 2016). Inbenta sitúa la creación de los primeros chatbots junto los principales hitos necesarios que intervienen en el funcionamiento de los chatbots: primer motor de búsqueda, primer webclawler, búsquedas con lenguaje natural, motores de búsqueda semánticos, reconocimiento de voz, Inteligencia Artificial del chatbot (Inbenta, 2017). Los primeros chatbots que investigaban el procesamiento del lenguaje natural surgieron a principios de los sesenta (Mauldin, 1994). La Figura 2.2 muestra la cronología de la historia de los chatbots. 13 14 Capítulo 2. Estado de la cuestión Figura 2.1: Test de Turing. La “interpretación estándar” de la prueba de Turing, en la cual el jugador C, el interrogador, le es dada la tarea de tratar de determinar qué jugador —¿A ó B?— es una computadora y cual un ser humano. El interrogador se limita a la utilización de las respuestas a las preguntas escritas para tomar la determinación [Fuente: http: //es.wikipedia.org/wiki/Test_de_Turing, (Saygin et al., 2000)]. Figura 2.2: Timeline visual de la historia de los chatbots [Fuente: (Chakraborty, 2017). 2.1. Evolución histórica 15 Destacó el desarrollo de Eliza, un proyecto desarrollado por el Artificial Intelligence Laboratory en el MIT que intentaba emular a una psicóloga (Weizenbaum, 1966). Eliza busca palabras clave en la frase que el usuario escribe y responde utilizando una frase de su base de datos (ver Figura 2.3). En ocasiones sus respuestas se volvían incoherentes, cuando no entendía lo que había querido decirle. Figura 2.3: M-x doctor mode, an Eliza clone running in GNU Emacs [Fuente: http://en.wikipedia.org/wiki/ELIZA]. En 1995, inspirado por Eliza, comenzó el desarrollo del bot Alice (Artificial Linguistic Internet Computer Entity), capaz de recoger ejemplos de lenguaje natural (Wallace, 2009). El programa utiliza un esquema XML llamado AIML (Artificial Intelligence Markup Language) para especificar las reglas de conversación heurística. Los datos se podían encontrar organizados en categorías. Desde la página de Alice (http://www.pandorabots.com/ pandora/talk?botid=b8d616e35e36e881), el usuario puede mantener una conversación con este programa inteligente y se simula una charla real en la que es difícil darse cuenta de que detrás existe un robot. Con todos estos avances se consideró que los límites aún no se habían alcanzado. El reto ya se había propuesto desde comienzos de los 50 y muchos investigadores se unían a él: ordenadores capaces de batir al ser humano. A principios del 2000 continuaba el desarrollo de la IA, se buscaba el desarrollo de robots con habilidades y personalidades o el aprendizaje en la navegación por un espacio. Entre ellos se puede destacar: la mascota robótica de Sony AIBO, Artificial Intelligence Robot (Fujita, 2001), o el innovador asistente robótico para el hogar Roomba (Forlizzi y DiSalvo, 2006). Diez años más tarde, Apple creó Siri, el primer asistente virtual para teléfonos (Siri, Apple, 2014), que surgió de la investigación del Artificial Intelligence Center de SRI International. A través del reconocimiento de voz y del procesamiento del lenguaje natural, Siri puede buscar la información solicitada en las aplicaciones del propio dispositivo o en Internet si no lo encuentra. 16 Capítulo 2. Estado de la cuestión El mismo año IBM lanzó Watson al mercado (High, 2012). Este sistema inteligente es capaz de crear hipótesis y dar la respuesta con una mayor probabilidad. Años más tarde, empresas como Microsoft y Amazon lanzan sus asistentes. Cortana (2014) se ha extendido en los smartphones, tabletas, computadoras y consolas de videojuego. Este asistente reconoce el lenguaje natural, puede aprender y adaptarse aprovechando sus bases con millones de datos (Microsoft Cortana, 2017). Alexa (2014) fue el primer asistente virtual creado por Amazon. Su principal característica es que se puede utilizar con el parlante inteligente llamado Amazon Echo (Ebling, 2016) y permite conocer información sobre clima, productos, compras, recordatorios, e inclusive video llamadas (Amazon Alexa Web Portal, 2017). También las mensajerías móviles incluyen asistentes en sus plataformas (ver Figura 2.4). Por ejemplo, WeChat, KikMessenger o Telegram usan chatbots para realizar pagos en cafeterías o tiendas de ropa, para descargar música, reservar un taxi, comprar billetes de avión, etc. (Marupaka, 2018; Condé Nast Traveler, 2016; Claire by 30Secondstofly, 2016). Figura 2.4: Chatbots de tiendas de ropa, música y reserva de taxis. Por último cabe destacar la importancia que están tomando estas aplicaciones que utilizan IA a la hora de cubrir funciones de ayudas para el usuario. Como se puede ver en las páginas de Renfe (Irene es el asistente virtual de Renfe [http://www.renfe.com/asistente.html]), Carrefour, H&M (ver Figura 2.5), entre muchas otras. Otros ejemplos de chatbots se pueden encontrar en: El Bot-Hub Project ofrece, de forma estructurada, descripciones y críticas de cientos de chatbots (http://bot-hub.com) Kik bot shop, una tienda virtual de bots (http://bots.kik.com) 2.2. Chatbots en castellano 17 Figura 2.5: Chatbot de H&M [http://www2.hm.com/es_es]. BotList es un directorio de los mejores bots para Messenger, Discord, etc. (http://botlist.co) Bot Framework es un catálogo de bots de Microsoft (http://bots.botframework. com) El directorio de chatbots ofrecido por la plataforma de bots Chatfuel (http: //chatfuel.com/bots) 2.2. Chatbots en castellano Como se ha mencionado anteriormente, los chatbots son aplicaciones que realizan una gran cantidad de cometidos: pueden buscar restaurantes, horarios de aviones, habitaciones de hotel, predicción del tiempo, entre muchas otras cosas. Existen un gran número de chatbots para lengua inglesa. Aunque en lengua castellana aún no hay tantos, su número va creciendo. A continuación, se muestran los más populares y eficientes en castellano para distintos sectores: El País Bot es el primer bot conversacional del periódico El País. En función de las noticias suscritas, el usuario recibirá las noticias relacionadas. Propone una amplia gama de temas, que pueden ser tanto noticias como artículos de opinión o reportajes. Además se pueden buscar noticias recientes relacionadas con palabras clave, lo que te hace muy fácil ponerse al día (ver Figuras 2.6 y 2.7). Otro bot que está adquiriendo una gran cantidad de usuarios es KittyBus de la Empresa Municipal de Transportes de la ciudad de Madrid. Funciona sobre una aplicación Ruby on Rails con una base de datos 18 Capítulo 2. Estado de la cuestión Figura 2.6: El País Bot. Figura 2.7: Búsquedas en El País Bot. Figura 2.8: KittyBus. 2.3. Plataformas de desarrollo 19 SQLite. Permite obtener los datos precisos y a tiempo real gracias a su conexión con la API de la EMT Madrid (ver Figura 2.8). Se trata de un gato que te dice cuanto tiempo tardará en llegar el autobús indicándole el número de parada o cuales son las paradas más cercanas a tu posición actual. Si el usuario se encuentra lejos de una parada, KittyBus también puede guardar las paradas favoritas para obtener la información en otro momento (ver Figura 2.9). Figura 2.9: Conversación con KittyBus. Lola Euroresidentes es un chatbot que conoce el horóscopo. Está desarrollado por el grupo de trabajo IT&IS Open Space Technology. Está basado en el sistema api.ai de Google, una tecnología de creación de chatbots con aprendizaje automático. Desarrollan los corpus conversacionales temáticos sobre la base de árboles y grafos no dirigidos, con la finalidad de conseguir una mejor experiencia. Sus conversaciones abarcan todos las situaciones de la vida: trabajo, relaciones personales y familiares, etc. Si necesita hacer la compra y buscar/pedir los productos directamente a la tienda, TiDi es su asistente favorito. Se trata de un asistente del supermercado online tudespensa.com (ver Figuras 2.10 y 2.11). TiDi es muy simpática y dice ser prima de Siri. El usuario puede pedirle hablar directamente con el equipo humano si no encuentra lo que busca. 2.3. Plataformas de desarrollo En esta sección se analizan las plataformas principales que existen para el desarrollo de chatbots de grandes empresas en el sector informático: IBM, Microsoft, Google, Facebook y Amazon (Ananthavel, 2018; Akiwatkar, 2017; Futurizable, 2017; Briz, 2017; Singh, 2017). 26 Capítulo 2. Estado de la cuestión Nombre del bot Plataforma Características IBM Watson IBM Watson Conversation Service Construido sobre una red neuronal. Tiene tres componentes principales: intenciones, entidades, diálogo AgentBot Tecnología de PLN propia de Aivo Entiende el lenguaje natural; Memoria para mantener la coherencia en conversaciones largas; Recopila información del cliente para personalizar soluciones Twyla Plataforma AI propietaria Aprende de los chats del agente/cliente; Combina aprendizaje automático y métodos basados en reglas; Contesta preguntas Pypestream Plataforma de mensajería inteligente propia Pypestream utiliza un framework patentado de Pypes y Streams; Procesamiento de lenguaje natural y análisis de palabras clave DigitalGenius Herramienta de eficiencia de agentes de deep learning Predice con AI los metadatos de los casos y sugiere las respuestas correctas para sus agentes; Aprende con AI de cada interacción de agente Semantic Machines Plataforma con AI conversacional patentada Aprendizaje profundo; Reconocimiento de voz; Extrae la intención semántica; Utiliza Conversation Engine para generar lenguaje natural Msg.ai Plataforma de AI para el comercio conversacional Modelos de intenciones y clasificaciones de tonos; Aprendizaje profundo Tabla 2.1: Principales plataformas para construir chatbots (1/2) [Fuente: (Davydova, 2017)]. 2.4. Técnicas existentes El objetivo de un buen chatbot es conseguir que trabaje de forma inteligente. Existen dos modos de funcionamiento: el primero basado en un conjunto de reglas y un segundo modo más avanzado consiste en la aplicación de técnicas de Inteligencia Artificial. Con la definición de reglas, el chatbot es más limitado y sólo puede responder a unos comandos específicos. En el ámbito de las ciencias de computación, se puede definir la IA como la capacidad que tiene una máquina de aprender, razonar y resolver problemas. Los pilares básicos en los que se basa la IA son (Nilsson, 2014): Búsqueda del estado requerido en el conjunto de los estados producidos por las acciones posibles Un estado es la representación de los elementos que describen al problema en un momento dado, es decir, la situación en la que se encuentra en un instante. Nilsson se refiere a la búsqueda del estado, como a la solución al problema planteado dentro del conjunto del espacio de estados. Siendo éste, un grafo cuyos nodos son todos los posibles estados que se pueden dar y las aristas son las transiciones entre ellos. 2.4. Técnicas existentes 27 Nombre del bot Plataforma Características wit.ai - Permite utilizar entidades, intenciones, contexto, comportamiento, proceso de lenguaje natural Api.ai - Ajusta la consulta y la intención más adecuada en función de la información contenida en la intención y el modelo de aprendizaje automático del agente Microsoft Bot Framework - Entiende la intención del usuario; Puede incorporar LUIS para la comprensión del lenguaje natural, APIs de Bing para búsquedas y Cortana para voz LUIS Microsoft Language Understanding Intelligent Service Utiliza intenciones y entidades; Aprendizaje activo; LUIS devuelve JSON fácil de usar Pandorabots - AIML; Incluye A.L.I.C.E. ChatterBot - Selecciona la respuesta con mejor coincidencia Rebot.me - Permite crear un chatbot y entrenarlo con preguntas y sus respuestas correspondientes; Ofrece un registro de chat con los resultados de conversaciones anteriores Reply.ai Visual Bot builder Aprovecha los motores de PLN de wit.ai y api.ai para sus casos de uso avanzado KITT.AI ChatFlow Detección de palabras clave (no se requiere internet); PLN y análisis semántico; Redes neuronales Tabla 2.2: Principales plataformas para construir chatbots (2/2) [Fuente: (Davydova, 2017)]. Algoritmos genéticos Un algoritmo genético es un método adaptativo que puede usarse para la resolución de problemas de búsqueda y optimización. Están basados en el proceso genético de los organismos vivos. Las poblaciones evolucionan en la naturaleza a lo largo de las generaciones acorde con los principios de la selección natural y supervivencia de los más fuertes postulados por Darwin. Los algoritmos genéticos son procesos de búsqueda heurística que simulan la selección natural. Usan métodos tales como la mutación y el cruzamiento para generar nuevas clases que puedan ofrecer una buena solución al problema. Con la imitación de este proceso, los algoritmos son capaces de crear soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos depende de la codificación de las mismas. Es decir, consiste en una función matemática o rutina de software que toma como entradas a los ejemplares y devuelve como salidas ejemplares que deben generar descendencia para una nueva generación. Redes neuronales Son un paradigma de aprendizaje automático cuya función es emular al cerebro humano inspirado en las neuronas del sistema nervioso. Se 28 Capítulo 2. Estado de la cuestión trata de un sistema de enlaces de neuronas que colaboran entre sí para producir un estímulo de salida. Las conexiones tienen pesos numéricos que se adaptan según la experiencia o entrenamiento. De esta manera, las redes neuronales se adaptan a un impulso y son capaces de aprender. La importancia de las redes neuronales decayó durante un tiempo, pero volvió a resurgir a finales de la década de 2000 con la aparición del aprendizaje profundo. Razonamiento mediante lógica formal análoga al pensamiento abstracto humano El razonamiento que puede tener cualquier persona es una de las tareas más difíciles de modelar en un ordenador. Se debe a que los razonamientos no suelen ser exactos y las conclusiones no están basadas en unas reglas binarias. Se pueden distinguir entre dos corrientes según el método de desarrollo: simbolistas y conexionistas (Russell y Norvig, 2016). La corriente simbolista se apoya en los principios planteados por Simon y Newell, que defienden que los procesos inteligentes deben poder expresarse mediante operaciones sobre símbolos. Los conexionistas, inspirados por McCulloch y Pitts, simulan la inteligencia humana a través de las conexiones que se establecen entre las unidades, de la misma forma que las neuronas. Las redes neuronales artificiales son apropiadas para aplicaciones como el reconocimiento de patrones o el manejo de voz, caracterizadas por la existencia de ruido y por la dificultad de especificar el dominio. Mientras que el simbolismo ha resultado más útil cuando la información disponible está más formalizada. Para profundizar más, se comentan dos de las ramas que estudia la Inteligencia Artificial: el procesamiento del lenguaje natural y el aprendizaje automático. Se incluyen también unas nociones y características del aprendizaje profundo. 1. Procesamiento del lenguaje natural Es la disciplina encargada de producir sistemas informáticos eficientes que posibilitan una comunicación, por medio de voz o texto, entre las personas y las máquinas a través del lenguaje natural. Además de la tarea de comprensión y generación del lenguaje, se centran en los aspectos cognitivos humanos y en la organización de la memoria. Las principales aplicaciones son, entre otras, la traducción automática de textos y análisis del sentimiento, realización de resúmenes, clasificación de documentos por categorías, recuperación y extracción de la información, sistemas conversacionales o dar respuestas automáticas a preguntas. 2.4. Técnicas existentes 29 El procesamiento del lenguaje natural requiere varias tareas (Carbonell, 1994), que se pueden descomponer en: Análisis morfológico: El 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. Tratar la lengua computacionalmente requiere un proceso de modelización. En la década de los 50 surgieron unos primeros modelos que pretendían reflejar la estructura lógica del lenguaje. La mayoría de estos sistemas se basaban en modelos lógicos, en los que los lingüistas escriben reglas de reconocimiento de patrones, empleando un formalismo gramatical. Estas reglas, junto con la información almacenada necesaria, definen los patrones que hay que reconocer para resolver las tareas (Moreno, 2017). A finales de 1980, hubo una revolución con la introducción de algoritmos de aprendizaje automático para el procesamiento del lenguaje. 2. Aprendizaje automático Rama de la IA cuyo objetivo es desarrollar técnicas que permiten aprender a los ordenadores. La aproximación que se utiliza en este ámbito consiste en modelos probabilísticos del lenguaje natural basados en datos. Los lingüistas recogen colecciones de ejemplos y datos. A partir de ellos se calculan las frecuencias entre distintas unidades y la probabilidad de aparecer en determinados contextos. De esta forma se podrá predecir cual es la siguiente unidad en un contexto dado, sin necesidad de recurrir a reglas explícitas. Este es el paradigma del aprendizaje automático, donde se pueden inferir posibles respuestas en función de los datos observados. 30 Capítulo 2. Estado de la cuestión Tiene una amplia gama de aplicaciones, incluyendo por ejemplo motores de búsqueda, diagnósticos médicos, reconocimiento del habla y del lenguaje escrito, entre otras. Podemos distinguir una taxonomía en función de la salida los distintos algoritmos del aprendizaje automático (Ng et al., 2013): Aprendizaje supervisado: El algoritmo establece una correspondencia entre las entradas y salidas del sistema. El profesor suministra ejemplos al sistema. Este tipo de aprendizaje puede llegar a ser muy útil en problemas de investigación bioinformática, biológica y biología computacional. Aprendizaje no supervisado: No hay profesor que verifica los ejemplos. El objetivo es descubrir patrones en el conjunto de entrenamiento que permitan agrupar y diferenciar unos ejemplos de otros. Aprendizaje por refuerzo: Es un aprendizaje semi-supervisado, donde se combinan los dos anteriores. El sistema recibe algún tipo de recompensa cada vez que produce una respuesta, ajustando su comportamiento en función de dicha recompensa. En función del tipo de enfoque, el tipo de machine learning utilizado puede ser: árboles de decisión, reglas de asociación, algoritmos genéticos, redes neuronales artificiales, máquinas de vectores de soporte, algoritmos de agrupamientos y redes bayesianas. 3. Deep learning El deep learning consiste en un conjunto de algoritmos dentro del aprendizaje automático y con aprendizaje no supervisado (García Moreno, 2018). Mientras que los algoritmos tradicionales para el machine learning son lineales, en el aprendizaje profundo los algoritmos se apilan en una jerarquía de creciente complejidad y abstracción, donde se intentan modelar abstracciones de alto nivel de los datos (Rodríguez, 2017). El aprendizaje profundo representa un acercamiento al modo de funcionamiento del sistema nervioso de un humano. En lugar de enseñarle una lista de reglas para resolver un problema, proporcionamos un modelo que pueda evaluar ejemplos y una pequeña colección de instrucciones para modificarlo cuando se produzcan errores. Con el tiempo, esperamos que esos modelos sean capaces de solucionar el problema de forma precisa, gracias a su capacidad de extraer patrones. Aunque existen diversas técnicas, una de las más comunes es la simulación de sistemas de redes artificiales de neuronas. Se caracterizan por tener una arquitectura en capas, donde cada capa aprende patrones 2.5. Desafíos y problemas 31 más complejos según la profundidad en la que se encuentre. Las capas forman una jerarquía de características desde un nivel de abstracción más bajo a uno más alto. Existen redes neuronales que tienen esta característica como las redes convolucionales o redes recurrentes. Sin embargo, existen otras que no se consideran profundas como el perceptrón, que no se considera deep learning al tener una única capa. 2.5. Desafíos y problemas Los chatbots se encuentran aún en sus primeras etapas de desarrollo, pero se puede imaginar en qué convertirán en el futuro. Hoy en día ya tienen un enorme potencial de beneficios. Con los años se están convirtiendo en una amenaza para los buscadores. Aunque no todo son ventajas, el problema principal en la mayoría de los bots es que son poco inteligentes o útiles. Su desarrollo es muy fácil sin necesitar nociones de programador, pero la calidad de sus funcionalidades empeora notablemente (Mas Digital, 2017). A lo largo de la historia las marcas/empresas han intentado acercarse a los clientes con el objetivo de convertirse en sus amigos y, a través de los asistentes, intentan involucrarlos en sus negocios. A medida que esta tecnología avance, deberán proporcionar confianza a los usuarios. Los usuarios buscan una asistencia personalizada, comportamientos creativos y que sean capaces de entender la sensibilidad que podría estar sintiendo el usuario humano. Sin embargo, hay que ser cuidadoso cuando se imita el comportamiento humano. Un ejemplo es el chatbot Tay de Microsoft que fue un fracaso (ver Figura 2.18). Se diseñó para imitar los patrones de lenguaje de una adolescente americana y para aprender de las interacciones con los usuarios de Twitter (TayTweets, 2017). Aunque tenía temas censurados, el chatbot enviaba mensajes racistas y cargados de contenido sexual. Microsoft tuvo que retirar el servicio en tan solo 16 horas. Figura 2.18: Chatbot Tay. Uno de los problemas centrales que podemos encontrarnos en la manipulación del lenguaje natural es la ambigüedad en el idioma. Puede ser reflejado 32 Capítulo 2. Estado de la cuestión por distintos niveles: léxico, referencial y pragmático (ver Figura 2.19). Figura 2.19: Lenguaje utilizado por los milenials. En el nivel léxico, una palabra puede tener varios significados y la selección del significado apropiado se debe deducir del contexto adicional. Muchas investigaciones estudian formas de resolverlo, aplicando métodos mediante diccionarios, gramáticas, bases de conocimiento y correlaciones estadísticas. En el nivel referencial es necesario conocer el hilo de la conversación o entender la entidad a la que se refiere, para tener en cuenta las anáforas o catáforas. Por último, en el nivel pragmático, en muchas ocasiones las frases no expresan lo que literalmente dicen. Existen elementos como la ironía que forman parte de la interpretación. Hay que destacar que la tecnología ha cambiado la forma de comunicación y los milenials no utilizan el lenguaje como la gente “mayor”. En sus conversaciones es cotidiano encontrarse con abreviaturas, contradicciones o faltas de ortografía (Sierra, 2017). Además pueden no leer los mensajes y responder sin seguir el hilo de la conversación, lo que dificulta la comprensión con los chatbots. Capítulo 3 Contribución Para afrontar este proyecto, a grandes rasgos se pueden distinguir las siguientes fases: Investigación de técnicas y tecnologías Implementación de un prototipo Análisis de los resultados y conclusiones La primera fase se ha expuesto en los capítulos anteriores y, en este capítulo, se detallará la aplicación que se ha implementado. En primer lugar se introducen las funcionalidades del recomendador de museos de Madrid que se desea implementar. En el Capítulo 4 se puede encontrar el primer prototipo: Asistente Turístico de Madrid. Después se explicará la arquitectura que se ha utilizado y se finalizará con un ejemplo de funcionamiento. 3.1. Descripción de la funcionalidad del sistema El objetivo final es diseñar una arquitectura de un bot recomendador de museos que esté integrado en un canal para facilitar la comunicación con el usuario. Como la versión anterior había sido muy limitada, se quiere ahora utilizar una fuente externa a Watson y poder realizar consultas utilizando los parámetros que el bot identifica (entidades, intenciones, variables, etc.). De otro modo, tendríamos que gobernar el hilo de la conversación desde el bot o tener un número de ramas que no consideramos escalable. Se espera implementar un bot con el que, mediante una aplicación de mensajería a través de una simple conversación, pueda recomendarnos un museo al que poder ir en base a unas características. La recomendación del bot se puede realizar considerando distintos atributos: 33 34 Capítulo 3. Contribución Por un lado, se puede solicitar la recomendación en función del precio, distinguiendo entre museos baratos,medios ycaros. Existe también la posibilidad de solicitar un museo en función de la localización. Se distinguen las siguientes zonas: norte,sur,este,oeste ycentro de Madrid. Clasificando sus barrios entre estas clases para poder realizar la búsqueda del museo. Por último se puede distinguir por tipos de museos. Existe un amplio repertorio de categorías, entre las que hemos definido están: antropológico,arqueológico,arte contemporáneo,artes decorativas,bellas artes, ciencias naturales,científico tecnológico,histórico y etnográfico,marítimo y naval,militar ymusical. 3.2. Arquitectura para el diseño En esta sección se incluye una pequeña introducción de las tecnologías que han sido escogidas para el prototipo final y se describe la infraestructura del resultado final de la aplicación del bot con cada una de las siguientes tecnologías: IBM Watson Telegram (Front-end) Python (Back-end) Mongodb (Storage) Figura 3.1: Arquitectura de la aplicación. 3.2. Arquitectura para el diseño 35 La solución de esta aplicación consiste en implementar un orquestador, que es básicamente un cliente del bot. Esta solución se llevó a cabo inicialmente para el primer prototipo de una forma más simple. Como el proceso es similar, en la Figura 3.1 se incluye sólo el desarrollo del último por ser más completo. Primero se realiza una breve introducción de las tecnologías que han sido escogidas, resaltando las características útiles para el proyecto. Python es un lenguaje de programación interpretado y muy potente (Python Software Foundation, 2017; Cannon, 2018; Van Rossum y Drake, 2011). Gracias a esta característica, funciona en cualquier sistema que integre su intérprete. Python es multiplataforma, por lo que se puede ejecutar en diferentes sistemas operativos como Linux o Windows. No sólo es multiplataforma y multiparadigma, sino que además cuenta con numerosos frameworks que facilitan el desarrollo y la conexión entre distintas tecnologías (Guttag, 2013; Kuhlman, 2009). IBM Watson ofrece una API para cada bot, que permite identificarlo con el workspaceId,clientId ypassword. Además gestiona la comunicación entre el usuario y el bot, recibiendo toda la información asociada al procesamiento del lenguaje reconocida por el mismo (IBM, 2018a). Telegram proporciona una interfaz para interactuar con los usuarios (Telegram group, 2013; Malizia, 2016). Está creado sobre una serie de servidores distribuidos que, para comunicarse, utilizan un protocolo propio llamado MTProto. Este protocolo ofrece una mejora en la seguridad y en el envío de mensajes, vídeos e imágenes (Wikipedia, 2016). El API con el que se interactúa está diseñado para ocultar toda la sección del protocolo de cifrado. De esta forma, su manejo resultará más natural y sencillo (ver Figura 3.2). Para el almacenar el conocimiento, se ha utilizado MongoDB (Membrey et al., 2011; Banker, 2011). Es una base de datos NoSQL orientada a documentos. Esto quiere decir que, en lugar de guardar los datos en registros, se almacenan en documentos con formato BSON, que es una representación binaria de JSON (Chodorow, 2013). Además, existe una librería de Python conocida como Pymongo, para trabajar con MongoDB y poder realizar el tratamiento con las otras plataformas. Para la infraestructura, se explicará primero la arquitectura sin la integración con Telegram, que corresponde al datapath sin canal. La comunicación entre el usuario y el chatbot se realiza a través del orquestador desarrollado en Python. La API a la que nos referimos en esta sección del documento es de tipo REST y la información se intercambia en formato JSON. Al comenzar la ejecución del programa se leen las credenciales y los identificadores del workspace. Después éstas son enviadas a la API de Watson para iniciar la conversación con nuestro bot. 42 Capítulo 4. Fases del proyecto elección de la herramienta a utilizar, la definición de la funcionalidad del bot y su implementación. 4.2. Fase 2: Diseño y desarrollo del bot En esta fase se presentan los pasos que se siguieron hasta finalmente conseguir el prototipo final. Se detallarán la herramienta propuesta y sus ventajas. También se describe la funcionalidad del bot y los problemas que surgieron durante el desarrollo. 4.2.1. Fase 2.1: Tecnología - Microsoft Bot Framework En un primer momento se tomó la decisión de implementar el bot con la herramienta que proporciona Microsoft. Azure es un conjunto integral de servicios en la nube que los desarrolladores utilizan para crear, implementar y administrar aplicaciones (Microsoft, 2018). Una de las herramientas que posee es Azure Bot Service, que es un servicio de bots inteligentes que se escala a petición y permite a los desarrolladores crear interfaces de conversación para distintos escenarios. Permite además acelerar el desarrollo de bots con cinco plantillas que se pueden elegir en el momento de la creación y se pueden modificar/personalizar aún más en un entorno de desarrollo integrado, como Visual Studio. Los beneficios que encontré en esta herramienta fueron varios. Por ejemplo, la facilidad de conectividad con canales, es decir, la conexión entre el Bot Framework y las aplicaciones de comunicación como Skype y Facebook Messenger, entre otras (ver Figura 4.1). El Bot Connector es el encargado de conectar un bot a uno o más canales y maneja el intercambio de mensajes entre ellos. De esta forma controla la conversación proporcionando una abstracción de la complejidad de cada plataforma. Figura 4.1: Diferentes canales disponibles para conexión con el bot. Otra ventaja que ofrece Azure es la posibilidad de escribir un bot, conectarlo, probarlo, implementarlo y administrarlo desde su navegador web sin necesidad de un editor o control de fuente por separado. Tomada la decisión de la herramienta a utilizar, en esta siguiente fase fue necesario preparar el entorno y, una vez instalado, diseñar la funcionalidad del chatbot. 4.2. Fase 2: Diseño y desarrollo del bot 43 4.2.1.1. Fase 2.1.1: Preparación del entorno El primer paso fue preparar el entorno necesario para esta herramienta, que ofrece la posibilidad de utilizarse a través de la web o con un entorno de desarrollo. Luego se preparó el entorno para utilizarse en ambas situaciones. Se instaló el entorno de Visual Studio 2017 junto con el emulador para realizar las pruebas. Además se creó una cuenta en Azure para obtener un cloud vinculado a una cuenta local y las cuentas asociadas a los recursos para el bot. Una vez iniciados ambos, comencé con la creación de un chatbot sencillo Hello Word, utilizando unas plantillas básicas que proporcionaba el entorno. Consiguiendo su funcionamiento local a través del emulador. Una vez conseguido el funcionamiento local con el entorno, me propuse conectar mi trabajo con la cuenta de Azure, para así poder probar las herramientas que ofrece. Aquí fue donde surgió el problema. 4.2.1.2. Fase 2.1.2: Estudio y solución del problema Una vez creadas las cuentas e instalados los entornos, se implementó un bot que funcionó correctamente de forma local (ver Figura 4.2). Después quería ejecutarlo dentro de Azure bot service ya que ofrece distintos servicios como: Build: Proporciona opciones para realizar cambios en el bot. Test in Web Chat: Permite utilizar el control integrado de Web Chat para ayudar a probar el bot de una forma rápida. Analytics: Si el análisis está activado para el bot, se pueden ver los datos analíticos que Application Insights ha recopilado para él. Channels: Configuración de los canales que puede usar un bot para comunicarse con los usuarios. Settings: Sección de configuraciones del perfil de bot como, por ejemplo, el nombre de visualización, el análisis y el punto final de mensajería. Speech priming: Gestión de las conexiones entre la aplicación LUIS y el servicio Bing Speech. Bot Service pricing: Gestión del nivel de fijación de precios para el servicio del bot. La publicación del proyecto desde Visual Studio al portal de Azure pareció realizarse con éxito, porque no se generó ningún mensaje de error. El problema vino asociado en el propio portal, que no se actualizaba con la 44 Capítulo 4. Fases del proyecto Figura 4.2: Herramientas de gestión del bot. información del proyecto publicado. Me dediqué a recopilar documentación fiable de las herramientas y consultar foros de MS Azure. Concretamente el error se producía en la pantalla de Web App Bot, al probar la ventana Test in Web Chat, pues permanecía de forma indefina el mensaje Waiting for bot to be ready. Aunque en un foro se comentaba que a veces solía pasar esto y bastaba con recargar la página, nunca conseguí acceder a él. También a la hora de probar la conexión a un canal, por ejemplo, con Web Chat, se encontró en un estado de error apareciendo el siguiente mensaje: There was an error sending this message to your bot: HTTP status code InternalServerError. Intentar solucionar estos problemas supuso bastante dedicación de tiempo. Finalmente, al no tener éxito en los intentos de resolución del problema y en la búsqueda de otras alternativas con Azure, opté por volver a revisar otras tecnologías que pudieran adaptarse al desarrollo del proyecto. Otra de las opciones que parecía interesante era IBM Watson. La Universidad Complutense de Madrid ofrecía una licencia para su uso como estudiante. IBM Watson permite a los usuarios construir flujos de conversación de lenguaje natural usando un entorno de usuario gráfico con técnicas de machine learning. Además, para poder automatizar las interacciones con los usuarios finales, facilita la implementación proporcionando a los desarrolladores una interfaz de lenguaje natural para aplicaciones. También combina el aprendizaje automático con comprensión del lenguaje natural y herramientas de diálogo integradas. Por tanto, estas características determinaron que escogiera IBM Watson para construir el prototipo. 4.2. Fase 2: Diseño y desarrollo del bot 45 4.2.2. Fase 2.2: Tecnología - IBM Watson Como mencionamos anteriormente, Watson es un sistema desarrollado por IBM que, haciendo uso de su inteligencia, es capaz de responder a preguntas e interactuar mediante el lenguaje natural. También ofrece ayudas para el desarrollo del chatbot y una serie de herramientas como analíticas, recomendaciones o protección de datos. En esta fase se explica el proceso que se siguió después de la decisión de utilizar el servicio Watson Conversation. En primer lugar, se tratará la configuración del entorno, la configuración de los diálogos y la forma en que se entrena el sistema. Después se definirán tanto el dominio como los diálogos. Por último se desarrollará una aplicación que, usando la API de Watson, nos permitirá interactuar con el chatbot creado. 4.2.2.1. Fase 2.2.1: Preparación e información del entorno Antes de empezar a desarrollar el chatbot se recopiló más información sobre Watson. El siguiente paso fue registrarse en Bluemix para poder realizar los desarrollos. Tras el registro en IBM Cloud, se accede a Crear Servicio y se selecciona el servicio Conversation en la categoría de Watson. Una vez seleccionado el servicio, es importante acceder al apartado Credenciales del servicio para obtener los nombres de usuario y contraseña. Con ello se obtendrá el acceso a través de la API. Después de crearse el servicio, se lanza la herramienta mediante el botón Launch tool. Entonces se abrirá una nueva página que permitirá crear nuestro propio workspace. Es especialmente relevante anotar el ID del workspace para poder acceder a él desde la API. Este es un contenedor para los artefactos que definen el flujo de la conversación. Antes de pasar a los prototipos que he desarrollado, es importante identificar y distinguir los elementos que utiliza Watson para el desarrollo del bot: intenciones, entidades y diálogos. Una intención representa el propósito de la entrada del usuario, es decir, las intenciones pueden considerarse como las acciones que los usuarios podrían querer hacer en el asistente. Para un primer contacto, se definen sólo dos intenciones: #Hola: para cuando el usuario quiere saludar al chatbot #Adiós: para cuando el usuario quiera despedirse Una vez identificados los intents, es necesario entrenarlos con las posibles entradas que Watson podría recibir y debería asociar a esa intención. Los ejemplos que se añaden a cada uno, le dicen al servicio que tipo de entrada 46 Capítulo 4. Fases del proyecto Figura 4.3: Intención #Hola. de usuario quiere que coincida con la intención. Cuantos más ejemplos se le proporcionen, más preciso será el servicio para reconocer las intenciones del usuario. Las Figuras 4.3 y 4.4 muestran cómo quedarán estas intenciones en nuestro sistema. Figura 4.4: Intención #Adiós. Para introducir una mayor complejidad en las conversaciones, se introduce el concepto de entidad. La definición de una entidad incluye un conjunto de valores de entidad que pueden usarse como disparadores para diferentes respuestas. El valor de cada una puede tener múltiples sinónimos, definiendo distintas formas para especificar un mismo valor. Es la forma en que Watson trata de forma significativa las partes de la entrada, para adaptar la respuesta en función del texto especifico que ha introducido el usuario. 4.2. Fase 2: Diseño y desarrollo del bot 47 Existen además entidades propias del sistema, system entities (ver Figura 4.5). Son entidades comunes que se pueden utilizar para cualquier aplicación. Al habilitarlas, es posible obtener rápidamente en el workspace datos que son comunes para muchos casos. La Figura 4.6 presenta un ejemplo de como aparecen en el espacio de trabajo. Figura 4.5: Creación de entidades. Figura 4.6: Entidades del sistema en el espacio de trabajo. Figura 4.7: Diálogos Bienvenido yEn otras cosas. 48 Capítulo 4. Fases del proyecto Por defecto solo detecta una coincidencia exacta, es decir, cuando la entrada se especifica de una manera en la que coincide exactamente con la definida. Afortunadamente existe también una opción configurable con fuzzy matching, que permite al servicio reconocer referencias “similares” a entidades de la entrada del usuario. Por último, un dialogo utiliza las intenciones para identificar el propósito de la entrada —independientemente de la redacción utilizada— y responde de la manera especificada. Define el flujo de la conversación en forma de árbol lógico, donde cada nodo del árbol tiene una condición que lo desencadena basado en la entrada que se le proporcione. Para un ejemplo simple aparecen por defecto, en el momento de la creación, dos nodos en la ventana de diálogo (ver Figura 4.7): Bienvenido: Contiene un saludo que se muestra a los usuarios cuando interactúan por primera vez con el bot. En otras cosas: Contiene frases para responder cuando no reconoce la entrada de los usuarios. El nodo de diálogo creado se desencadena con la condición de bienvenida. Es un nodo especial e indica que el usuario acaba de comenzar una nueva conversación. Éste especifica al sistema, que cuando una conversación comience, debe responder con uno de los mensajes de bienvenida. Además, permite probar el diálogo para verificar el código y entrenarlo en cualquier momento. Después de esta introducción sobre el sistema, en la siguiente sección se procede a la creación del prototipo. 4.2.2.2. Fase 2.2.2: Diseño y desarrollo del bot En esta fase se muestra el proceso seguido para el desarrollo de los dos prototipos. Se identificará la funcionalidad de cada uno, así como el corpus de ejemplos, y el desarrollo de la lógica en IBM Watson. Los objetivos que se muestran a continuación son los pasos a seguir para el desarrollo de la aplicación final: Crear un diálogo complejo, agregando entidades y aclarando el propósito del usuario. Implementar el área de trabajo, conectándola a una interfaz de usuario front-end, redes sociales o a un canal de mensajería. 4.2. Fase 2: Diseño y desarrollo del bot 49 Fase 2.2.2a Prototipo Inicial: Bot Turístico de Madrid Se definen las capacidades de nuestro sistema centrándonos en el asistente turístico sobre Madrid y conociendo los conceptos con los que trabaja Watson. Descripción de la funcionalidad En la realización de un buen diseño se deben en cuenta varios aspectos, aunque alguno se aplique para el desarrollo: 1. Definición del alcance: ¿Cuál es la funcionalidad de mi bot? ¿Cuáles son las acciones que el bot será capaz de ejecutar? Esas preguntas servirán también para definir las entidades que necesitan usarse. Por ejemplo, si el cliente pide información del Museo del Prado, ¿le enseño la dirección? ¿le cuento los descuentos? ¿le muestro el horario? ¿le pregunto al usuario que qué le interesa en concreto? . . . 2. Identificación de las intenciones genéricas: saludos, agradecimientos, ayuda, etc. 3. Identificación de las intenciones específicas. 4. Diseño de un esquema del diálogo. Por una parte, se pretende diseñar un asistente virtual sobre el turismo en Madrid. Para obtener un chatbot de cultura y ocio es necesario definir bien el ámbito de las funcionalidades: Museos Parques y jardines Monumentos Diversión: cine, teatro, parque de atracciones, zoo Por otra parte, es hora de definir las acciones que queremos que cubra en estos dominios. La mayoría de estas entidades tienen acciones comunes, como: Localización Horario Precio: online y en taquilla Descuentos 50 Capítulo 4. Fases del proyecto Aunque existen otras entidades específicas para cada una, como se muestra a continuación: Museos: selección de los cinco mejores museos de arte de Madrid Parques y jardines: selección de los cinco mejores parques y jardines de Madrid Monumentos: monumentos interesantes de Madrid Diversión: •Cine: día del espectador •Teatro: selección de los cinco mejores teatros de Madrid •Parque de atracciones: selección de los parques de atracciones de Madrid •Zoo: selección de los zoos de Madrid A la hora de definir las acciones que deseamos que nuestro bot sea capaz de ejecutar, se podían observar limitaciones al obtener la información. Podemos distinguir como información estática aquella que no necesita su consulta en tiempo real, mientras que la información dinámica sería la que necesita ser comprobada al momento. Por ejemplo, respecto del horario de los pases del cine, normalmente el cine siempre retransmite películas en un cierto horario. Pero si queremos conocer el horario para una película en especial, será necesario consultar la cartelera del día concreto para el cine concreto. Con el teatro pasaría algo parecido, si el usuario busca una obra concreta, será necesario realizar una búsqueda que tendría que acceder a la información actualizada que se utilice. Por lo que se decidió que el primer prototipo fuera un sistema de preguntas y respuestas, sin que se realizaran búsquedas en ningún sistema externo. Este será un sistema basado en reglas, en el cual las intenciones y entidades sirven para entender las preguntas y dar respuestas. Una intención está definida por un cluster de aceptación, que son expresiones que sirven para preguntar una cuestión. Cuando se pregunta de otra forma se establecen niveles de afinidad con cada uno y, finalmente, se asocia con el que tiene mayor nivel de afinidad. Desarrollo Lógica IBM Basándonos en el análisis de la funcionalidad y de las acciones del apartado anterior, se declararán las entidades e intenciones para poder crear un diálogo y, por último, se definirá el diálogo. 4.2. Fase 2: Diseño y desarrollo del bot 51 Las entidades hacen referencia a los datos que necesitaremos para definir las acciones que queremos que se realicen y ayudar a que el bot sepa exactamente qué hacer. Por ejemplo, se necesita tener respuestas a: ¿dónde está? ¿estará abierto? ¿cuánto cuesta? ¿hay descuentos? .. . Como en este caso la información es estática, hemos seleccionado ejemplos concretos para cada entidad. En la Figura 4.8 se muestran las entidades que se han definido. Figura 4.8: Entidades definidas. A continuación, la Figura 4.9 muestra el caso de la entidad Museo, aunque se ha utilizado el mismo esquema para cada una. Figura 4.9: Definición de la entidad Museo. Las intenciones hacen referencia a las acciones que puede querer hacer el usuario del bot, por ejemplo, ¿quiero ir al Museo del Prado?. Podemos distinguir entre intenciones genéricas o específicas (ver Figura 4.10). 58 Capítulo 4. Fases del proyecto La Figura 4.20 muestra el saludo del bot cuando se inicia el diálogo y la despedida (aleatoria) cuando se cierra el diálogo. Figura 4.20: Saludo y despedida del bot. El siguiente proceso es el entrenamiento del chatbot para crear una mayor afinidad entre las respuestas del usuario y los clusters de los que están compuestos cada corriente de la conversación. Problemas en fase de pruebas Una vez definido todo lo necesario, lo siguiente fue realizar las pruebas para comprobar su funcionamiento. Resultó ser ineficiente, pues no daba la sensación de tener una conversación con un humano. Además, la información que responde está explicita en su base de conocimiento y no podría contestar a preguntas con otra información aunque fuera ligeramente distinta. A pesar de mantener la conversación, como el dominio escogido era tan amplio no aparentaba tener inteligencia. Por ello, se decidió readaptar el proyecto para poder ofrecer al usuario una buena experiencia. En el siguiente apartado se detalla en que consistió la modificación y la manera en que se utiliza el prototipo final. Fase 2.2.2b Prototipo final: Bot Turístico de Madrid En esta sección se tratará sobre el desarrollo realizado con IBM Watson, la gestión de la información y la lógica utilizada. Como hemos mencionado en el capítulo anterior, el prototipo final es un recomendador de museos de la comunidad y ciudad Madrid. Para poder configurar y entrenar el chatbot, accederemos a través de la API de Watson a nuestro bot. La interacción del bot con nuestro orquestador depende de cómo hayamos configurado inicialmente el GUI en la web. 4.2. Fase 2: Diseño y desarrollo del bot 59 Figura 4.21: Entidad precio del museo. Dicha interfaz, como hemos mencionado en el funcionamiento de la herramienta IBM Watson, permite la definición de entidades. Representan conceptos relacionados con la temática del bot y facilitan su reconocimiento por parte de éste. La plataforma también ofrece la posibilidad de utilizar entidades del sistema como tiempo, números, etc. Para ayudar al sistema en el proceso de detección de las intenciones del usuario y la clusterización que hará con ella, definimos intents. Cada uno de estos intents se corresponde con una posible intención del usuario, por ejemplo, saludar. Definidas las intenciones y entidades, se definen los nodos de diálogo. Sirven para el tratamiento que el servicio realiza con las entidades e intenciones reconocidas y determinan la respuesta. Una vez configurado el diálogo, se procede al entrenamiento del bot para guiarlo y así facilitar la clusterización que mencionamos previamente. Ahora pasaremos a detallar las características particulares del recomendador de museos IBM. Para realizar la recomendación, el servicio recogerá las preferencias del usuario en cuanto al precio, localización y tipo de arte que ofrecen los museos. En cuanto a las entidades definidas, utilizamos una para cada uno de los tres parámetros que el bot utiliza para hacer la recomendación (ver Figuras 4.21, 4.22 y 4.23). Las intenciones del usuario que pretendemos reconocer son manifestaciones sobre sus preferencias para los parámetros que hemos seleccionado (ver Figuras 4.24 y 4.25). 60 Capítulo 4. Fases del proyecto Figura 4.22: Entidad lugar del museo. Figura 4.23: Entidad tipo del museo. La estructura del diálogo es plana y los nodos de salida están definidos en las posiciones superiores para que sean los primeros con los que se haga el matching. 4.2. Fase 2: Diseño y desarrollo del bot 61 Figura 4.24: Intención ayuda en Watson. Figura 4.25: Intenciones de Watson. 62 Capítulo 4. Fases del proyecto No necesitamos que sean hijos de otros nodos porque el contexto reconocido por el bot es enviado desde el cliente. Para ello, en el resto de nodos, desde el bot damos valores a determinadas variables que enviamos al orquestador en función de las entidades e intenciones reconocidas (ver Figura 4.26). Para que la recomendación funcione con efectividad, hemos configurado una base de datos en la que se introducen los museos. Esta ha sido utilizada como fuente de conocimiento. Figura 4.26: Diálogo del recomendador en Watson. 4.3. Fase 3: Instalación y ejecución 63 4.3. Fase 3: Instalación y ejecución Para la instalación de la aplicación se recomienda utilizar el sistema operativo Debian. El siguiente paso será actualizar y descargar los programas necesarios para su ejecución. Primero, ponemos al día el sistema descargando las últimas actualizaciones con el siguiente comando: Listado 4.1: Actualizaciones apt−get update && apt−get upgrade −y Después instalamos las siguientes dependencias: Listado 4.2: Dependencias # Descarga MongoDB apt−get install mongodb # Descarga Python3 apt−get install python3 # Descarga pip3 apt−get install python3−pip # Descarga Watson pip install −−upgrade Watson−developer−cloud # Descarga PyMongo pip install −−upgrade pymongo Una vez que están funcionando estos programas y librerías, el siguiente paso será montar la base de datos. Para iniciar y detener los servicios de mongoDB se deberá escribir: Listado 4.3: Iniciar/Detener MongoDB # Iniciar MongoDB systemctl start mongodb # Detener MongoDB systemctl stop mongodb 64 Capítulo 4. Fases del proyecto Después de completar la instalación, es hora de crear la colección en Mongo: Listado 4.4: Creación # Lanzar la consola de mongoDB mongo # Crear una base de datos use myNewDb # Insertar los elementos del documento: Anexo Datos Museos Final db.myNewCollection.insertMany( {} ) # Comprobar que se han cargado correctamente db.myNewCollection.find( {} ) Con este último comando se obtiene un resultado similar a este código: Listado 4.5: Actualizaciones db.myCollect.find({},{_id:0}).pretty() { "nombre" :"Reina Sofía", "lugar" :"Centro", "precio" :"Medio", "tipo" :"Bellas artes" } { "nombre" :"CA2M", "lugar" :"Centro", "precio" :"Barato", "tipo" :"Arte contemporáneo" } { "nombre" :"Museo Nacional de ciencia y tecnología", "lugar" :"Sur", "precio" :"Caro", "tipo" :"Científico Tecnológico" } Para finalizar se debe ejecutar el código de la aplicación en otra terminal y así crear las conexiones del bot con Telegram. Capítulo 5 Conclusión En este capítulo se presentan las conclusiones de este proyecto y se analizan las posibles mejoras en un trabajo futuro. 5.1. Conclusiones En este proyecto se ha realizado una investigación inicial de las distintas técnicas que existen para el desarrollo de un chatbot. Además se ha creado un asistente que recomienda museos de la comunidad y ciudad de Madrid en base a unas características que se reciben por parte del usuario. La arquitectura final permite ser exportada e instalada en otros sistemas, debido al diseño elegido. Se pueden tratar las intenciones de los clientes gracias a la capacidad y facilidad de IBM Watson para reconocer el lenguaje natural. En el diseño, también se ha tratado de proporcionar al usuario una buena experiencia a través de una interfaz agradable y de fácil uso, que se consigue con Telegram. Ha sido interesante enfrentarme desde cero a un proyecto completo: desarrollo, pruebas y documentación. Tanto las tecnologías que he utilizado como los lenguajes que se requerían fueron novedosos para mí. Superados esos obstáculos iniciales aparecieron muchos otros, como los problemas de licencias, compatibilidad de versiones, etc., pero finalmente se ha conseguido el reto de desarrollar este chatbot y completar la presente memoria. La principal aportación de este trabajo es servir de referencia respecto a las diferentes tecnologías actuales para el desarrollo de chatbots y respecto al diseño de la arquitectura a emplear en otros proyectos análogos. Con este Trabajo de Fin de Grado, se reflejan las capacidades y conocimientos adquiridos en las distintas asignaturas a lo largo de toda la carrera. 65 66 Capítulo 5. Conclusión 5.2. Trabajos futuros En lo referente a las funcionalidades, algunas de las posibles mejoras para este proyecto y que sería interesante introducir son: Text-to-speech: Añadir voz al chatbot, es decir, que pueda reproducirse en audio la respuesta que facilita el bot. Speech-to-text: Dar la posibilidad al usuario de comunicarse por voz. Introducir el reconocimiento de voz supondría una gran mejora para una mejor interacción con el usuario. Para aportar una mejor experiencia al usuario y crear una relación de confianza, sería interesante aportar personalizaciones y saber si el cliente es nuevo o ya conoce nuestro servicio. En este último caso, debería recomendarle museos distintos de los que ya hubiera visitado. Respecto de los contenidos del chatbot, se podría ampliar el campo de los temas dentro de la conversación. Un trabajo futuro podría ser también integrar este chatbot en otras plataformas y canales distintos del empleado. En resumen, las mejoras comentadas anteriormente serían interesantes para implementarse en un nuevo prototipo en un futuro. Chapter 5 Conclusions and Future Work This chapter presents the conclusions of this project and analyzes possible improvements in future work. 5.1. Conclusions In this project an initial investigation of the different techniques that exist for the development of a chatbot has been carried out. In addition, we created an assistant that recommends museums in the community and city of Madrid based on characteristics that are received by the user. The final architecture could be exported and installed in other systems, due to the chosen design. The intentions of the clients can be treated thanks to the ability and facility of IBM Watson to recognize natural language. In the design, we have also tried to provide the user with a good experience through a user-friendly interface, which is achieved with Telegram. It has been interesting to face a complete project from scratch: development, testing and documentation. Both the technologies that I used and the languages that were required were novel for me. Once these initial obstacles were overcome, many others appeared, such as license problems, version compatibility, etc., but finally the challenge of developing this chatbot and completing this memory has been achieved. The main contribution of this work is to serve as a reference regarding the different current technologies for the development of chatbots and regarding the design of the architecture to be used in other analogous projects. This Final Degree Project reflects the skills and knowledge acquired in the different subjects studied throughout the entire degree. 67 74 Apéndice A. Código en Python "text":’Message edited! :)’, }) else: api_request(’answerCallbackQuery’, { "callback_query_id": event[’id’], "text":’Patience you must have my young padawan’, #"show_alert" => True , }) def consultaBD(event ,targetL ,targetP ,targetT): # Creamos una bd: prueba client = MongoClient() db = client.myDatabase #Creamos una coleccion: myCollect myCollect = db.myCollect # find()query if targetL != ’’: cursor = myCollect.find( {"lugar":targetL } ) for mus in cursor: send_message(event[’from’][’id’], ’Mi recomendacion es que vayas a : ’+ mus["nombre"]+’ Espero que te guste !’, False , event[’message_id’]) # find()query if targetP != ’’: cursor = myCollect.find( {"precio": targetP} ) for mus in cursor: send_message(event[’from’][’id’], ’Mi recomendacion es que vayas a : ’+ mus["nombre"]+’ Espero que te guste !’, False , event[’message_id’]) # find()query if targetT != ’’: cursor = myCollect.find( {"tipo":targetT} ) for mus in cursor: send_message(event[’from’][’id’], ’Mi A.2. botWatson.py 75 recomendacion es que vayas a : ’+ mus["nombre"]+’ Espero que te guste !’, False , event[’message_id’]) # Close conexion client.close() def compruebaAtributos(event ,targetL ,targetP , targetT): if targetL != ’’: return True if targetP != ’’: return True if targetT != ’’: return True return False def get_bot_username(): return api_request(’getMe’)["username"] def run(): last_message_update_id = 0 while not quit: response = api_request(’getUpdates’, { "offset": last_message_update_id + 1, "limit": 100, "timeout": LONG_POLLING_TIMEOUT }) for update in response: if update["update_id"] > last_message_update_id: last_message_update_id = update[" update_id"] run_event(update) def send_message(chat_id , text , disable_web_page_preview=False, reply_to_message_id=None , reply_markup=None): if reply_markup != None: reply_markup = json.dumps(reply_markup) response = api_request(’sendMessage’, { "chat_id": chat_id , "text": text , "disable_web_page_preview": 76 Apéndice A. Código en Python disable_web_page_preview, "reply_to_message_id": reply_to_message_id, "reply_markup": reply_markup, "parse_mode":’HTML’, }) run_event(response) def api_request(method , parameters={}, files=None ): url = "https://api.telegram.org/bot{token}/{ method}".format(token=BOT_TOKEN , method= method) http_method = ’get’ try: response = requests.request(http_method , url , timeout=REQUEST_TIMEOUT , params= parameters , files=files) except requests.RequestException as e: raise Exception(str(e)) try: result = response.json() except ValueError: # typo on the url, no json to decode raise Exception(’Error: Invalid URL’, response.status_code) if not (response.status_code is requests. codes.ok): raise Exception(result[’description’], response.status_code) # Server reported error if not result["ok"]: raise Exception("Telegram API sent a non OK response")# Telegram API reported error return result["result"] def run_event(event): A.2. botWatson.py 77 if "message" in event: run_message_event(event["message"]) elif "callback_query" in event: on_receive_callbackQuery(event[" callback_query"]) def run_message_event(event): if "text" in event: on_receive_message(event) if "new_chat_participant" in event: #on_new_chat_participant(event) print("new_chat_participant") if "left_chat_participant" in event: #on_left_chat_participant(event) print("left_chat_participant") if "audio" in event: #on_receive_audio(event) print("audio") if "document" in event: #on_receive_document(event) print("document") if "photo" in event: #on_receive_photo(event) print("photo") if "sticker" in event: #on_receive_sticker(event) print("sticker") if "video" in event: #on_receive_video(event) print("video") if "contact" in event: #on_receive_contact(event) print("contact") if "location" in event: #on_receive_location(event) print("location") if "new_chat_title" in event: #on_new_chat_title(event) print("new_chat_title") if "new_chat_photo" in event: #on_new_chat_photo(event) print("new_chat_photo") if "delete_chat_photo" in event: #on_delete_chat_photo(event) 78 Apéndice A. Código en Python print("delete_chat_photo") if "group_chat_created" in event: #on_group_chat_created(event) print("group_chat_created") run() Bibliografía Venceréis, pero no convenceréis. Venceréis porque tenéis sobrada fuerza bruta; pero no convenceréis, porque convencer significa persuadir. Y para persuadir necesitáis algo que os falta: razón y derecho en la lucha. Miguel de Unamuno y Jugo Akiwatkar, R. What are the best API’s and frameworks to build your own chatbot?. Quora. http://www.quora.com/ What-are-the-best-APIs-and-frameworks-to-build-your-own-chatbot/ answer/Rohit-Akiwatkar, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Amazon. Introducción a Amazon Lex. http://aws.amazon.com/es/lex, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Amazon Alexa Web Portal. Amazon Alexa. http://developer. amazon.com/alexa, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Ananthavel. Best chatbot platforms to build a chatbot. Medium. http: //chatbotslife.com/13b846a59ddd, 2018. [Online; fecha de acceso: 14Mayo-2018]. Aristimuño, L. Los mejores bots de juegos para Telegram, Profesional Review. http://www.profesionalreview.com/2017/05/11/ los-mejores-bots-juegos-telegram, 2017. [Online; fecha de acceso: 14Mayo-2018]. Banker, K. MongoDB in action. Manning Publications Co., 2011. Briz, V. Las 3 mejores plataformas para tu chatbot. Medium. http:// code.likeagirl.io/4b14e83428b9, 2017. [Online; fecha de acceso: 14Mayo-2018]. Business Insider. Google’s artificial-intelligence bot says the purpose of living is “to live forever”. http://www.businessinsider.com/ 79 80 BIBLIOGRAFÍA google-tests-new-artificial-intelligence-chatbot-2015-6, 2015. [Online; fecha de acceso: 14-Mayo-2018]. Business Insider. Amazon joins the chatbot conversation. http://www.businessinsider.com/ amazon-joins-the-chatbot-conversation-2016-12, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Cannon, B. Python developer’s guide documentation. Read the Docs, 2018. Carbonell, J. El procesamiento del lenguaje natural, tecnología en transición. En Actas del Congreso de la Lengua Española: Sevilla, 7 al 10 octubre, 1992, páginas 247–250. Instituto Cervantes, 1994. CCM. Correo no deseado (spam). http://es.ccm.net/contents/ 39-correo-no-deseado-spam, 2013. [Online; fecha de acceso: 14-Mayo2018]. Cerdas Mendez, D. Historia de la Inteligencia Artificial relacionada con los chatbots. Medium. http://planetachatbot.com/41a6cda22906, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Chakraborty, P. An introduction to chatbots. Medium. http:// whatarechatbots.com/34a6a123796a, 2017. [Online; fecha de acceso: 14Mayo-2018]. Chodorow, K. MongoDB: The Definitive Guide: Powerful and Scalable Data Storage. O’Reilly Media, Inc., 2013. Claire by 30Secondstofly. The ultimate travel bot list. http://www. 30secondstofly.com/ai-software/ultimate-travel-bot-list, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Condé Nast Traveler. La revolución de los bots cambiará tu forma de viajar. http://www.traveler.es/viajes-urbanos/articulos/ la-revolucion-de-los-bots-cambiara-tu-forma-de-viajar/8995, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Consejo General de Colegios Oficiales de Farmacéuticos. Qué es Bot PLUS App.http://www.portalfarma.com/inicio/botplus20/ botplus20app, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Davydova, O. 25 chatbot platforms: A comparative table. http:// chatbotsjournal.com/aeefc932eaff, 2017. [Online; fecha de acceso: 14Mayo-2018]. Dialogflow. Integration of Dialogflow with Slack. http://dialogflow. com/docs/integrations/slack, 2018. [Online; fecha de acceso: 14-Mayo2018]. BIBLIOGRAFÍA 81 Dunham, K. yMelnick, J. Malicious bots: An inside look into the cybercriminal underground of the Internet. CrC Press, 2008. Ebling, M. R. Can cognitive assistants disappear? IEEE Pervasive Computing, vol. 15(3), páginas 4–6, 2016. Forlizzi, J. yDiSalvo, C. Service robots in the domestic environment: a study of the Roomba vacuum in the home. En Proceedings of the 1st ACM SIGCHI/SIGART Conference on Human-robot interaction, páginas 258–265. ACM, 2006. Fujita, M. AIBO: Toward the era of digital creatures. The International Journal of Robotics Research, vol. 20(10), páginas 781–794, 2001. Futurizable. Estado del arte en el desarrollo de chatbots a nivel mundial. http://futurizable.com/chatbot, 2017. [Online; fecha de acceso: 14Mayo-2018]. García Moreno, C. ¿Qué es el Deep Learning y para qué sirve? http:// www.indracompany.com/es/blogneo/deep-learning-sirve, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Guttag, J. V. Introduction to computation and programming using Python. Mit Press, 2013. High, R. The era of cognitive systems: An inside look at IBM Watson and how it works. IBM Corporation, Redbooks, 2012. IBM. Watson. http://www.ibm.com/watson/how-to-build-a-chatbot, 2018a. [Online; fecha de acceso: 14-Mayo-2018]. IBM. Watson assistant. http://www.ibm.com/watson/services/ conversation, 2018b. [Online; fecha de acceso: 14-Mayo-2018]. Inbenta. Historia del motor de búsqueda: de las fichas a la IA del chatbot. http://www.inbenta.com/mx/blog/ historia-del-motor-de-busqueda-de-las-fichas-la-ia-del-chatbot, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Kaspersky Lab. ¿Qué es un botnet? http://www.kaspersky.es/blog/ que-es-un-botnet, 2013. [Online; fecha de acceso: 14-Mayo-2018]. Knuth, D. E. The T EX book. Addison-Wesley Professional., 1986. Kuhlman, D. A Python book: Beginning Python, advanced Python, and Python exercises. Dave Kuhlman, 2009. Lamport, L. L A T EX: A Document Preparation System, 2nd Edition. Addison-Wesley Professional, 1994. 82 BIBLIOGRAFÍA Malizia, N. Understanding Telegram inline bots. http://unnikked.ga/ 73ac9aeea643, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Marupaka, P. Chatbots (of) the future!. The Startup. http://medium. com/swlh/86b5bf762bb4, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Mas Digital. 10 errores graves que se comenten con los chatbots. Medium. https://www.masdigital.net/nuestro-blog/ 10-errores-graves-que-se-comenten-con-los-chatbots, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Mauldin, M. L. ChatterBots, TinyMUDs, and the Turing test: Entering the Loebner prize competition. En AAAI , vol. 94, páginas 16–21. 1994. McCarthy, J. Programs with common sense. RLE and MIT Computation Center, 1960. Membrey, P.,Plugge, E. yHawkins, D. The definitive guide to MongoDB: the noSQL database for cloud and desktop computing. Apress, 2011. Microsoft. Bot Service documentation. http://docs.microsoft.com/ en-us/azure/bot-service, 2018. [Online; fecha de acceso: 14-Mayo2018]. Microsoft Cortana. Cortana: Tu asistente virtual y personal inteligente, Microsoft. http://www.microsoft.com/es-es/windows/cortana, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Moreno, A. Aplicaciones del procesamiento del lenguaje natural. Instituto de Ingeniería del Conocimiento. http://www.iic.uam.es/inteligencia/ aplicaciones-procesamiento-lenguaje-natural, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Ng, A.,Ngiam, J.,Foo, C. Y.,Mai, Y. ySuen, C. UFLDL Tutorial. Stanford University. http://ufldl.stanford.edu/wiki/index. php/UFLDL_Tutorial, 2013. [Online; fecha de acceso: 14-Mayo-2018]. Nilsson, N. J. Principles of Artificial Intelligence. Morgan Kaufmann, 2014. Norvig, P. Paradigms of Artificial Intelligence programming. Morgan Kaufmann, 1992. Python Software Foundation. Python 3.6 release. 2017. Rodríguez, T. Machine Learning y Deep learning: cómo entender las claves del presente y futuro de la inteligencia artificial. Xataka. http://www.xataka.com/robotica-e-ia/ BIBLIOGRAFÍA 83 machine-learning-y-deep-learning-como-entender-las-claves-del-presente-y-futuro-de-la-inteligencia-artificial, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Russell, S. J. yNorvig, P. Artificial Intelligence: A modern approach. Pearson, 2016. Salandra, G. China, Wechat, and the origins of chatbots, Chatbots Magazine. http://chatbotsmagazine.com/89c481f15a44, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Saygin, A. P.,Cicekli, I. yAkman, V. Turing test: 50 years later. Minds and machines, vol. 10(4), páginas 463–518, 2000. Schlicht, M. The complete beginner’s guide to chatbots. Medium. http: //chatbotsmagazine.com/8280b7b906ca, 2016. [Online; fecha de acceso: 14-Mayo-2018]. Sierra, M. Los chatbots tienen un problema: la mala ortografía de los milenials. Vozpopuli. https://www.vozpopuli.com/altavoz/tecnologia/ chatbot-problema-ortografia-jovenes-inteligencia-artificial-milenials_ 0_1044796061.html, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Singh, T. What is the best way to learn and write an AI chatbot?. Quora. http://www.quora.com/ What-is-the-best-way-to-learn-and-write-an-AI-Chatbot-What-are-the-latest-research-papers-that-I-should-read, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Siri, Apple. Official website. http://www.apple.com/ios/siri, 2014. [Online; fecha de acceso: 14-Mayo-2018]. TayTweets. The official account of Tay. http://twitter.com/tayandyou, 2017. [Online; fecha de acceso: 14-Mayo-2018]. Telegram. Telegram web portal. http://telegram.org, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Telegram group. Python Telegram Bot. Github. http://github.com/ python-telegram-bot/python-telegram-bot, 2013. [Online; fecha de acceso: 14-Mayo-2018]. Turing, A. M. Computing machinery and intelligence. Mind, vol. 59(236), páginas 433–460, 1950. Twitter. El Bot Informativo. http://twitter.com/bot_informativo, 2018. [Online; fecha de acceso: 14-Mayo-2018]. Van Rossum, G. yDrake, F. L. The Python language reference manual. Network Theory Ltd., 2011.