scieee AI-readable full text Open interactive document viewer

Chatbot para la Sede Electrónica de la Dirección General de Policía

Herranz Gómez, Rebeca

Abstract

Actualmente hay una gran diversidad de asistentes conversacionales en diferentes instituciones, como por ejemplo Siri o Alexa. Por ello se vio necesario desarrollar un chatbot que ayudará a los usuarios a resolver sus dudas sobre los trámites que se encuentran dentro de la Sede Electrónica de la Policía Nacional. Con este contexto, se decide enfocar el Trabajo Final de Grado en desarrollar un asistente conversacional que pueda responder preguntas sencillas relacionadas con los procesos de extranjería, renovación y solicitud del dni o pasaporte. A la hora de programar el asistente, se ha realizado un estudio previo de herramientas dedicadas al diseño de chatbots con el fin de encontrar la aplicación idónea. Finalmente, el framework que se utiliza es Rasa Stack, generado por algoritmos de Machine Learning capaces de responder a mensajes formulados a través del lenguaje natural. Por otro lado, se ha publicado el asistente en dos canales de texto: Telegram y el servidor web ofrecido por la herramienta BotFront. En resultado de este proyecto es un asistente conversacional desarrollado con Rasa Framework, capaz de responder a cuestiones sobre documentación o guiar al usuario en los trámites que brinda la Policía Nacional. Además, este Trabajo Fin de Grado explica como un manual todas las funcionalidades que tiene Rasa Stack con el fin de programar un chatbot.

Full text

Chatbot para la Sede Electr´onica de la Direcci´on General de Polic´ıa Chatbot for Electronic Headquarters of the Spanish National Police TRABAJO FIN DE GRADO GRADO EN INGENIER´ IA INFORM ´ ATICA CURSO 2021–2022 Rebeca Herranz G´omez Directores Luis Javier Garc´ıa Villalba Ana Lucila Sandoval Orozco Departamento de Ingenier´ıa del Software e Inteligencia Artificial Facultad de Inform´atica Universidad Complutense de Madrid Madrid, Junio de 2022 Agradecimientos A mis directores del TFG, que han confiado en m´ı desde el principio para realizar este proyecto. Tambi´en a Luis, Sandra y Daniel por ofrecerme un apoyo continuo durante todas las semanas, ayud´andome con las dudas que ten´ıa sobre el c´odigo y documentaci´on. A todo el grupo de polic´ıas que me han explicado los tr´amites dentro de la polic´ıa, siempre me han estado ofreciendo su ayuda y d´andome su feedback. A mi familia y a Mar´ıa que siempre han estado ahi, apoy´andome y haciendo un poco m´as f´acil mi vida estudiantil. A´ Alvaro Castillo, qui´en ha dado un soporte incre´ıble sobre la herramienta de Rasa Stack. A la Facultad de Inform´atica de la Universidad Complutense de Madrid por habernos ofrecido herramientas online en momentos de COVID-19 con los que he podido avanzar en el trabajo sin tener que acudir presencialmente. iii ´ Indice General ´ Indice de Figuras IX ´ Indice de Tablas XI Listings XI Lista de Acr´ onimos XV Abstract XVII Resumen XIX 1. Introducci´ on 1 1.1. Motivaci´on .................................... 1 1.2. Objeto de la Investigaci´on ............................ 2 1.3. Plan de Trabajo ................................. 2 1.4. Estructura del Trabajo .............................. 3 2. Contexto de la Investigaci´ on 5 2.1. Historia de los Asistentes Conversacionales .................. 5 2.2. Momento Actual ................................. 6 2.3. Inteligencia Artificial y Procesamiento del Lenguaje Natural ......... 7 2.3.1. Inteligencia Artificial ........................... 7 2.3.2. Procesamiento del Lenguaje Natural .................. 8 2.4. Funcionamiento de un Chatbot ......................... 11 2.5. Frameworks y Librer´ıas Utilizadas ....................... 13 v vi ´ INDICE GENERAL 2.5.1. Herramientas Utilizadas ......................... 13 2.6. Sede Electr´onica ................................. 14 2.6.1. Apartado Extranjer´ıa .......................... 15 2.6.2. Renovaci´on y Solicitud de Pasaporte o DNI .............. 16 3. Estado del Arte 19 3.1. Contexto Digital ................................. 19 3.1.1. Chatbots en el Sector de la Medicina .................. 19 3.1.2. Chatbots en el Sector de la Educaci´on ................. 20 3.1.3. Chatbots en el Sector Bancario y Seguros ............... 21 3.2. Frameworks de Desarrollo de Chatbots ..................... 21 3.3. Asistentes Conversacionales Realizados con Rasa Stack ............ 23 4. Metodolog´ ıa y an´ alisis del proyecto 25 4.1. Arquitectura General del Trabajo ........................ 25 4.2. Elecci´on de Herramienta ............................. 28 4.3. Funcionamiento de Rasa Stack ......................... 29 4.3.1. Componentes de Rasa .......................... 30 4.4. Despliegue de Herramienta ........................... 43 4.5. Conexi´on con Telegram y Servicio Web ..................... 44 4.5.1. Telegram ................................. 45 4.5.2. Servidor Web ............................... 47 5. Experimentos y Resultados 49 5.1. Pruebas con la Herramienta RESTful Stress .................. 49 5.2. Test Unitarios sobre Actions y Porcentajes de Confianza ........... 50 5.3. Comparaci´on de Resultado Obtenidos ..................... 53 6. Conclusiones y Trabajo Futuro 55 6.1. Conclusiones ................................... 55 6.2. Trabajo Futuro .................................. 55 ´ INDICE GENERAL vii 7. Introduction 57 7.1. Motivation .................................... 57 7.2. Purpose of the Investigation ........................... 58 7.3. Work Plan ..................................... 58 7.4. Dissertation Structure .............................. 59 8. Conclusions and Future Work 61 8.1. Conclusions .................................... 61 8.2. Future Work ................................... 61 A. Informaci´ on sobre Rasa Stack 63 A.1. Componentes de Rasa Stack ........................... 63 A.1.1. Entidades, Intents y Slots ........................ 63 A.1.2. Sin´onimos y Tablas de B´usqueda .................... 64 A.1.3. Historias para el Entrenamiento del NLU ............... 64 A.2. Estructura de Rasa Stack ............................ 65 Bibliograf´ ıa 67 ´ Indice de Figuras 2.1. Inteligencia Artifical, Machine Learning y Deep Learning ........... 8 2.2. Relaci´on entre IA y NLP ............................. 8 2.3. Estructura de NLP ................................ 9 2.4. Estructura del Chatbot [RAMI17] ....................... 12 2.5. Esquema de paquetes ............................... 14 2.6. P´agina inicial ................................... 15 2.7. Procedimientos de Extranjer´ıa ......................... 15 2.8. Ejemplo de Tr´amite ............................... 16 2.9. Acceso a los tr´amites ............................... 16 2.10. Petici´on de cita .................................. 17 3.1. Resultado visual del asistente .......................... 24 4.1. Data Flow [LBP+18] ............................... 25 4.2. Comprobaci´on de entrada ............................ 26 4.3. Diagrama de estados-Pregunta Usuario ..................... 27 4.4. Tipo de preguntas y respuestas ......................... 27 4.5. Casos de uso ................................... 28 4.6. Clasificaci´on de un mensaje ........................... 29 4.7. Esquema de pasos - Rasa Stack ......................... 30 4.8. Ejemplo de uso con CountVectorizer ...................... 41 4.9. Ejemplo de uso con LexicalSyntacticFeaturizer ................ 41 4.10. Ejemplo de uso con DIETClassifier ....................... 41 4.11. Ejemplo de ResponseSelector .......................... 42 ix xvi Lista de Acr´ onimos VLE Virtual Learning Environment Abstract Nowadays, there is a great number of conversational assistants in many different institutions, such as Siri or Alexa. That is the reason why it was deemed necessary to develop a chatbot which helped users with their doubts about the procedures that can be carried out in the environment of the National Police (Polic´ıa Nacional) Electronic Headquarters. Within this context, it is decided to focus this End of Degree Dissertation on developing a conversational assistant capable of answering simple questions regarding immigration matters, and renewal or application for an ID card or Passport. Before programming the assistant, a previous analysis and study of the tools available for the development of chatbots in order to find the most adequate application. The framework chosen is Rasa Stack, generated by Machine Learning algorithms capable of answering simple questions formulated through natural language. Additionally, the chatbot has been published in two text channels: Telegram, and the web server provided by the tool BotFront. The result of this project is a conversational assistant developed with Rasa Framework, which is capable of answering documentation-related questions, as well as helping users carry out the procedures that are available on the National Police Electronic Headquarters. Moreover, this End of Degree Dissertation serves as a manual for all the functionalities that Rasa Stack has regarding the programming of a chatbot. Keywords: Chatbot, Conversational Assistant, Electronic Office, Entities, ID, Immigration Matters, Machine Learning, Natural Language Processing, Passport, Polic´ıa Nacional, Rasa. xvii Resumen Actualmente hay una gran diversidad de asistentes conversacionales en diferentes instituciones, como por ejemplo Siri o Alexa. Por ello se vio necesario desarrollar un chatbot que ayudar´a a los usuarios a resolver sus dudas sobre los tr´amites que se encuentran dentro de la Sede Electr´onica de la Polic´ıa Nacional. Con este contexto, se decide enfocar el Trabajo Final de Grado en desarrollar un asistente conversacional que pueda responder preguntas sencillas relacionadas con los procesos de extranjer´ıa, renovaci´on y solicitud del dni o pasaporte. A la hora de programar el asistente, se ha realizado un estudio previo de herramientas dedicadas al dise˜no de chatbots con el fin de encontrar la aplicaci´on id´onea. Finalmente, el framework que se utiliza es Rasa Stack, generado por algoritmos de Machine Learning capaces de responder a mensajes formulados a trav´es del lenguaje natural. Por otro lado, se ha publicado el asistente en dos canales de texto: Telegram y el servidor web ofrecido por la herramienta BotFront. En resultado de este proyecto es un asistente conversacional desarrollado con Rasa Framework, capaz de responder a cuestiones sobre documentaci´on o guiar al usuario en los tr´amites que brinda la Polic´ıa Nacional. Adem´as, este Trabajo Fin de Grado explica como un manual todas las funcionalidades que tiene Rasa Stack con el fin de programar un chatbot. Keywords: Aprendizaje Autom´atico, Asistente conversacional, Chatbot, DNI, Entidades, Extranjer´ıa, Pasaporte, Polic´ıa Nacional, Procesado del Lenguaje Natural, Rasa, Sede Electr´onica. xix Cap´ıtulo 1 Introducci´on 1.1. Motivaci´on Los procesos sobre la Sede Electr´onica del Cuerpo Nacional de Polic´ıa han ido evolucionando y sufrido cambios debido a la pandemia por el Coronavirus (COVID-19). Por ello, los ciudadanos se encuentran con m´as preguntas a la hora de necesitar algunos de los puntos que brinda esta p´agina web. La polic´ıa presenci´o esta elevaci´on de preguntas, y por ello se decidi´o que ser´ıa de utilidad crear un chatbot que ayudara al ciudadano con las dudas que tuviera sobre estos tr´amites. Por tanto la motivaci´on de este proyecto reside en responder dichas dudas que presente el usuario mediante un asistente conversacional inteligente. Un chatbot, o bot conversacional, es un programa inform´atico que interact´ua con personas a trav´es de un chat textual o mediante voz, ofreciendo respuestas y soluciones r´apidas a tareas repetitivas y preguntas comunes susceptibles de ser automatizadas. Llevan existiendo desde los principios de la programaci´on pero gracias a los avances realizados dentro del mundo de la inteligencia artificial durante estos ´ultimos a˜nos, han hecho resurgir el inter´es en ellos debido a las nuevas t´ecnicas de reconocimiento y an´alisis del lenguaje natural. Con este contexto se puede dar uso a dos campos de la inteligencia artificial: Natural Language Understanding (NLU) yNatural Language Proccessing (NLP). Estos dos componentes aportan resultados concretos sobre las cuestiones que realizan los clientes, comprendiendo el habla humana a medida que se reproduce y adem´as capacita a un sistema de comprender el significado e intenci´on que encierra una frase. Actualmente existen varias aplicaciones que hacen uso de estos campos con el fin de dise˜nar un asistente conversacional. El ejemplo que se ve en este trabajo es Rasa, framework sencillo y completo con todas las funcionalidades necesarias. Pero primero, antes de empezar a programar, se necesita extraer todas las dudas posibles encontradas por foros y adem´as de la informaci´on depositada en la misma Sede Electr´onica, para su posterior an´alisis y recopilaci´on en un dataset , con el fin de entrenar al chatbot. 1 2Cap´ ıtulo 1. Introducci´ on 1.2. Objeto de la Investigaci´on El objetivo de este proyecto es el dise˜no e implementaci´on de un chatbot basado en las preguntas realizadas con anterioridad tanto en foros o dudas comunes suministradas por la Polic´ıa. Con este elemento se pretende mejorar y agilizar los procesos que pertenecen a la Sede Electr´onica, y a su vez, ayudar al ciudadano, respondiendo las cuestiones que le puedan surgir mientras visita la web. Por tanto, la clave es hallar c´omo se va acelerar las interacciones entre personas y servicios, mejorando as´ı la experiencia del cliente. Al mismo tiempo, se quiere ofrecer a la Polic´ıa una opci´on para mejorar el proceso de compromiso con los clientes y adem´as beneficia la eficiencia operativa al reducir el costo t´ıpico del servicio al cliente. De manera paralela, se tiene la intenci´on de clasificar las preguntas y respuestas que se extraigan con el fin de obtener un n´umero de expresiones y palabras que creen un vocabulario para luego entrenar el chatbot. A trav´es de este proyecto, adem´as, se pretende entender como funcionan los asistentes conversacionales, analizar como es su estructura y encontrar las principales dificultades que los ingenieros de inform´aticos se encuentran a la hora de desarrollar dicho software. 1.3. Plan de Trabajo El desarrollo de este trabajo se ha realizado en tres fases: 1. Investigaci´ on: Durante los primeros tres meses se llev´o a cabo un periodo de adaptaci´on al contexto del trabajo y de adquisici´on de conocimientos necesarios para comenzar con el posterior desarrollo. Al comienzo, se realiz´o una reuni´on general en la que se explic´o el punto de partida del trabajo, cuales iban a ser los objetivos que lograr y cuales iban a ser los conocimientos necesarios. Tras esto, se acordaron numerosas reuniones con el fin de realizar un seguimiento del progreso en la investigaci´on y para resolver las posibles dudas que surgieran. Otro motivo por el cual se concertaron dichas reuniones fue para poder explicar los fundamentos b´asicos de las aplicaciones con la que se pueden programar asistentes. En las reuniones tambi´en se explicaron numerosas herramientas que facilitar´ıan la labor de investigaci´on. Una de estas herramientas fue Google Scholar, la que el equipo usar´ıa para buscar art´ıculos cient´ıficos sobre investigaciones anteriores realizadas sobre el mismo campo de estudio. Finalmente, una vez obtenidas varias conclusiones acerca los requerimientos del proyecto, se comenz´o a dar prioridad al desarrollo. 2. Desarrollo: Una vez se adquirieron los conocimientos necesarios para poder empezar a crear una versi´on s´olida del proyecto, se decidi´o comenzar con la codificaci´on de la propuesta. La fase de investigaci´on no ces´o, ya que era imprescindible saber sobre conceptos avanzados del lenguaje de programaci´on de Python y manejo con la herramientas Rasa Stack. Durante esta fase se construyeron tambi´en los datatsets de entrenamiento, basados en informaci´on extra´ıda de trabajos le´ıdos durante la fase anterior. 3. Experimentaci´ on: 1.4. Estructura del Trabajo 3 Finalmente se realizaron los prototipos de la idea inicial, comenz´o el proceso de experimentaci´on, en el qu´e se realizaron pruebas en servidores web para visualizar el aspecto del chatbot. Tambi´en se realizaron varias pruebas que consistieron en ir comprobando si el asistente respond´ıa correctamente a todos los tr´amites que abarcaba el proyecto. Por otra parte se hicieron pruebas de estr´es con la herramienta de RESTful. Finalmente, se realiz´o una comparaci´on de los resultados obtenidos derivados de la fase de experimentaci´on y con los adquiridos en otros trabajos de investigaci´on. 1.4. Estructura del Trabajo El resto del trabajo est´a organizado en 6 cap´ıtulos y 1 anexo con la estructura que se comenta a continuaci´on: El Cap´ıtulo 2se explica la historia de los asistentes conversacionales, adem´as de describir la relaci´on actual que se mantiene con la inteligencia artificial. Por otro lado se aclaran conceptos que son elementales para comprender el funcionamiento de los chatbots. Finalmente se describe los procesos que abarca este proyecto, mostrando el entorno de la Sede Electr´onica. El Cap´ıtulo 3se presenta el estado del arte, donde se realiza una revisi´on de diferentes soluciones enfocadas en varios sectores empresariales, con el fin de apreciar la compenetraci´on de los asistentes en el panorama econ´omico-social. Por otro lado, se analizan todas las aplicaciones capaces de desarrollar por un asistente, explicando los puntos a favor y en contra de cada uno, para luego tomar la decisi´on m´as acertada a este trabajo. En este apartado se incluye una tabla comparativa que resume las principales caracter´ısticas de cada propuesta analizada. El Cap´ıtulo 4presenta la metodolog´ıa y an´alisis del proyecto. Primero se explican diferentes diagramas que han sido esenciales para estructurar el asistente. Luego, se incide en el funcionamiento interno de Rasa, desarrollando el contenido de cada fichero. Finalmente se tratar´a el tema del despliegue de Rasa y c´omo se realiza la conexi´on entre esta herramienta, Telegram y un servidor web. El Cap´ıtulo 5describe los experimentos realizados para evaluar la efectividad de la programaci´on del asistente propuesta en el cap´ıtulo 4y se presentan los resultados obtenidos. El Cap´ıtulo 6muestra las principales conclusiones de este trabajo y las l´ıneas futuras de investigaci´on. Los Cap´ıtulos 7y8son las traducciones al ingl´es de la Introducci´on y de las Conclusiones. Cap´ıtulo 2 Contexto de la Investigaci´on En esta secci´on se explica el contexto en el que se desenvuelve el Trabajo Fin de Grado. En el punto 2.1, se resume la historia de los chatbots y c´omo comenzaron a hacerse un hueco en esta sociedad. En la secci´on 2.2 se sit´ua en qu´e contexto social se encuentra la humanidad y c´omo esta integrada la digitalizaci´on en el d´ıa a d´ıa de las personas. En el punto 2.3, se explica en qu´e consiste la inteligencia artificial y se puntualiza el t´ermino NLP. En el siguiente apartado 2.4 se detalla c´omo funciona un chatbot y los elementos esenciales que lo forman. En el siguiente punto 2.5 se explicar´a la combinaci´on de librer´ıas que se utilizan para llevar a cabo el funcionamiento del asistente. Finalmente, en el apartado 2.6 se explica el punto de partida del chatbot, la p´agina web de la Sede Electr´onica y el apartado donde se encuentra el asistente. 2.1. Historia de los Asistentes Conversacionales Sobre el a˜no 1950, Alan Turing public´o el paper “Computer Machinery and Intelligence”, en el que se explic´o el Test de Turing [TH50], donde verificaba si una m´aquina puede llegar a tener un comportamiento inteligente similar al del ser humano. El test consist´ıa en mantener una conversaci´on entre una persona y otra entidad (persona o m´aquina) a trav´es del chat. Entonces la persona ten´ıa que determinar si hablaba con una m´aquina o un humano. Posteriormente, en 1960, el primer programa que simulaba una conversaci´on fue ELIZA [Wei66], creado por el profesor Joseph Weizenbaum. ELIZA reconoce palabras clave o frases para reproducir una respuesta. El objetivo de este chatbot era simular a un psicoterapeuta escuchando los problemas de su interlocutor y escribi´endole las respuestas a sus preguntas; de esta manera consegu´ıa ayudar a la persona y as´ı continuar´a hablando sobre sus preocupaciones. Si al final no ten´ıa respuestas disponibles, optaba por otras t´ecnicas, como la generaci´on de preguntas utilizando como base la frase que le dec´ıa su paciente. Once a˜nos despu´es, en 1971, Kenneth Colby cre´o PARRY [PCFR16]; un asistente que utilizaba una estructura parecida a ELIZA con el fin de simular a un paciente con paranoia. Pero hab´ıa una diferencia entre estos dos chatbots, PARRY si era consciente de la conversaci´on y tambi´en de su estado de ´animo. Por tanto, las respuestas no ven´ıan influenciadas solo por la entradas sino tambi´en por las creencias,deseos e intenciones de PARRY. Por ejemplo, ten´ıa la capacidad de ignorar, cambiar de tema de conversaci´on e 5 12 Cap´ ıtulo 2. Contexto de la Investigaci´ on 3. Se buscan respuestas candidatas en la base de datos seg´un las cualidades recogidas en los intentos, las entidades y el contexto. 4. Se crea una lista con las respuestas escogidas. 5. Se selecciona la respuesta a base del contexto del mensaje y la lista de resultados. 6. Finalmente se obtiene una respuesta. Esta informaci´on se puede ver esquematizada en la Figura 2.4. Figura 2.4: Estructura del Chatbot [RAMI17] 2.5. Frameworks y Librer´ ıas Utilizadas 13 2.5. Frameworks y Librer´ıas Utilizadas En este apartado se va a explicar los frameworks y librer´ıas que se han utilizado para programar el chatbot, adem´as del framework de Rasa Stack. 2.5.1. Herramientas Utilizadas Telegram - The BotFather [L´o20] ofrece un soporte de open-source, asegurando solidez y sencillez a la hora de crear y usar bots. Si se quiere crear un bot en Telegram, el primer paso es iniciar un chat con BotFather, un bot espec´ıfico para crear asistentes. Situ´andose en la conversaci´on, preguntar´a al usuario sobre las cualidades que se aplican al bot que se est´a creando (imagen del perfil, nombre, descripci´on,...), adem´as se proporcionar´a al usuario informaci´on imprescindible como el Token o el enlace directo al bot. Esta clave se trata de una cadena de caracteres que permite su control mediante peticiones HTTP a la API. Github [Git22] brinda la posibilidad de crear una p´agina web, ya que dispone de la herramienta de pages, con la que deja subir un repositorio a una url. Funcionalidad sencilla que con un simple index.html ya se puede testear el chatbot en internet. BotFront [Joa21] es open source que se ha utilizado para dar formato a la vista web del Chatbot, gracias al c´odigo dejan en su p´agina web de Github. Simplemente con copiar el script en el index.html y personalizar algunos datos, ya se puede conectar el proyecto con una p´agina web. Spacy [CC20] es una librer´ıa que se encuentra integrada internamente en Rasa, ya que se utiliza para analizar el lenguaje natural del usuario. A diferencia con otras librer´ıas, proporciona resultados m´as eficaces y r´apidos, con un 90 %. Con ella, se realiza una tokenizaci´on de los mensajes, ofrece de vectores pre-entrenados y soporte multidioma. TensorFlow [AC21] es open source que utiliza Rasa de manera interna tambi´en para realizar procesos de aprendizaje autom´atico. A su vez opera sobre arrays de datos que disponen de m´as de una dimensi´on, gracias a las redes neuronales llamadas tensores. Al entrenar el chatbot se hace uso de esta librer´ıa.A su vez tambi´en realiza una tokenizaci´on sobre el lenguaje natural del usuario. Rasa sdk [CC20] forma parte del conjunto de librer´ıas que hace posible la programaci´on de actions.py con las clases Action. Estas clases implementan funciones que filtran los mensajes del usuario y devuelven una respuesta concreta mediante las funciones de name() yrun(). Para obtener un resultado hace uso de elementos como el Tracker, el Dispatcher y domain.yml Fuzzywuzzy [GLPC21] es otra biblioteca que se utiliza para comparar dos cadenas de caracteres, como por ejemplo palabras u oraciones. El resultado devuelto es un n´umero que equivale a una proporci´on entre el 0 al 100 de la semejanza entre estos dos elementos. Si el valor que torna est´a m´as pr´oximo al 0, entonces su equivalencia es m´ınima, pero en cambio si es m´as cercano al 100, su igualdad es mayor. JSON [Ali16] es una librer´ıa que se utiliza en este proyecto con el fin de obtener datos de ficheros con formato .json para su posterior an´alisis. Lo beneficioso de esta librer´ıa es c´omo estructura los datos y lo f´acil que resulta acceder a los elementos. 14 Cap´ ıtulo 2. Contexto de la Investigaci´ on A continuaci´on en la Figura 2.5 se muestra la relaci´on entre cada de una de las herramientas explicadas: Figura 2.5: Esquema de paquetes 2.6. Sede Electr´onica La Sede Electr´onica es la p´agina web donde se va encontrar aplicado el chatbot [Nac22], espec´ıficamente en los apartados de extranjer´ıa, pasaporte y DNI. La Sede Electr´onica pertenece al conjunto de servicios nacionales de Espa˜na, y pone a la disposici´on de los ciudadanos varios procesos para gestionar tr´amites legales. En este caso los apartados son los siguientes: Procesos selectivos DNI Pasaporte Antecendentes policiales Extranjer´ıa Seguridad privada Registros electr´onicos Documentaci´on para viajar Quejas y sugerencias Luego cada secci´on tiene subapartados y enlaces que redirigen a los formularios o las webs donde se pueden realizar estos tr´amites. Los tr´amites actualmente se gestionan de manera presencial, pero como objetivo futuro tienen planeado dar el suficiente soporte web para realizar la mayor´ıa de manera online. Un ejemplo de la apariencia que tiene la p´agina inicial de la Sede Electr´onica se ve en la Figura 2.6. 2.6. Sede Electr´ onica 15 Figura 2.6: P´agina inicial 2.6.1. Apartado Extranjer´ıa Este proyecto est´a centrado justo en esta secci´on, para poder responder preguntas sencillas y te´oricas que puedan surgir al usuario a la hora de querer solicitar alg´un tr´amite. Los procedimientos disponibles en el apartado de Extranjer´ıa se pueden ver en la Figura 2.7. Al seleccionar un apartado de los que se han mostrado anteriormente, te redirige a una explicaci´on sobre el tr´amite. Tambi´en muestra enlaces de inter´es para el usuario como donde consultar las tasas o la oficina de extranjer´ıa o comisar´ıa de polic´ıa m´as cercana. De todas est´as p´aginas se ha extra´ıdo la informaci´on para crear las respuestas a las preguntas que puede recibir el chatbot, por ejemplo “¿Qu´e papeles necesito para solicitar la c´edula?” o “¿Cu´anto cuesta solicitar la tarjeta de residencia?”. En la Figura 2.8 se ve un ejemplo de todos los datos que se pueden encontrar por cada tr´amite. Figura 2.7: Procedimientos de Extranjer´ıa 16 Cap´ ıtulo 2. Contexto de la Investigaci´ on Figura 2.8: Ejemplo de Tr´amite 2.6.2. Renovaci´on y Solicitud de Pasaporte o DNI Para acceder a estos tr´amites se debe de acceder primero a los procesos de DNI o Pasaporte electr´onico. Se puede localizar en la p´agina una secci´on con la siguiente informaci´on mostrada en la Figura 2.9. Cuando se hace click en “Cita Previa para DNI o Pasaporte”, se redirige a una p´agina donde el usuario debe rellenar los campos obligatorios con sus datos personales, elegir la fecha y el centro donde desea pedir cita. De estos tr´amites tambi´en se responde a que documentaci´on es necesaria o el precio para realizar la renovaci´on o solicitud del DNI o pasaporte. En la Figura 2.10 se muestra la p´agina de inicio para solicitar o renovar el DNI y el pasaporte, de donde se ha extra´ıdo la informaci´on para redactar el procedimiento de estos tr´amites. Figura 2.9: Acceso a los tr´amites 2.6. Sede Electr´ onica 17 Figura 2.10: Petici´on de cita Cap´ıtulo 3 Estado del Arte Hoy en d´ıa el uso de asistentes virtuales est´a en auge y cada vez hay m´as empresas interesadas en incorporar estos mecanismos para atender a sus clientes. Por ello, hay que conocer este software y saber que tipo de chatbot es el m´as apropiado para el negocio. En la secci´on 3.1 se muestran diferentes chatbots divididos en tres sectores que ya est´an siendo utilizados de manera cotidiana. En el punto 3.2 se muestran las diferentes aplicaciones que permiten el desarrollo de un chatbot. El el ´ultimo punto 3.3, despu´es de haber explicado las herramientas de dise˜no de chatbots, se describen otros proyectos desarrollados con Rasa Stack, aplicaci´on que posteriormente se explicar´a su funcionamiento. 3.1. Contexto Digital Como se ha citado anteriormente, debido a la crisis y posterior confinamiento por el COVID-19, la digitalizaci´on es importante para el d´ıa a d´ıa de las empresas, ya que aportan al usuario la capacidad de resolver sus dudas de forma remota. Por ello proponen ventajas tecnol´ogicas, como los chatbots, para agilizar sus comercios y tr´amites. 3.1.1. Chatbots en el Sector de la Medicina El primer asistente a tratar es OneRemission [kee21a], chatbot dirigido a ayudar a los pacientes que luchan contra el c´ancer. Las tecnolog´ıas que utiliza son Node.js, MongoDB, Wit.ai, BotPress y WebSocket. El resultado es un soporte que ofrece planes de alimentaci´on, ejercicios y pr´acticas seleccionadas por profesionales de la medicina integrativa. De esta manera, pueden preguntar dudas simples y prescindir por tanto de la supervisi´on de un m´edico. Sin embargo, si se llegar´a a necesitar la ayuda de un especialista, OneRemission ofrece sesiones con onc´ologos en l´ınea las 24 horas del d´ıa durante toda la semana. El siguiente es Youper [kee21b], asistente dirigido a mejorar la salud psicol´ogica de los pacientes. Est´a desarrollado con 13 tecnolog´ıas y servicios, incluidas HTML5, Google Analytics, jQuery, SPF, Google Apps for Business y IPv6 [cru22]. El resultado es una aplicaci´on que ofrece terapia online por chat, sesiones virtuales con psic´ologos especializados y planes de medicaci´on en caso de necesitar. Otro chatbot a destacar es Babylon Health [Bab21], idea que surgi´o con el fin de detectar la enfermedad que pod´ıan padecer los usuarios seg´un sus s´ıntomas. El desarrollo 19 20 Cap´ ıtulo 3. Estado del Arte consisti´o en crear un conjunto de herramientas, dise˜nado en torno al cerebro de un m´edico, utilizando IA. El fruto de este proyecto es un asistente conversacional, en el que los pacientes informan, por voz o mensaje, del estado en el que se encuentran. En paralelo, los m´edicos estudian los casos para recetar medicamentos o derivar a los pacientes a un especialista. El posterior asistente virtual, Florence [oT17], tiene la funci´on de simular el comportamiento de una enfermera personal. El desarrollo se basa en software desarrollado con algoritmos de aprendizaje autom´atico, incluido el NLP; adem´as dispone de servidores en las plataformas de Facebook Messenger y Skype. El asistente final es capaz de recordar a los pacientes que tomen sus medicamentos y realizar un esquema de los d´ıas y horas a las que deben de tomarlos. Otro asistente que hay que citar es Healthily [Hea22], aplicaci´on que tiene el labor de informar sobre temas de medicina basados en fuentes de alta fiabilidad. El resultado final es una aplicaci´on disponible en iOS, Android, Facebook Messenger, Slack, KIK, Telegram y versi´on web que permite al paciente decidir de manera m´as eficiente sobre temas de su salud. Tambi´en funciona como intermediara para dar informaci´on sobre servicios m´edicos en l´ınea. 3.1.2. Chatbots en el Sector de la Educaci´on El primer chatbot que se va describir es CourseQ [GBFAMC18], el cual dispone de funcionalidades como recordar fechas de entrega o mostrar los horarios de los estudiantes y profesores. Su desarrollo se realiz´o gracias a los avances de en el campo inteligencia artificial, concretamente en las ramas del ML, Big Data (recopilaci´on y an´alisis de datos) y NLP. El aspecto final es el de una aplicaci´on capaz de desempe˜nar las funcionalidades anteriormente mencionadas y con la capacidad de ser integrada en los Learning Management System (LMS) oVirtual Learning Environment (VLE), por ejemplo Moodle. El siguiente en describir es el asistente Ani [GBFAMC18], que tiene el objetivo de realizar tutor´ıas particulares para facilitar el compromiso y la responsabilidad de los alumnos. El desarrollo es similar a los anteriores ya que est´a programado a partir de algoritmos de aprendizaje autom´atico con el fin de obtener resultados personalizados para casa usuario, llegando incluso a poder sustituir acciones de profesores. Finalmente, se consigue un asistente que aporta elementos que motivan y eval´uan a los estudiantes, adem´as de incluir un curso para aprender ingl´es. Otro chatbot a destacar es Botter [GBFAMC18], que a diferencia de los dem´as bots, es un robot f´ısico que ayuda a los alumnos en la Universidad Oberta, situada en Catalu˜na. El funcionamiento de Botter se basa en tecnolog´ıa cognitiva para poder aprender a partir del comportamiento demostrado por el alumnos. El fruto final es un asistente f´ısico con interacciones a base de se˜nales de luz y mensajes sonoros (como frases de motivaci´on) o movimientos, con el objetivo de servir de ayuda a los estudiantes a organizar sus tareas. El posterior asistente virtual es el bot desarrollado en la Universidad CEU Cardenal Herrera [CIO17].El objetivo es conseguir acompa˜nar al alumno en su curso acad´emico y responder sus preguntas de manera instant´anea y sin interrupciones. Su implementaci´on se basa en la herramienta de Microsoft Azure, y actualmente soluciona dudas administrativas, pero se espera que en el futuro pueda determinar la conducta del alumno con el fin de aconsejarle durante su periodo acad´emico. 3.2. Frameworks de Desarrollo de Chatbots 21 Por ´ultimo, los robots Pepper y Nao [Rob22] est´an centrados en la educaci´on universitaria. Se pueden programar por completo con una interfaz gr´afica o directamente con el Software Development Kit (SDK) y herramientas de codificaci´on como Python y C++. Entre sus funciones se encuentran dar y dinamizar las clases y evaluar actividades. 3.1.3. Chatbots en el Sector Bancario y Seguros Comenzando por el asistente Eno [One22] fundado por la empresa Capital One, es un chatbot bancario y puramente “conversacional”, lo que significa que depende casi por completo de IA para generar sus respuestas. Esto significa que Eno analiza cada mensaje que recibe para encontrar la mejor respuesta. El aspecto final es un asistente que responde preguntas sobre el saldo, movimientos recientes, fechas de vencimiento y l´ımites de la tarjeta. El segundo asistente se trata de ABIE [NEW18], que tiene el objetivo de guiar a los agentes a trav´es del tr´amite de venta, permiti´endoles acceder a informaci´on y a documentos. En relaci´on con su implementaci´on, cuenta con algoritmos de Inteligencia Artificial y el soporte de la empresa Allstate. Respecto a su aspecto final, es un asistente conversacional que ofrece datos y productos de manera personalizada seg´un el cliente. Adem´as maneja m´as de 25.000 consultas por mes de 12.000 agentes [dit18], incrementando a un ritmo del 10 %. Esto es debido a que los agentes se est´an concienciando de que gracias a este asistente obtienen un mejor resultado de manera m´as veloz. El siguiente chatbot es BotOferta [dit18], que facilita datos sobre un programa de descuentos en ocio y compras en Espa˜na. Para ello, los usuarios pueden realizar preguntas por mensaje directo o por voz y obtendr´an respuestas sobre los descuentos en determinados ´ambitos o lugares. El lenguaje que utiliza Botoferta es cercano y ameno, con el fin del que el cliente se sienta c´omodo en la conversaci´on. Por otro lado, este servicio ya est´a disponible desde el a˜no pasado en aplicaciones como Facebook Messenger, y se puede acceder a ´el mediante la propia web o por la App de imaginBank. El cuarto asistente trata seguros de viaje y est´a creado por la empresa ARAG [ARA22]. Consiste en un asistente de seguros de viaje que muestra informaci´on sobre los productos de la compa˜n´ıa con el fin de ayudar a los clientes con sus viajes. Esta herramienta permite que las empresas puedan hablar, a trav´es de la mensajer´ıa instant´anea de Facebook, con los consumidores sin necesidad de que haya una persona detr´as de la cuenta. El vocabulario que emplea divertido, sencillo y ameno, para que el usuario se sienta m´as confiado al planificar su desplazamiento. El ´ultimo asistente es Blue [BBV22], el nuevo asistente virtual del banco BBVA. El objetivo es ayudar a los clientes y consultar informaci´on sobre su cuenta. La implementaci´on se basa en algoritmos de NLP ydeML, o aprendizaje autom´atico. De esta manera,el usuario interact´ua con este chatbot no solo v´ıa texto escrito, sino tambi´en mediante el uso de la voz. El resultante asistente se encuentra en la parte superior derecha de la ventana de navegaci´on de la aplicaci´on de BBVA. 3.2. Frameworks de Desarrollo de Chatbots Los frameworks son un tipo de herramientas con una series de archivos y pautas que se utilizan para implementar proyectos con una estructura y metodolog´ıa con el fin de 28 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto Figura 4.5: Casos de uso 4.2. Elecci´on de Herramienta Frente a todas la herramientas descritas anteriormente, se ha elegido la opci´on de desarrollar el chatbot con Rasa [VLRL19]. Es el framework que presenta mejores caracter´ısticas, ya que tiene un gran soporte, documentaci´on y adem´as se puede dise˜nar chatbots m´as complejos. Las cualidades que se van a tener en cuenta son: Facilidad de aprendizaje: Este concepto se refiere al grado de ´exito obtenido durante el aprendizaje en el transcurso del tiempo. Soporte de la comunidad: Se valora si el framework tiene una comunidad detr´as dispuesta a ayudar. Documentaci´on existente: Se valora la cantidad y calidad de informaci´on que existe tanto oficial como creada por la comunidad. Madurez tecnol´ogica: Cuantifica en una escala del 1 al 9 el grado de evoluci´on de una tecnolog´ıa. El nivel 1 es la observaci´on y reporte de principios y el nivel 9 se considera una tecnolog´ıa probada con ´exito en misiones. Capacidad de personalizar: Caracter´ıstica que permite a la tecnolog´ıa adaptarse al proyecto de cada cliente. Actualizaci´on de software: Analiza si los desarrolladores introducen cambios y a˜naden funciones nuevas a la tecnolog´ıa. A continuaci´on, se puede ver en la Tabla 4.1 la puntaci´on (1-10) de diferentes cualidades esenciales que debe de tener todo framework. 4.3. Funcionamiento de Rasa Stack 29 AIML Dialogflow IBM Watson Rasa Flow XO Wit.ai Aprendizaje(20 %) 6 7 7 6 7 6 Comunidad(20 %) 4 4 3 9 6.5 5 Documentaci´on(20 %) 5 6.5 6 9 7 6.5 Madurez(15 %) 5 8 9 5 5 6 Personalizar(15 %) 7 6.5 7 5 7 5 Actualizaci´on(10 %) 7 7 8 8 6 5 TOTAL 5.5 6.38 7 7.4 6.5 5.65 Tabla 4.1: Tabla comparativa entre herramientas Despu´es de analizar esta tabla, el framework m´as completo es Rasa Stack. Por ello ser´a la herramienta que se va a utilizar en este proyecto. 4.3. Funcionamiento de Rasa Stack Como se ha especificado antes Rasa est´a dividida en dos principales secciones: la parte de NLU y del Core. Por tanto, a la hora de programar y formar el dataset es importante tener en mente el flujo que sigue dicha herramienta. Las Figura 4.6 y4.7 muestran el funcionamiento que toma Rasa Stack [PG21]. Figura 4.6: Clasificaci´on de un mensaje 30 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto 1. El trigger que da comienzo al flow se trata del env´ıo de un mensaje a Rasa Stack, que hace de Broker u Orquestador y tiene la funcionalidad de organizar las conexiones entre las diferentes capas. 2. Posteriormente, la secci´on que entra en acci´on es la del NLU, descifrando el intent del usuario y tokenizando el mensaje, consiguiendo as´ı las entities y los slots asociados. Cuando se realiza este paso, tambi´en se calcula un grado de confianza, que es un porcentaje basado en lo que entiende Rasa del mensaje. Si dicho c´alculo es menor al 40 %, se muestra un mensaje de que no se ha entendido al usuario. 3. En paralelo, el componente Core se encarga de decidir que acci´on tomar seg´un el punto de la conversaci´on en que se encuentra el asistente con el usuario. Esta determinaci´on de respuesta la toma gracias a las historias que se han establecido en su entrenamiento y al porcentaje calculado con la coincidencia con dichas historias definidas en stories.yml. 4. Finalmente se devuelve una respuesta al usuaria por el mismo canal que el de entrada. Figura 4.7: Esquema de pasos - Rasa Stack 4.3.1. Componentes de Rasa Las entidades o entities son palabras claves imprescindibles para filtrar la intenci´on o el intent de la pregunta que haga el usuario y saber que respuesta o utterance da el asistente. Adem´as se pueden guardar los valores de las entidades en slots con el fin de acceder a ellos en las diversas funciones o actions. Todos estos componentes formar´an parte de las estructuras stories, donde se crea un flujo de intents yutterance. 4.3. Funcionamiento de Rasa Stack 31 Si se quiere saber m´as sobre estos elementos se recomienda leer la informaci´on recopilada en el Anexo Apara entender mejor el contenido de cada fichero del proyecto. A continuaci´on se detallan su programaci´on. Nlu.yml Aqu´ı residen todas los intents con los que se ha entrenado el asistente. Cada intent tiene est´a formado por los mensajes m´as frecuentes definidos dentro de la Sede Electr´onica. Los intents forman parte de Rasa NLU y es la manera que permite organizar y clasificar los mensajes enviados por el usuario. Los mensajes est´an divididos por la acci´on por la que pregunta el usuario: •Proceso •Precio •Documentaci´on necesaria Y tambi´en por el tipo de tr´amite, ya que se ha abarcado todos los procesos del apartado de extranjer´ıa y renovaci´on/solicitud del pasaporte y DNI. Como se puede apreciar en el Algoritmo 4.1 hay palabras seleccionadas entre corchetes, esto quiere decir que el valor que escriba el usuario ser´a guardado y posteriormente analizado en la secci´on de actions.py. Cuando se estudie este componente se explicar´a mejor el tratamiento por el que pasa este dato (nombre tramite). Domain.yml Secci´on dedicada a las respuestas posibles que da el asistente, llamadas utterances. Como los intents, tambi´en pertenece a Rasa NLU y se utiliza para el entrenamiento del chatbot. Su clasificaci´on est´a basada por la pregunta a la que responde, y adem´as en este fichero se tiene en cuenta los intents definidos en nlu.yml, las acciones que est´an en actions.py y el tipo de entidades que se guardan. Esta especificaci´on se debe a que tambi´en son elementos importantes a la hora de responder al usuario, ya que las acciones tambi´en son las encargadas de responder al cliente. El comienzo del fichero empieza con la lista de todos los intents como se puede ver en el Algoritmo 4.2. Posteriormente hay que especificar las entidades como en el Algoritmo 4.3. En este proyecto solo se ha utilizado una entidad tipo texto que guarda el tr´amite por el que pregunta el usuario. A continuaci´on, se escriben todas las respuestas que da el asistente, excepto las que provengan de las acciones. Todas las utterances deben de ser nombradas con un nombre ´unico y seguidas por el mensaje que da el chatbot. El Algoritmo 4.4 es un ejemplo de la estructura que hay seguir para declarar las utterances. Y finalmente se nombran las acciones que se encuentran en el fichero de actions.py como se muestra en el Algoritmo 4.5. 32 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto Algoritmo 4.1: Contenido de nlu.yml 1−intent :t a r j e t a s s o l a s 2 examples :| 3−Tarjeta de [estudiante ](nombre tramite) 4−Tarjeta r e s i d e n c i a [f a m i l i a r de ciudadano UE](nombre tramite) 5−Tarjeta r e s i d e n c i a [larga durac i ´on ](nombre tramite) 6−Tarjeta de r e s i d e n c i a y [trabajo ](nombre tramite) 7−Tarjeta [familiar ](nombre tramite) 8 9−intent :tramites−solos 10 examples :| 11 −Asignar [NIE ](nombre tramite) 12 −Au to riz ac i ´on y re nov aci ´on l a r e s i d e n c i a [temporal ](nombre tramite) 13 −Autorizacion de [regreso ](nombre tramite) 14 −Reg i s t r a r [ciudadano de UE](nombre tramite) Algoritmo 4.2: Lista de intents 2 i n t e n t s : 3−start 4−de sp e di r 5−confirmar 6−negar 7−preguntas−infoSede 8−preguntas−gestiones 9−preguntas−certificados 10 −preguntas−fi rmaElec 11 −preguntas−extranjeria 12 −preguntas−reagrupacion 13 −dudas−NIE−TIE 14 −... Algoritmo 4.3: Especificaci´on de la entidad 1 entities : 2−nombre tramite 3 4 slots : 5 nombre tramite : 6 type :text 7 initial value :NULL 8 auto fill :true 9 influence conversation :true Algoritmo 4.4: Ejemplos de utterances 1 utter extranjeria : 2−text :”Para poder s o l i c i t a r l a t a r j e t a f a m i l i a r de l a UE es 3n e c e s a r i o que e l f a m i l i a r comunitario , 4pueda probar que t i e n e medios 5s u f i c i e n t e s para poder s o s t e n e r l e economicamente . ” 6 7 utter reagrupacion : 8−text :”Para hacer una reagrupacion 9no es n e c e s a r i o t en er p a rt i da de naci miento espanol a ” 4.3. Funcionamiento de Rasa Stack 33 Algoritmo 4.5: Lista de acciones 1 a c t i o n s : 2−action precio 3−action proceso 4−action documentacion 5−action filtro TramitesJSON.json Documento con formato JSON, que funciona como dataset de informaci´on que se quer´ıa separar de domain.yml, ya que est´a formado por un array, llamado arrayTramites que contiene todos los procesos que se pueden realizar tanto en extranjer´ıa, e informaci´on importante a la hora de renovar/solicitar el pasaporte o DNI. Esta informaci´on se puede ver en el Algoritmo 4.6. De este dataset extraen la informaci´on las acciones de la anterior figura, dependiendo de la pregunta del usuario. Cada tr´amite tiene los siguientes elementos: •Tramite: apartado que simplemente nombra el elemento y sirve de gu´ıa para el programador. •Alias: elemento que contiene caracter´ısticas que representan al tr´amite y por el que se le pueden diferenciar de los dem´as. •Precio: se especifica el dinero que cuesta tramitar dicho proceso o te gu´ıa al enlace donde poder encontrar el precio. •Documentaci´on: se concreta la documentaci´on necesaria para realizar el tr´amite o tambi´en puede conducir al usuario a un link donde tambi´en se muestre esta misma informaci´on. •Proceso: gu´ıa para solicitar cualquier expediente dirigida al cliente. En algunos elementos este apartado est´a complementado con un enlace, que especifica mejor los pasos que debe de seguir el usuario seg´un sus condiciones. procesosJSON.json Documento con formato JSON, que funciona como dataset con el tipo de solicitudes de informaci´on que se puede hacer sobre los tr´amites. El contenido de este fichero se muestra en el Algoritmo 4.7. Este dataset se utiliza para comparar el ´ultimo mensaje del usuario con los datos procesosJSON.json, de esta manera se comprueba qu´e tipo de informaci´on desea el receptor. Actions.py Fichero dedicado a la programaci´on de funciones encargadas de extraer la informaci´on guardada en las entidades y buscar una respuesta gracias a este dato. Por tanto este documento est´a formado por clases de actions procedentes de la librer´ıa rasa sdk y tienen el formato que se muestra en el Algoritmo 4.8. En la funci´on name se devuelve el nombre de la acci´on por el que ser´a reconocida la clase en los dem´as ficheros como en stories.yml o domain.yml. Por otra parte,la funci´on run tiene la l´ogica de la clase, donde se env´ıa el mensaje desde el dispatcher gracias a la funci´on de utter message(”texto”). Dos ejemplos de actions se ven en los Algoritmos 4.9 y4.10. 34 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto Algoritmo 4.6: Fichero tramitesJSON.json 1”arrayTramites”:[ 2{ 3” tramite ” :” Prorroga de e s t a n c i a de c or t a durac ion ” , 4 5”alias”:” l a p ro rr og a de e s t a n c i a de c or ta du raci on ” , 6 7”precio”:” El p r e c i o puede v a r i a r dependiendo s i se dis po ne de 8visado o no . Con visado −>31 ,22 euros , Sin visado −>17 ,49 euros 9( se incrementara en 1 ,06 euros mas por cada dia que se prorrogue 10 l a e s t a n c i a ) ” , 11 12 ” documentacion ” :”−Impreso de s o l i c i t u d \n\n 13 −Pasaporte completo o t i t u l o de v i a je \n\n 14 −Do cu me nta ci n a c r e d i t a t i v a de dis po ne r de medios economicos 15 s u f i c i e n t e s \n\n 16 −Documentacion a c r e d i t a t i v a de d is po ne r de seguro m d i c o 17 de v i a j e . \n\n 18 −Documentacion que g a r a n t i c e e l r e to rn o a l p a i s de p ro ce de nc ia . \n\n 19 −Documentacion a c r e d i t a t i v a de l a s ra zo ne s e x c e p c i o n a l e s por l a s que 20 se s o l i c i t a la prorroga ” , 21 22 ”proceso”:” Se r e a l i z a d ent ro de l a s e c c i o n de E x t ra n j er i a y l ue go 23 s e l e c c i o n a s e l apartado de P r r r o g a de e st an ci a co rt a de duracion . 24 En e s t e apartado podras d es c ar g ar t e e l Formulario EX00 , 25 que tendras que entr ega r r e l l e n o en la O fi cin a de E xtran jeria , 26 Je fa tu ra S up er io r o C o m i s a r a de P o l i c i a . Por tanto , dicho tra mite 27 se proces a de manera p r e s e n c i a l . ” 28 }, Algoritmo 4.7: Fichero procesosJSON.json 1{ 2”arrayProceso”:[” Como l o s o l i c i t o ?” ,” Como p e d i r l o ? ” , 3” Que pasos debo de s e g u i r ? ” ,” Donde l o hago ?” ,”Pasos”, 4” I n t r u c c i o n e s ” ,”Apartado” ,”Seccion”,”Guia de como h a c e rlo ” , 5” Procedimiento ” ,” Proceso ” ,”Guia” ,”Guide” ,”Proccess”,”Steps”], 6”arrayDocumentacion”:[” Documentos n e c e s a r i o s ” , 7” Documentacion n e c e s a r i a ” ,”Documentacion” ,” Papeles n e c e s i t o ” , 8”Pappers” ,” Pappers th at i need ” ,” Necessary documentation ” ], 9”arrayPrecio”:[”Precio”,”Price”,”Money” ,” Dinero ” ,” Valor ” , 10 ” Coste ” ,”Euros” ,” Precio d el tramite ” ] 11 } Algoritmo 4.8: Ejemplo actions 1 c l a s s ActionHello ( Action ) : 2 3 def name( s e l f ) −>Text : 4 return ” action name ” 5 6 async de f run ( 7 s e l f ,dispatcher :CollectingDispatcher ,tracker :Tracker , 8 domain :Dict [Text ,Any ])−>L i s t [Dict [Text ,Any ] ] : 9 disp a t c h e r . utter message ( te xt :” Hello World ! ” ) 10 11 return [ ] 4.3. Funcionamiento de Rasa Stack 35 Algoritmo 4.9: Clase Action Proceso 1 c l a s s ActionProceso ( Action ) : 2 3 #Donde s e ad ju di ca e l nombre de l a f u n c i ´on 4 def name( s e l f ) −>Text : 5 return ”action proceso” 6 7 def run ( s e l f ,dispatcher :CollectingDispatcher ,tracker :Tracker , 8 domain :Dict [Text ,Any ])−>L i s t [Dict [Text ,Any ] ] : 9 #Se ob ti ene e l v alo r de l a entidad ”nombre tramite ” 10 nombre tramite = tr ac k e r . g e t s l o t ( ”nombre tramite”) 11 12 #Se ob ti ene e l ultimo mensaje d el u su ar io 13 mensaje = t r a c k e r . l a t e s t m e s s a g e [’ text ’ ] 14 15 #Se abre e l dat ase t y se obtienen l o s datos d el array 16 with open ( ’ procesosJSON . json ’ ,’ r ’ ,enc odin g =’ u t f 8’) as f i l e : 17 dataProceso = json . load ( f i l e ) 18 19 maxiProceso = −1 20 21 #Buscamos e l apartado que tenga un mayor p orc en taj e de s i m i l i t u d e ntr e 22 l o s elementos de l array y nombre tramite 23 f o r i in range ( 15 ): 24 pr ob abi li dad = fuz z . t o k e n s e t r a t i o ( mensaje , 25 dataProceso [’arrayProceso ’ ] [ i]) 26 if probabilidad >maxiProceso : 27 maxiProceso = pr oba bi l id ad 28 29 30 i f ( nombre tramite !=NULL and maxiProceso >50 ): 31 #Se abre e l d at aset y se obtienen l o s datos d el array 32 with open ( ’ tramitesJSON . json ’ ,’ r ’ ,en codi ng =’ u t f 8’) as f i l e : 33 data = jso n . load ( f i l e ) 34 35 maxi = −1 36 pos = 0 37 38 #Buscamos e l apartado que tenga un mayor p or cen ta je de s i m i l i t u d 39 entr e e l a l i a s y nombre tramite 40 f o r i in range ( 15 ): 41 Token Set Ratio = fuz z . t o k e n s e t r a t i o ( nombre tramite , 42 data [’arrayTramites ’ ] [ i] [ ’ a l i a s ’ ]) 43 i f Token Set Ratio >maxi : 44 maxi = Token Set Ratio 45 pos = i 46 47 48 #Se devuelve e l v alo r s i e l p orc en taj e es mayor que 50 49 i f maxi >50 : 50 re s pu e s ta = data [’arrayTramites ’ ] [ pos ] [ ’ proceso ’ ] 51 dis p a t c her . u tte r me ssage ( res p ues t a ) 52 53 e l s e : 54 dis pat che r . utt er mess age ( ”Lo si en to , me podrias r e p e t i r e l 55 tra mi te d el que q u i e r e s i nf o rm a rt e ? Recuerda que t ie ne n que s e r 56 t ra m it es de l a Sede E l e c t r o n i c a ” ) 57 58 return [Sl otS et ( ”nombre tramite”,NULL) ] 59 60 e l s e : 61 d isp atc her . u tte r me ssa ge ( ”Lo sie nt o , me po dr ia s r e p e t i r e l 62 tra mi te d el que q u i e r e s i nf o rm a rt e ? Recuerda que t ie ne n que s e r 63 t ra m it es de l a Sede E l e c t r o n i c a ” ) 64 return [ ] 36 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto Algoritmo 4.10: Clase Action Filtro 1 c l a s s A ct ionFilt ro ( Action ) : 2 3 #Donde s e ad ju di ca e l nombre de l a f u n c i ´on 4 def name( s e l f ) −>Text : 5 return ”action proceso” 6 7 def run ( s e l f ,dispatcher :CollectingDispatcher ,tracker :Tracker , 8 domain :Dict [Text ,Any ])−>L i s t [Dict [Text ,Any ] ] : 9 #Se ob ti ene e l v alo r de l a entidad ”nombre tramite ” 10 nombre tramite = tr ac k e r . g e t s l o t ( ”nombre tramite”) 11 12 #Se ob ti ene e l ultimo mensaje d el u su ar io 13 mensaje = t r a c k e r . l a t e s t m e s s a g e [’ text ’ ] 14 15 #Se c a l c u l a e l p o rc en ta je de semejanza en tre e l ultimo mensaje y e l s l o t 16 pr oba bi lid ad = fuz z . t o k e n s e t r a t i o ( mensaje ,nombre tramite) 17 18 i f ( nombre tramite !=NULL and pr ob a bi lid ad >50 ): 19 #Se abre e l d at aset y se obtienen l o s datos d el array 20 with open ( ’ tramitesJSON . json ’ ,’ r ’ ,encoding =’ u t f 8’ ) as f i l e : 21 data = jso n . load ( f i l e ) 22 23 maxi = −1 24 25 #Buscamos e l apartado que tenga un mayor p or cen ta je de s i m i l i t u d 26 entr e e l a l i a s y nombre tramite 27 f o r i in range ( 15 ): 28 Token Set Ratio = fuz z . t o k e n s e t r a t i o ( nombre tramite , 29 data [’arrayTramites ’ ] [ i] [ ’ a l i a s ’ ]) 30 i f Token Set Ratio >maxi : 31 maxi = Token Set Ratio 32 33 34 #Se devuelve e l v alo r s i e l p orc en taj e es mayor que 50 35 i f maxi >50 : 36 dis p a t c her . ut ter mes sage 37 ( ”Y que me q u i e r e s c o n s ul t a r sobre e s t e t ra mi te : \n” + 38 ”−D o cu me n ta c i n n e c e s a r i a \n” + 39 ”−Precio de l t r m i t e \n” + 40 ”−Como p e d i r l o ?\n” ) 41 42 e l s e : 43 dis pat che r . utt er mess age ( ”Lo si en to , me podrias r e p e t i r e l 44 tra mi te d el que q u i e r e s i nf o rm a rt e ? Recuerda que t ie ne n que s e r 45 t ra m it es de l a Sede E l e c t r o n i c a ” ) 46 e l s e : 47 d isp atc her . u tte r me ssa ge ( ”Lo sie nt o , me po dr ia s r e p e t i r e l 48 tra mi te d el que q u i e r e s i nf o rm a rt e ? Recuerda que t ie ne n que s e r 49 t ra m it es de l a Sede E l e c t r o n i c a ” ) 50 51 return [ ] La funci´on run de las actions que filtran el proceso, documentaci´on y precio del tr´amite se componen de los siguientes pasos: 1. Extrae el dato de la entidad “nombre tramite” y lo guarda en una variable llamada nombre tramite. 2. Extrae el texto del ´ultimo mensaje y lo guarda en el par´ametro mensaje 3. Se abre el archivo procesosJSON con permisos de lectura y se guarda el contenido en la variable dataProceso, para luego poder acceder a los datos. 4. Despu´es se crea una variable para guardar el m´aximo porcentaje de similitud. 4.3. Funcionamiento de Rasa Stack 37 5. Se recorre el array y se guarda el porcentaje de semejanza entre la variable mensaje y el elemento del array que se est´a analizando. Luego ese valor se compara con la variable de maxiProceso y si es mayor, se actualiza. 6. Se comprueba si el valor de semejanza es mayor de 50 y si nombre tramite no es nulo. Si no cumple estas condiciones, se devuelve un mensaje informando de que no se ha encontrado respuesta a la pregunta del usuario. 7. Si cumple las condiciones anteriormente explicadas, se abre el archivo tramitesJSON con permisos de lectura y se guarda el contenido en la variable data, para luego poder acceder a los datos. 8. Posteriormente se declaran dos variables que van a guardar la posici´on del tr´amite filtrado y el porcentaje m´aximo de semejanza entre la variable nombre tramite y la secci´on de alias. 9. Se recorre el array, que en este caso tiene 15 elementos, y se guarda el porcentaje de semejanza entre la variable nombre variable y la secci´on de alias en Token Set Ratio. Luego este valor se compara con la variable maxi y si es mayor, se actualiza y adem´as se guarda la posici´on. 10. Se comprueba si el porcentaje encontrado es mayor de 50, ya que sino supera ese umbral, no es fiable la respuesta que pueda dar. Si es mayor, primero obtiene el dato de proceso y luego lo devuelve con dispatcher.utter message(respuesta). En caso de que fuera menor o igual a 50, se devuelve un mensaje informando de que no se ha encontrado respuesta a la pregunta del usuario. 11. Finalmente en el return se modifica el valor del slot a nulo, para posteriores b´usquedas. Luego en la funci´on run de la action que filtra el tr´amite por el que se pregunta, tiene unas ligeras modificaciones comparadas con el resto. 1. Extrae el dato de la entidad “nombre tramite” y lo guarda en una variable llamada nombre tramite. 2. Extrae el texto del ´ultimo mensaje y lo guarda en el par´ametro mensaje 3. Calcula la semejanza que hay entre la variable nombre tramite y el ´ultimo mensaje. 4. Luego se comprueba si el nombre tramite no es nulo y adem´as de si el porcentaje de semejanza es mayor que 50. Si no cumple estas condiciones, se devuelve un mensaje informando de que no se ha encontrado respuesta a la pregunta del usuario. Esta comprobaci´on se hace ya que el sistema algunas veces fallaba al captar el tr´amite por el que se preguntaba. 5. Si cumple las condiciones anteriormente explicadas, se abre el archivo tramitesJSON con permisos de lectura y se guarda el contenido en la variable data, para luego poder acceder a los datos. 6. Posteriormente se declaran la variable que guarda el porcentaje m´aximo de semejanza entre la variable nombre tramite y la secci´on de alias. 7. Se recorre el array, que en este caso tiene 15 elementos, y se guarda el porcentaje de semejanza entre la variable nombre variable y la secci´on de alias en Token Set Ratio. Luego este valor se compara con la variable maxi y si es mayor, se actualiza. 44 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto Figura 4.13: Carpeta de trabajo Figura 4.14: Ejemplos de modelos creados Figura 4.15: Ejecutar el asistente por terminal 4.5. Conexi´on con Telegram y Servicio Web Antes de explicar el procedimiento que se ha seguido para realizar las conexiones, hay que tener en cuenta que el servidor de Rasa ejecuta el proyecto de manera local, mientras que Telegram y la p´agina web se ejecutan en la nube. Por tanto se tienen que enlazar las dos ejecuciones mediante el software de ngrok. Es una herramienta que hay que instalarla como zip y posteriormente descomprimirla para su uso. De esta manera, ser´a posible acceder a la terminal ngrok.exe, desde donde se lanzar´a el comando ngrok http 5005, puerto donde se ejecuta localmente el proyecto. Es importante mantener abierto este t´unel mientras se este utilizando el asistente v´ıa Telegram o web, ya que si se cierra ngrok dejar´a de funcionar la conexi´on. 4.5. Conexi´ on con Telegram y Servicio Web 45 En el Algoritmo 4.19 se muestra como proporciona una url operativa durante 8 horas que simula un t´unel al mismo puerto de nuestro localhost. El enlace que se debe de escoger es el https, ya que se debe de realizar una conexi´on segura, y por ejemplo Telegram no acepta enlaces http. Algoritmo 4.19: Ejecuci´on de ngrok 1 ngrok by @inconshreveable 2 3 S e s s io n Status o n l i n e 4 Account Rebeca ( Plan :Free ) 5 Version 2.3.40 6 Region United S t at e s ( us ) 7 Web I n t e r f a c e 8 Forwarding 9 Forwarding 10 Connections t t l opn r t 1r t 5p50 p90 11 000.00 0 .00 0 .00 0 .00 4.5.1. Telegram Como se ha explicado anteriormente, Telegram pone a la disposici´on del usuario la herramienta de The BotFather. Como se ve en la Figura 4.16, esta funcionalidad permite crear un bot de manera sencilla en la que BotFather ir´a haciendo preguntas al usuario de c´omo quiere personalizar su asistente. Figura 4.16: Personalizar bot Los pasos para realizar la conexi´on con Telegram son los siguientes: 1. Crear y personalizar el asistente en Telegram con BotFather. 2. Una vez creado se debe de guardar el API TOKEN y el nombre del asistente en el proyecto de Rasa. 46 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto 3. En el Algoritmo 4.20 se especifica la configuraci´on del archivo creedentials.yml. Se tiene que descomentar el apartado de Telegram y se escriben los datos guardados entre comillas. Acces token →API TOKEN Verify →Nombre del Chabtot webhook url →Mnlace proporcionado por ngrok, a˜nadiendo luego el sufijo de /webhooks/telegram/webhook. Algoritmo 4.20: Conexi´on Telegram 1 telegram : 2 access token : 3 verify :” SedeChatbot ” 4 webhook url : 4. Abrir dos terminales localizadas en la carpeta del proyecto y ejecutar rasa run en una y rasa run actions en la restante. Realizados ya estos pasos se puede pasar a hablar con el asistente v´ıa Telegram. En la Figura 4.17 se ve el formato de una conversaci´on por Telegram. (a) Saludo inicial (b) Informaci´on del Pasaporte Figura 4.17: Resultados en Telegram 4.5. Conexi´ on con Telegram y Servicio Web 47 4.5.2. Servidor Web Para esta opci´on se necesita de ngrok, Github y BotFront, herramientas que se utilizan a manera de prueba, ya que tambi´en se puede utilizar una p´agina de web. Adem´as de que habr´a que realizar peque˜nas modificaciones en el c´odigo para su correcto funcionamiento. Los pasos a seguir son los siguientes: 1. Creamos un repositorio en Github, con el nombre de usuario y el sufijo .github.io. 2. A˜nadimos a ese repositorio nuestro proyecto y adem´as un documento index.html. El resultado del repositorio ser´ıa el que se muestra en la Figura 4.18. Figura 4.18: Repositorio de Github 3. Ahora es el momento de completar el archivo index.html con el dise˜no que se desee para la p´agina web. En este caso se ha utilizado BotFront, un open source en Github sencillo de utilizar y que funciona con el Algoritmo 4.21. Algoritmo 4.21: BotFront Script 1<s c r i p t >!( fu n c tio n ( ) { 2 l e t e = document . createElement ( ” s c r i p t ” ), 3 t = document . head | | document . getElementsByTagName(”head” )[0]; 4 ( e . s r c = 5” https :/ / cdn . j s d e l i v r . net /npm/rasa−webchat@1 . x . x/ l i b / index . j s ” ), 6// Replace 1 . x . x with the v e r s ion that you want 7 ( e . async = ! 0), 8 ( e . onload = ( ) =>{ 9 window . WebChat . d e f a u l t ( 10 { 11 customData :{language :”en” }, 12 socketUrl :” https :/ / bf−b o t fr o n t . development . agents . bot f r o nt . cloud ” , 13 // add other props here 14 }, 15 n u l l 16 ) ; 17 }), 18 t. insertBefore(e,t. firstChild); 19 }) () ; 20 </s c r i p t > El ´unico cambio que habr´ıa que realizar ser´ıa modificar el dato de socketUrl y a˜nadir el enlace de ngrok. 48 Cap´ ıtulo 4. Metodolog´ ıa y an´ alisis del proyecto 4. Pasando al proyecto, hay que descomentar la opci´on de socketio en el archivo de creedentials.yml y escribir las caracter´ısticas del Algoritmo 4.22. Algoritmo 4.22: Conexi´on con Socketio 1 socketio : 2 user message evt :user uttered 3 bot message evt :bot uttered 4 session persistence :true 5. A la hora de ejecutar el asistente, tambi´en habr´a que abrir dos terminales situadas en la carpeta del proyecto, y en una lanzar el comando de rasa run actions y en otra rasa run -m models –enable-api –cors “*”. 6. La Figura 4.19 muestra el resultado de la p´agina→https://nombre-usuario.github.io. (a) Saludo inicial (b) Precio del DNI Figura 4.19: Resultado en web Cap´ıtulo 5 Experimentos y Resultados Para realizar pruebas sobre este proyecto se han elaborado pruebas de estr´es y test sobre el asistente, adem´as de las correspondientes revisiones durante su desarrollo. El primer apartado 5.1 se describe el proceso de realizar pruebas de estr´es con las extensi´on de RESTful Stress. La segunda parte de este capitulo 5.2, se describen tres test que se han programado en python para comprobar el funcionamiento de las acciones y adem´as se presentan las cifras de confianza de los intents. En la ´ultima secci´on 5.3, se mostrar´an resultados de otros proyectos relacionados con Rasa Stack y se har´a una breve comparaci´on con este proyecto. 5.1. Pruebas con la Herramienta RESTful Stress La herramienta RESTful Stress es una extensi´on de Google Chrome que permite analizar el asistente para saber datos de tiempo de respuesta seg´un el n´umero de usuarios conectados a la vez. El funcionamiento de la extensi´on se basa en llamadas HTTP(GET,POST,PUT y DELETE) al endpoint de la API. Los pasos para realizar las pruebas de estr´es son las siguientes: 1. Primero se debe descargar la extensi´on. Simplemente con buscarla en el buscador Google e instalarla, ya se podr´a ejecutar. 2. Se escribe la direcci´on del target, d´onde se realizar´a una petici´on POST. La url que habr´a que indicar ser´a la siguiente: http://localhost:5005/webhooks/rest/webhook. 3. Se rellena el recuadro de request body con el mensaje de prueba. El formato m´as indicado para enviar el mensaje es en JSON y especificando los campos de sender ymessage. 4. Tambi´en se pueden modificar los campos de options. En este caso, el valor de iterations es 1500, el delay es de 100 ms y el timeout de 30000. 5. Para realizar la prueba, se debe de lanzar el siguiente comando por terminal en la carpeta del proyecto: run -m models –enable-api –cors “*” –debug y en paralelo se pincha en el bot´on de play de la aplicacion RESTful. 49 50 Cap´ ıtulo 5. Experimentos y Resultados Figura 5.1: RESTful Stress - Settings En la Figura 5.1 se muestra que el campo del message es ¿Cu´anto vale renovar el dni?, para saber el tiempo que tarda en filtrar el dataset y encontrar la respuesta correcta. Se han realizado al final 235 iteraciones, con los resultados siguientes: Duraci´on media: 2778ms Correctos 235 Duraci´on m´axima: 4603 ms Errores: 0 Duraci´on m´ınima: 2176 ms Warmups: 5 Duraci´on total: 652939 Usuarios: 3 de manera concurrente Estos datos se pueden revisar en las dos pesta˜nas de Performance yChart, mostradas en las Figuras 5.2 y5.3. 5.2. Test Unitarios sobre Actions y Porcentajes de Confianza Para probar el funcionamiento de las tres acciones descritas en el archivo de actions.py, se han realizado tests unitarios con la librer´ıa de unittest de Python. 5.2. Test Unitarios sobre Actions y Porcentajes de Confianza 51 Figura 5.2: RESTful Stress - Performance Figura 5.3: RESTful Stress - Chart Los tests tienen un formato como el que muestra el Algoritmo 5.1 y los tipos que hay son: test filtro precio comprueba si se ha escogido el precio correcto con un un tr´amite ejemplo, que en este caso es la solicitud de la c´edula de inscripci´on test filtro documentation revisa si la documentaci´on filtrada es la correcta para el tr´amite de asignar el NIE. test filtro proceso verifica si se ha obtenido el proceso correcto para el tr´amite de solicitar la tarjeta de estudiante. Para ejecutar estos tests [CC20], se debe de abrir una terminal localizada en el proyecto y llamar al m´etodo de main de la librer´ıa unittest con el siguiente comando python test unitarios.py -v, como se muestra en la Figura 5.4. 52 Cap´ ıtulo 5. Experimentos y Resultados Algoritmo 5.1: Ejemplo del test filtro precio 1 c l a s s TestActions ( u n i t t e s t . TestCase ) : 2 3 def t e s t f i l t r o p r e c i o ( s e l f ) : 4 precio = ” El p r e c i o e s 3 ,27 e ur os ” 5 tramite = ” c edula de i n c r i p c i o n ” 6 7 8 maxi = −1 9 pos = 0 10 11 #Buscamos e l apartado que tenga un mayor p orc en taj e de s i m i l i t u d 12 en tre e l a l i a s y nombre tramite 13 f o r i in range ( 15 ): 14 Token Set Ratio = fu zz . t o k e n s e t r a t i o ( tramite ,data 15 [’arrayTramites ’ ] [ i] [ ’ a l i a s ’ ]) 16 i f Token Set Ratio >maxi : 17 maxi = Token Set Ratio 18 pos = i 19 20 #Se devuelve e l v al or s i e l po rce nt aje es mayor que 50 21 i f maxi >50 : 22 re s pue s ta = data [’arrayTramites ’ ] [ pos ] [ ’ precio ’ ] 23 24 e l s e : 25 re s pue s ta = ”ninguna” 26 27 s e l f . a ssert Eq ua l ( r esp u est a ,precio ,’ Error al encontrar e l prec io ’ ) Figura 5.4: Ejecuci´on de los tests unitarios Por otra parte, para saber sobre los porcentajes de confianza de cada intent [PG+20], se ha utilizado los ficheros de validaci´on que se encuentran en la carpeta de results. En un principio cuando se crea el proyecto, esta carpeta no existe. Por tanto, para evaluar el modelo para la clasificaci´on de la intenci´on y extracci´on de entidades se debe de escribir rasa test por la terminal situada en la carpeta del proyecto. Este comando crear´a la carpeta de results, con varios archivos de datos analizando el asistente. Los archivos que se quieren destacar para analizar los resultados son: intent errors.json intent successes.json Como indica su nombre, en el primero se encuentran los errores posibles que pueden aparecer en el asistente, mientras que en el segundo archivo se obtienen los intents correctos. En la Figura 5.5 se muestra el contenido del fichero de errores con sus correspondientes predicciones. 5.3. Comparaci´ on de Resultado Obtenidos 53 Figura 5.5: Archivo intent errors.json Y en intent successes.json se han analizado los porcentajes de confianza de los diez primeros intents, con sus respectivas frases de ejemplos. En la Tabla 5.1 se han recopilado los resultado obtenidos. Intenci´on Confianza media start 0.96 despedir 0.90 confirmar 0.92 negar 0.84 preguntas-infoSede 0.90 preguntas-gestiones 0.78 preguntas-certificados 0.88 preguntas-firmaElec 0.76 preguntas-extranjeria 0.76 pregunta-reagrupacion 0.94 Tabla 5.1: Resultados del archivo intent successes.json Se puede apreciar que los valores son altos debido al gran n´umero de ejemplos que se han a˜nadido a cada intenci´on. 5.3. Comparaci´on de Resultado Obtenidos En el trabajo de Rasa framwork: ´ An´alisis e implementaci´on de un chatbot [CC20] se han realizado pruebas de estr´es con la misma herramienta que se ha visto anteriormente, Cap´ıtulo 8 Conclusions and Future Work 8.1. Conclusions The aim of this work was to program an assistant that would help users solve the doubts they had within the National Police Electronic Headquarters. Initially, the sections to be covered were not defined. Nevertheless, the bot responds to every task concerning immigration matters, and renewal or application for a passport or ID card. Several tools capable of developing conversational assistants have been researched, concluding that the technology to be used would be Rasa Stack, as a simple yet complete tool. In addition to this, it is a tool that allows you to program all the functionalities that an assistant has, while other applications were more limited and had little support. Personally, developing a conversational assistant with an application that was unknown to me has been quite a challenge. But on the other hand, it has been an interesting process to get to know this kind of application and, above all, to learn throughout these six months how to use it. Additionally, I have been able to immerse myself in some of the procedures that are carried out within the environment of the National Police Electronic Headquarters. I feel this has made me grow as a computer engineer, carrying out a project requested by the National Police themselves. I also liked to begin my work within the field of Artificial Intelligence (AI); one that I had not yet been able to study during my degree. This is, undoubtedly, a tool that will have more importance and prominence in the future, since AI will be paramount in future technology, and what better way than to help humanity. I am glad to have been part of this project and, above all, to help solve some of the doubts that might arise for users within the Electronic Headquarters. 8.2. Future Work Thanks to the requirements that characterise Rasa, it has been possible to successfully develop an assistant, suitable for future works that shall be carried out on it. However, it can be improved in the following ways: Adding more intents or entities, in order to answer more questions about other procedures available at the Electronic Headquarters. Develop the graphic part of the assistant 61 62 Cap´ ıtulo 8. Conclusions and Future Work Link the bot to other applications, i.e., WhatsApp. Automate tool deployment. Ap´endice A Informaci´on sobre Rasa Stack A.1. Componentes de Rasa Stack A.1.1. Entidades, Intents y Slots Las entidades o entities son cr´ıticas en el caso de que se quiera dar una respuesta personalizada al usuario. Por ejemplo, si tenemos un intent asociado a consultar las reuniones que tiene cierta persona en un d´ıa, uno de los ejemplos podr´ıa ser “¿Qu´e reuniones tiene Marcos {nombre persona}el d´ıa 23 de mayo{fecha}?”, donde nombre persona yfecha es una entity que servir´a para buscar las reuniones que tiene esa persona en ese d´ıa concreto. Por otro lado, los intents son las intenciones que tiene el usuario cuando interact´ua con el chatbot. El usuario puede utilizar diferentes expresiones y palabras para declarar el mismo intent. Por ejemplo, una persona puede saludar de varias maneras, diciendo hola, hey, c´omo est´as, etc. Algoritmo A.1: Intents 1 nlu : 2−intent :start 3 examples :| 4−Hola 5−Buenos d´ı as 6−Buenas 7−Muy buenas 8−start 9−/ s t a r t 10 11 −intent :de spe dir 12 examples :| 13 −Hasta luego 14 −Nos vemos 15 −Adi´o s 16 −Chao 17 −Ten buen d´ı a Si se quisiera almacenar datos de una conversaci´on, se tienen que utilizar los slots. Son elementos parecidos a las entidades pero tienen la capacidad de guardar palabras claves de los mensajes del usuario. Por ejemplo, si se crea un chatbot con el que se puede pedir 63 64 Cap´ ıtulo A. Informaci´ on sobre Rasa Stack cita m´edica; la fecha, la hora y el nombre del cliente ser´ıan slots, porque son datos que interesan guardar. Algoritmo A.2: Slots 1 slots : 2 nombre tramite : 3 type :text A.1.2. Sin´onimos y Tablas de B´usqueda Tambi´en existen la opci´on de utilizar sin´onimos y tablas de b´usqueda a la hora de analizar un intent del usuario. Los sin´onimos se aplican para definir dos entidades que tienen el mismo significado Estos elementos suelen ser usados para tratar abreviaturas o cuando se usar´a para la entrada de una Action. Las tablas de b´usqueda son muy ´utiles para reducir el n´umero de ejemplos que aportamos al asistente para entrenar. Permiten definir palabras que pertenezcan al mismo grupo aunque tengan significados diferentes. Se consideran grupo cuando se obtiene la misma respuesta por parte del chatbot. A.1.3. Historias para el Entrenamiento del NLU Las historias de Rasa [GS+19] sirven para entrenar los modelos de gesti´on de di´alogo del proyecto. Representan conversaciones entre un usuario y un asistente; adem´as tienen una estructura donde las entradas del usuario se expresan como intents mientras que los mensajes del asistente se expresan como nombres de acci´on o respuestas correspondientes (utterances). Los intentos del usuario no tienen ninguna marca delante, simplemente se identifican con la palabra intent y las respuestas del bot se nombran con la palabra action. Algoritmo A.3: Stories 1 s t o r i e s : 2 3−st o ry :despues−ok 4 s t e p s : 5−intent :confirmar 6−ac t ion :utter volver 7−intent :negar 8−ac t ion :utter despedir 9 10 −st o ry :despues−ok2 11 s t e p s : 12 −intent :confirmar 13 −ac t ion :utter volver 14 −intent :confirmar 15 −ac t ion :utter cuentame A.2. Estructura de Rasa Stack 65 A.2. Estructura de Rasa Stack Cuando se crea un proyecto de Rasa desde la terminal, tiene un dise˜no inicial formado por los siguientes ficheros: nlu.yml →apartado donde se clasifican los intentos con las frases que tiene para entrenar el chatbot rules.yml →secci´on donde se especifica el patr´on que debe de seguir el chatbot para dar una respuesta en un espec´ıfico grupo de intentos. stories.yml →parte donde se escriben todos los flujos de las historias, para que el chatbot pueda seguir estos patrones. test stories.yml →su funci´on es servir de gu´ıa para realizar pruebas sobre el chatbot. Muestra como el patr´on que debes de seguir y lo que debe de ir respondiendo el chatbot. domain.yml →secci´on donde se encuentran la respuestas del chatbot que da a ante las interacciones del usuario. creedentials.yml →parte d´onde se especifica el token y los datos necesarios para realizar una conexi´on con un enlace web externo. actions.py →el objetivo de esta secci´on es la creaci´on de funciones que permitan automatizar las respuestas por parte del asistente y adem´as sean respuestas m´as personalizadas ante el mensaje del usuario. Bibliograf´ıa [AA15] Bayan AbuShawar and Eric Atwell. Alice chatbot: Trials and outputs. Computaci´on y Sistemas, 19(4):625–632, 2015. [AC21] Luis Estuardo Azurdia C´arcamo. Definir una gu´ıa te´orica y pr´actica para poder implementar asistentes PhD thesis, Universidad de San Carlos de Guatemala, 2021. [Ali16] Abder-Rahman Ali. How to work with json data using python. https: // acortar. link/ FU2lCW , 2016. [ara20] aravindpai. What is tokenization in nlp? here’s all you need to know. t. ly/ hRJG , 2020. [ARA22] ARAG. Arag, pionera en el lanzamiento de un chatbot de seguros de viaje en espa˜na. https: // www. arag. es/ conocenos/ sala-de-prensa/ 00165/ , 2022. [Bab21] Babylon. Babylon app. https: // www. babylonhealth. com/ en-us/ what-we-offer/ chatbot , 2021. [BBV22] BBVA. ¿c´omo es blue, el nuevo asistente virtual de bbva? https: // www. bbva. es/ finanzas-vistazo/ ef/ banca-digital/ como-es-blue-el-nuevo-asistente-virtual-de-bbva. html , 2022. [CC20] ´ Alvaro Castillo Cabero. Rasa framework-an´alisis e implementaci´on de un chatbot. B.S. thesis, Universitat Polit`ecnica de Catalunya, 2020. [CI22] Github CI. Components rasa docs. https: // rasa. com/ docs/ rasa/ components/ #language-models , 2022. [CIO17] CIO. La universidad ceu implanta un bot que mejora la relaci´on con sus alumnos. https: // www. ciospain. es/ educacion/ la-universidad-ceu-implanta-un-bot-que-mejora-la-relacion-con-sus-alumnos , 2017. [Com19] Chat Compose. Chatbots para la educaci´on: Aplicaciones y beneficios. https: // www. chatcompose. com/ chatbots-educacion. html , 2019. [cru22] crunchbase. Youper. https: // www. crunchbase. com/ organization/ youper/ technology , 2022. [DCLT18] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805, 2018. [Der10] OV Deryugina. Chatterbots. Scientific and Technical Information Processing, 37(2):143–147, 2010. [Die21] Erin Dietsche. Northwell health teams up with conversa for ai patient engagement chatbot. https: // medcitynews. com/ 2018/ 10/ northwell-health-conversa/ ?rf= 1, 2021. 67 68 BIBLIOGRAF´ IA [dit18] ditrendia. Chatbots: estad´ısticas y ejemplos de uso en banca y seguros. https: // mktefa. ditrendia. es/ blog/ chatbots-banca-y-seguros , 2018. [dV21] Gil del Valle. Top 5 de los mejores chatbots de asistencia m´edica. https: // acortar. link/ MZFAM3, 2020-2021. [GBFAMC18] Guillem Garcia Brustenga, Marc Fuertes Alpiste, and N´uria Molas Castells. Briefing paper: los chatbots en educaci´on. 2018. [Git22] Github. Websites for you and your projects. https: // pages. github. com/ , 2022. [GLPC21] Maikol Javier Gilces Le´on and Christian Fernando Pin Cevallos. Duplicidad de c´odigo en stack overflow en espa˜nol. B.S. thesis, Universidad de Guayaquil. Facultad de Ciencias Matem´aticas y F´ısicas . .. , 2021. [Gro21] IT Digital Media Group. La banca ahorrar´a hasta 7.300 millones de d´olares a trav´es de los chatbots. https: // www. ittrends. es/ negocios/ 2019/ 02/ la-banca-ahorrara-hasta-7300-millones-de-dolares-a-traves-de-los-chatbots , 2021. [GS+19] Jos´e Mar´ıa Guti´errez Siliceo et al. Desarrollo de chatbots con entornos de c´odigo abierto. 2019. [HD16] Pol Hern´andez Delgado. Programaci´on de un [ro] bot para una consulta interactiva de la informaci´on de un proyecto. 2016. [Hea22] Healthily. Healthily. https: // www. livehealthily. com/ , 2017-2022. [Her21] Noelia Hern´andez. Los chatbots: un nuevo recurso para el aula. https: // acortar. link/ pzbr9q , 2020-2021. [ith21] ipglobal tech hub. ¿c´omo entiende un bot? nlu en rasa. https: // www. ipglobal. es/ como-entiende-un-bot-nlu-en-rasa/ , 2021. [Jan17] Srini Janarthanam. Hands-on chatbots and conversational UI development: build chatbots and voice user interfaces with Chatfuel, Dialogflow, Microsoft Bot Framework, Twilio, and Alexa Skills. Packt Publishing Ltd, 2017. [Joa21] Matthieu Joannon. Botfront. https: // github. com/ botfront/ rasa-webchat , 2021. [kee21a] keen.ethics. Oneremission - making the lives of cancer survivors easier. https: // keenethics. com/ project-one-remission , 2021. [kee21b] keen.ethics. Youper. https: // www. youper. ai/ , 2021. [KKKS17] Diksha Khurana, Aditya Koli, Kiran Khatter, and Sukhdev Singh. Natural language processing: State of the art, current trends and challenges. arXiv preprint arXiv:1708.05148, 2017. [LBP+18] Tarun Lalwani, Shashank Bhalotia, Ashish Pal, Vasundhara Rathod, and Shreya Bisen. Implementation of a chatbot system using ai and nlp. International Journal of Innovative Research in Computer Science & Technology (IJIRCST) Volume-6, Issue-3, 2018. [L´o20] Jos´e Mar´ıa L´opez. Crea tu propio bot de telegram sin saber programar. https: // blogthinkbig. com/ crear-bot-de-telegram-botfather/ , 2020. [Nac22] Policia Nacional. Sede electr´onica del cuerpo nacional de polic´ıa. https: // sede. policia. gob. es/ portalCiudadano/ , 2022. [NEW18] Allstate NEWSROOM. Just ask abie: Allstate business insurance shares an innovative tool to help small business owners consumers with top-of-mind questions. t. ly/ rSAx , 2018. BIBLIOGRAF´ IA 69 [One22] Capital One. Meet eno. https: // www. capitalone. com/ digital/ eno/ , 2022. [oT17] Massachusetts Institute of Technology. Babylon app. https: // www. babylonhealth. com/ en-us/ what-we-offer/ chatbot , 2017. [PA+19] Sof Pizarro Arbelo et al. Bot conversacional detector de sentimientos. 2019. [P ´ APGMAV21] Daniel Povedano ´ Alvarez, Javier Portela Garc´ıa-Miguel, and Esteban Alejandro Armas Vega. Estudio de la percepci´on p´ublica de la vacuna contra la covid-19 mediante t´ecnicas de pln y de aprendizaje autom´atico. 2021. [PCFR16] Maria Jo˜ao Pereira, Lu´ısa Coheur, Pedro Fialho, and Ricardo Ribeiro. Chatbots’ greetings to human-computer communication. arXiv preprint arXiv:1609.06479, 2016. [PG+20] Ver´onica Pinilla G´omez et al. Dise˜no e implementaci´on de un chatbot para el software de idbox. 2020. [PG21] Marcos Pino Gamazo. Desarrollo de un chatbot para p´ublico infantil para clasificar sonidos del cielo. versi´on 2. 2021. [RAMI17] AM Rahman, Abdullah Al Mamun, and Alma Islam. Programming challenges of chatbot: Current and future prospective. In 2017 IEEE Region 10 Humanitarian Technology Conference (R10-HTC), pages 75–78. IEEE, 2017. [Rob22] SoftBanck Robotics. Pepper y nao, robots para la ense˜nanza. https: // www. softbankrobotics. com/ emea/ es/ pepper-and-nao-robots-education , 2022. [SSA+18] Yasir Ali Solangi, Zulfiqar Ali Solangi, Samreen Aarain, Amna Abro, Ghulam Ali Mallah, and Asadullah Shah. Review on natural language processing (nlp) and its toolkits for opinion mining and sentiment analysis. In 2018 IEEE 5th International Conference on Engineering Technologies and Applied Sciences (ICETAS), pages 1–4. IEEE, 2018. [ST20] Siddhant Singh and Hardeo K Thakur. Survey of various ai chatbots based on technology used. In 2020 8th International Conference on Reliability, Infocom Technologies and Optimization (Trends and Future Directions)(ICRITO), pages 1074–1079. IEEE, 2020. [Tea21] Inbenta Team. Chatbots bancarios: un imprescindible para la atenci´on a cliente. https: // acortar. link/ uMs0We , 2021. [TH50] Alan M Turing and J Haugeland. Computing machinery and intelligence. The Turing Test: Verbal Behavior as the Hallmark of Intelligence, pages 29–56, 1950. [VLRL19] Rub´en Dar´ıo Villamizar Laguado and Daniel Fernando Rico Le´on. Chatbot para la b´usqueda y comparaci´on de productos tecnol´ogicos a trav´es de la plataforma messenger. 2019. [Wei66] Joseph Weizenbaum. Eliza—a computer program for the study of natural language communication between man and machine. Communications of the ACM, 9(1):36–45, 1966.