Logo Studenta

TFG_JORGE_JUAN_FERNANDEZ_SANTIAGO

¡Este material tiene más páginas!

Vista previa del material en texto

Universidad Politécnica 
de Madrid 
Escuela Técnica Superior de 
Ingenieros Informáticos 
 
Grado en Ingeniería Informática 
 
 
Trabajo Fin de Grado 
 
Desarrollo de Chat-bot para Plataforma 
Basada en Moodle Orientada a 
Innovación Educativa 
 
 
 
 
 
 
 
Autor: Jorge Juan Fernández Santiago 
Tutor: César Benavente Peces 
Madrid, junio de 2022
 
 
 
i 
 
Este Trabajo Fin de Grado se ha depositado en la ETSI Informáticos de la 
Universidad Politécnica de Madrid para su defensa. 
Trabajo Fin de Grado 
 
Grado en Ingeniería Informática 
 
Título: Desarrollo de Chat-bot para Plataforma Basada en Moodle Orientada a 
Innovación Educativa 
 
Junio 2022 
 
Autor: Jorge Juan Fernández Santiago 
 
Tutor: 
César Benavente Peces 
Arquitectura y Tecnología de Sistemas Informáticos 
ETSI Informáticos 
Universidad Politécnica de Madrid 
 
 
 
 
ii 
 
Resumen 
El Proyecto consiste en el desarrollo de un sistema basado en un chat-bot y su 
integración en la plataforma educativa Moodle, con el objetivo de dar respuesta 
a posibles solicitudes de los alumnos, siendo éstas expresadas en lenguaje 
natural (lenguaje humano). 
El desarrollo de dicho sistema se ha llevado a cabo utilizando las últimas 
tecnologías en Procesamiento de Lenguaje Natural, Comprensión del Lenguaje 
Natural, Recuperación de Información, Aprendizaje automático y Redes 
neuronales. 
La arquitectura elegida para la implementación del sistema sigue una 
arquitectura multicapa. Para el desarrollo de la capa de interfaz de usuario 
integrada en Moodle, se han utilizado los lenguajes HTML y JavaScript; para la 
capa de servicios se ha utilizado el servidor web Nginx; para la capa de negocio 
se ha utilizado Python como lenguaje de programación sobre el framework 
Django y requiriendo el uso de librerías como SpaCy, Keras o Sklearn; y para la 
capa de datos se ha utilizado como repositorio PostgreSQL. Además, se ha 
utilizado la tecnología Docker para la generación de contenedores 
autodesplegables de forma que el sistema se pueda ejecutar en cualquier tipo 
de sistema operativo. 
Se han completado todas las fases del desarrollo basado en metodología 
Waterfall, desde el análisis y definición de requisitos, hasta las pruebas de 
aceptación, pasando por el diseño y la implementación (codificación del software, 
realización de pruebas unitarias y búsqueda de fallos). 
 
 
 
 
iii 
 
Abstract 
The project consists of the development of a system based on a chat-bot and its 
integration into the Moodle educational platform, with the aim of responding to 
requests from students, these being expressed in natural language (human 
language). 
The development of this system has been conducted using the latest 
technologies in Natural Language Processing, Natural Language Understanding, 
Information Retrieval, Machine Learning and Neural Networks. 
The architecture chosen for the implementation of the system follows a multi-
layer architecture. For the development of the user interface layer integrated in 
Moodle, HTML and JavaScript languages have been used; for the services layer, 
the Nginx web server has been used; for the business layer, Python has been 
used as programming language on the Django framework and requiring the use 
of libraries such as SpaCy, Keras or Sklearn; and for the data layer, PostgreSQL 
has been used as repository. In addition, Docker technology has been used for 
the generation of self-deployable containers so that the system can run on any 
type of operating system. 
All phases of development based on Waterfall methodology have been completed, 
from requirements analysis and definition to acceptance testing, through design 
and implementation (software coding, unit testing and fault finding). 
 
 
 
iv 
 
Tabla de contenidos 
Resumen ................................................................................................ ii 
Abstract ................................................................................................. iii 
1 Introducción ......................................................................................1 
1.1 Objetivos ............................................................................................ 1 
1.1.1 Búsqueda de datos de contacto: ................................................... 2 
1.1.2 Respuesta a preguntas frecuentes de foros o exámenes: .............. 2 
1.1.3 Registrar tareas/alertas en el calendario de Moodle: .................... 3 
2 Marco teórico ....................................................................................4 
2.1 Chat-bots ........................................................................................... 4 
2.1.1 Chat-bots de ITR (Respuesta de Interacción de Texto) .................. 4 
2.1.2 Chat-bots de reconocimiento de palabras claves .......................... 5 
2.1.3 Chat-bots de aprendizaje automático ........................................... 5 
2.2 Inteligencia Artificial (IA) .................................................................... 5 
2.2.1 Procesamiento del Lenguaje Natural (PLN) [1]: ............................. 6 
2.2.1.1 Limpieza ................................................................................... 6 
2.2.1.2 Tokenización: ............................................................................ 6 
2.2.1.3 Filtrado de palabras vacías: ...................................................... 7 
2.2.1.4 Derivación: ............................................................................... 7 
2.2.1.5 Lematización: ............................................................................ 7 
2.2.1.6 Etiquetado: ............................................................................... 7 
2.2.2 Comprensión del Lenguaje Natural (CLN) [2]: ............................... 7 
2.2.3 Generación del Lenguaje Natural (GLN) [3]: .................................. 8 
2.2.4 Recuperación de información (RI) ................................................. 8 
2.2.4.1 Modelo booleano ....................................................................... 8 
2.2.4.2 Modelo de espacio vectorial ....................................................... 9 
2.2.4.3 Modelo probabilístico .............................................................. 11 
2.2.5 Aprendizaje automático – Machine Learning ............................... 11 
2.2.5.1 Aprendizaje supervisado ......................................................... 11 
2.2.5.2 Aprendizaje no supervisado .................................................... 12 
2.2.5.3 Aprendizaje por refuerzo ......................................................... 14 
2.2.6 Redes neuronales ....................................................................... 14 
2.2.6.1 Tipos según arquitectura ........................................................ 15 
2.2.6.2 Tipos según algoritmo de aprendizaje ..................................... 18 
2.3 Moodle ............................................................................................. 19 
 
 
 
v 
 
2.3.1 Arquitectura de Moodle [6] ......................................................... 19 
2.3.1.1 Capa de vista: ......................................................................... 19 
2.3.1.2 Capa del controlador: .............................................................. 20 
2.3.1.3 Capa de modelo: ..................................................................... 20 
2.4 Python .............................................................................................. 20 
2.4.1 SpaCy [7] ................................................................................... 20 
2.4.2 Natural Languaje Toolkit (NLTK) [8] ........................................... 21 
2.4.3 Scikit-learn [9] ........................................................................... 21 
2.4.4 Keras [10] .................................................................................. 223 Arquitectura .................................................................................... 23 
3.1 Frontend .......................................................................................... 23 
3.2 Backend ........................................................................................... 23 
3.2.1 Tecnologías ................................................................................ 24 
3.2.1.1 Docker [11] ............................................................................. 24 
3.2.1.2 Nginx [12] ............................................................................... 24 
3.2.1.3 Django [13] ............................................................................. 24 
3.2.1.4 PostgreSQL [14] ...................................................................... 25 
3.2.2 Estructura ................................................................................. 26 
4 Desarrollo ........................................................................................ 28 
4.1 Estructura de directorios .................................................................. 28 
4.1.1 Carpeta Moodle .......................................................................... 28 
4.1.2 Carpeta Código .......................................................................... 28 
4.1.2.1 Carpeta web ............................................................................ 28 
4.1.2.2 Carpeta src ............................................................................. 28 
4.1.2.3 Paquete chat_bot .................................................................... 29 
4.2 Diagramas de flujo ........................................................................... 30 
4.2.1 Diagrama del sistema ................................................................. 30 
4.2.2 Diagrama módulo PLN ............................................................... 30 
4.2.3 Diagrama módulo CLN ............................................................... 31 
4.2.4 Diagrama módulo NER ............................................................... 31 
4.2.5 Diagrama módulo principal ........................................................ 31 
4.3 Interfaz de usuario ........................................................................... 32 
4.4 Módulo de entrenamiento ................................................................. 33 
4.5 Modulo principal .............................................................................. 34 
4.6 Módulo PLN ...................................................................................... 35 
4.7 Módulo CLN ..................................................................................... 36 
 
 
 
vi 
 
4.8 Módulo NER ..................................................................................... 37 
4.9 Creación del CORE ........................................................................... 38 
4.9.1 Mail_information ........................................................................ 38 
4.9.2 Office_information ...................................................................... 39 
4.9.3 Telephone_information ............................................................... 39 
4.9.4 Name_information ...................................................................... 39 
4.9.5 Subject_information ................................................................... 39 
4.9.6 Subject_list_information ............................................................. 40 
4.9.7 Frequent-question ...................................................................... 40 
4.9.8 Calendar .................................................................................... 40 
4.10 Ejecución del sistema ....................................................................... 41 
4.11 Pruebas de la funcionalidad ............................................................. 41 
4.11.1 Pruebas unitarias ...................................................................... 41 
4.11.2 Pruebas de integración ............................................................... 42 
4.11.3 Pruebas de campo ...................................................................... 42 
5 Resultados ....................................................................................... 44 
6 Conclusiones ................................................................................... 45 
7 Bibliografía ...................................................................................... 46 
 
 
 
 
 
 
1 
 
 
1 Introducción 
El avance de la tecnología ha llegado hasta tal punto que el uso de ordenadores, 
teléfonos, Internet está prácticamente integrado en la vida cotidiana de la 
mayoría de la sociedad. 
En cualquier colegio, instituto o universidad, ya se trabaja a diario con 
plataformas educativas, esto ya venía encaminado debido a que las nuevas 
generaciones ya están más que acostumbradas al uso de dispositivos 
electrónicos; pero además la pandemia mundial generada por el Covid19 hizo 
imprescindible la modernización y digitalización de la educación, como 
consecuente de las etapas de confinamiento, todo el contacto entre profesores y 
alumnos se comenzó a realizar a través de diferentes plataformas, como por 
ejemplo, Moodle, Teams, etc. 
Esta etapa llevo a muchos alumnos a tener constantemente abierto en una 
pestaña del navegador la plataforma Moodle, necesaria para entrar a clase, 
visualizar las transparencias usadas por el profesor, o incluso realizar exámenes. 
Pero este modelo contenía un problema, la interacción entre alumnos y 
profesores podía llegar a ser especialmente lenta. No es lo mismo poder 
preguntarle una duda a un profesor al finalizar una clase que escribirle un 
mensaje y esperar a que lo lea y te responda, además, generalmente no 
disponías del correo al cual mandar tu pregunta, por lo que desperdicias tiempo 
buscándolo en las guías de aprendizaje, página web de la universidad o en 
correos que te pudiese haber mandado con anterioridad. 
Aquí es donde entra uno de los fines de este proyecto, la implementación de un 
chat-bot que estaría disponible las 24 horas y podría responderte a tus 
preguntas de una manera instantánea. Así, los alumnos obtendrían respuestas 
más fácilmente y los profesores podrían evitar estar atentos a correos de dudas 
una gran parte del tiempo. 
Por lo tanto, el chat-bot estará dirigido a los usuarios de esta plataforma, de 
forma que pueda ayudar y satisfacer las necesidades de los alumnos o 
profesores de manera rápida y eficaz. 
1.1 Objetivos 
El objetivo principal de este proyecto es el desarrollo de un sistema que sea 
capaz de integrar un chat-bot en la plataforma educativa de Moodle. Para lograr 
este objetivo es necesario cumplir diferentes metas. 
Como hitos a conseguir será necesario la investigación individual de diferentes 
campos que componen el proyecto. 
Uno de estos es la plataforma Moodle, es necesario entender el funcionamiento 
de su arquitectura y de las funcionalidades que la componen para poder 
encontrar la mejor manera de incluir el chat-bot dentro de la plataforma. 
Otro de los campos será la Inteligencia Artificial, será necesario entender las 
bases de las ramas principales como, por ejemplo: el lenguaje natural, Machine 
 
 
 
2 
 
Learning, modelos de para la clasificación/predicción de datos y las redes 
neuronales. 
Como ultimo campo, será necesario tener una base de conocimientos sobre 
Python para el desarrollo tanto del chat-bot, como para la implementación de 
una arquitectura que permita una conexión fácil con Moodle. Por ello será 
necesario conocer las posibles librerías que pueden ser usadas en Python para 
el desarrollo de estas actividades. 
Como objetivos específicos, estarían las funcionalidades que puede realizar el 
chat-bot, las cuales son: 
1.1.1 Búsqueda de datos de contacto: 
Esta funcionalidad consiste en que el chat-bot devuelvainformación rápida 
sobre los datos de un profesor, departamento o asignatura. 
Al chat-bot se le podría preguntar por el email de un profesor y te devolvería el 
email institucional guardado en la base de datos. Además de devolver la 
información por un nombre, permitiría también la introducción de solamente el 
cargo que tiene en la escuela o en un departamento específico, y como última 
posible entrada, hacer la pregunta sobre información del coordinador de una 
asignatura o los datos de algún profesor de esta. Con las mismas posibilidades 
de arriba también se encargaría de proporcionar información sobre despachos 
y teléfonos si están disponibles en la base de datos. 
Adicionalmente, si se desconoce el nombre de un cargo de la escuela, 
departamento o asignatura también se podrá preguntar para que el chat-bot te 
responda con la información solicitada. 
En el caso de preguntar por una asignatura el chat-bot podría devolver 
cualquiera de los datos básicos (curso, semestre, créditos, carácter) además de 
poder buscar quien es el coordinador de la asignatura. 
Finalmente disponer de la capacidad de devolver listas de profesores de una 
determinada asignatura y de listas de asignaturas filtrando si son de un 
determinado carácter, curso, semestre o créditos. 
1.1.2 Respuesta a preguntas frecuentes de foros o exámenes: 
Esta funcionalidad consiste en que el chat-bot analice las preguntas frecuentes 
realizadas por los alumnos y contestadas por los profesores. 
El chat-bot incluiría en su entrenamiento las respuestas frecuentes que un 
profesor podría haber creado con anterioridad si prevé que algún alumno podría 
tener dudas sobre algo del trabajo/examen. 
Si un alumno realiza una pregunta que asemeja a que ya está respondida el 
chat-bot devolvería directamente lo especificado por el profesor; en cambio si no 
es capaz de asemejarla a ninguna el chat-bot marcaria la pregunta cómo sin 
responder y la guardaría a la espera de que un profesor la revisase y la incluyera 
en preguntas frecuentes. 
De esta forma el chat-bot evitaría que los alumnos tengan que esperar a que los 
profesores respondan a sus preguntas si ya se han realizado y además evitaría 
que los profesores repitan la misma respuesta una y otra vez. 
 
 
 
3 
 
1.1.3 Registrar tareas/alertas en el calendario de Moodle: 
Esta funcionalidad consiste en que el chat-bot pueda registrar cualquier tipo de 
evento en el calendario personal del usuario de forma rápida y sencilla. 
El chat-bot realizará un análisis del texto introducido por el usuario y obtendrá 
los campos necesarios para guardar el evento deseado. 
Si no es capaz de identificarlos, informará al usuario los datos que le faltan por 
detectar con el fin de que el usuario repita su oración con la nueva información. 
 
 
 
 
 
 
 
4 
 
2 Marco teórico 
En este punto explicaré los conceptos de las técnicas y tecnologías utilizadas 
para el desarrollo del proyecto. 
2.1 Chat-bots 
La definición de un chat-bot es un asistente que se comunica con los usuarios 
a través de mensajes de texto. Se trata de una tecnología que permite al usuario 
mantener una conversación a través de un software que se integra en un 
determinado sistema. 
El sistema está programado para que interactúe con el cliente y le resuelva 
dudas, pero sin que haya una persona física contestando. Tienen la ventaja de 
que están disponibles siempre para resolver las dudas de los usuarios que 
quieran contactar contigo a cualquier hora del día. 
• Algunos de los objetivos del chat-bot son: 
• Ahorrar costes en formación y personal del departamento de atención al 
cliente. 
• Atender las principales dudas y gestiones de los usuarios de manera 
rápida. 
• Posibilitar una interacción muy ágil con el cliente. 
• Atención operativa las 24 horas del día. 
• Atención simultanea de varios usuarios a la vez. 
• Realizar acciones simples como búsquedas de información. 
Para la implementación de este se usan algoritmos desarrollados por la 
Inteligencia Artificial y de Machine Learning que permiten que el chat-bot sea 
capaz de aprender. Pueden llegar a intuir los hábitos y entender los gustos y 
preferencias de los usuarios. 
Existen diferentes tipos de chat-bots en base a las características que poseen y 
las funcionalidades que pueden realizar: 
2.1.1 Chat-bots de ITR (Respuesta de Interacción de Texto) 
Estos chat-bots son también llamados Dumb chatbots debido a que no requieren 
la aplicación de Inteligencia Artificial. 
Este tipo de software funciona a través de una lógica secuencial, siguiendo 
los comandos simples que el programador introduce en él previamente. 
Para ello el chat-bot usa árboles de decisión ya definidos previamente que 
marcan el rumbo de la conversación de manera que el usuario no puede 
interactuar libremente pues de las opciones que le presenta el sistema deberá 
elegir una para recibir una respuesta. 
Es muy útil de cara a que el usuario o cliente pueda realizar una autogestión 
de algunos servicios sin necesidad de atención humana, como reportar 
incidencias. 
Desarrollar este tipo de chat-bots es más sencillo y el tiempo de programación 
es menor, por lo que su coste también suele ser más económico. 
 
 
 
5 
 
2.1.2 Chat-bots de reconocimiento de palabras claves 
Esta categoría de chat-bots es de complejidad intermedia debido a que tampoco 
utilizan Inteligencia Artificial, pero sí que funcionan identificando palabras 
claves en el entorno conversacional durante las interacciones con el cliente. 
Según la ordenación de las palabras clave se emite una respuesta u otra al 
usuario. 
Antes de su configuración, es esencial crear un mapa semántico de las palabras 
clave que más se dan en las conversaciones con atención al cliente. Una vez se 
tiene el mapa semántico, se puede refinar el flujo de conversación ampliando 
variables y combinaciones de las palabras clave. 
A continuación, proporcionan respuestas programadas ante los conjuntos de 
palabras claves. 
2.1.3 Chat-bots de aprendizaje automático 
Estos chat-bots si basan su funcionamiento en la Inteligencia Artificial y el 
Machine Learning y por ello también se les conoce como Smart chatbots. 
Debido al uso de estas tecnologías son capaces de entender y procesar el 
lenguaje humano a un nivel más complejo consiguiendo interpretar la intención 
del usuario y el contexto. Además, también pueden generar respuestas 
ajustadas a esa conversación, logrando mayor naturalidad. 
Ya que son chat-bots contextuales y cognitivos que aprenden de las 
interacciones pasadas ofrecen una conversación más dinámica y real con 
respuestas personalizadas. 
En definitiva, son cada vez más similares a la experiencia de conversación con 
un humano. 
2.2 Inteligencia Artificial (IA) 
La Inteligencia Artificial es, en informática, la inteligencia expresada 
por máquinas, sus procesadores y sus softwares, que serían los análogos 
al cuerpo, el cerebro y la mente, respectivamente, a diferencia de la inteligencia 
natural demostrada por humanos y ciertos animales con cerebros complejos. 
La IA es la combinación de algoritmos planteados con el propósito de crear 
máquinas que presenten las mismas capacidades que el ser humano. Una 
tecnología que todavía resulta lejana y misteriosa, pero que desde hace unos 
años está presente en nuestro día a día a todas horas. 
Los chat-bots usan la IA para generar conversaciones más humanas con los 
usuarios. Así, por un lado, estas herramientas aspiran a ser capaces 
de reconocer emociones humanas y responder en consonancia a través de 
capacidades de procesamiento del lenguaje los cuales utilizan tecnologías 
basadas en varios de los principios del lenguaje natural que se verán a 
continuación. 
A su vez, los chat-bots con IA conversacional pretenden también ser capaces 
de aprender a partir de las conversaciones que mantienen, gracias a la 
aplicación del Machine Learning. 
Algunas de las ramas principales de la IA son estas: 
 
 
 
6 
 
2.2.1 Procesamiento del LenguajeNatural (PLN) [1]: 
El procesamiento del lenguaje natural es también conocido como computación 
lingüística y lo que permite es que el ordenador interprete el lenguaje de una 
persona con aprendizaje y razonamiento. 
Según la definición de IBM, el procesamiento de lenguaje natural es la rama de 
la informática que se ocupa de dotar a los ordenadores de la capacidad de 
entender lenguaje hablado y escrito del mismo modo que los seres humanos. 
Inicialmente los primeros modelos de análisis de PLN eran simbólicos y se 
basaban en codificar manualmente las reglas del lenguaje. Años después, en 
lugar de escribir conjuntos de reglas (y excepciones) los sistemas de PLN 
comenzaron a usar algoritmos de inferencia estadística para analizar otros 
textos y realizar comparaciones en busca de patrones. En la actualidad, se 
utilizan sistemas que combinan los modelos estadísticos y simbólicos. 
Los niveles de comprensión que pueden realizar estos sistemas son: 
• Fonéticos: forma en que las palabras son pronunciadas. 
• Morfológicos: estudia la estructura de las palabras para delimitarlas y 
clasificarlas. 
• Sintácticos: divide una oración en cada uno de sus componentes. 
• Semánticos: busca entender el significado de la oración. 
• Pragmáticos: se ocupa del análisis de oraciones y cómo se usan en 
diferentes situaciones. 
• Discursivo: examina el significado de la oración en relación con otra 
oración en el texto o párrafo del mismo documento. 
Las etapas básicas del procesamiento del texto son: 
2.2.1.1 Limpieza 
En esta etapa, la principal intención es limpiar el texto de manera que tenga el 
formato que se desee. 
Para ello se suelen eliminar o sustituir cualquier carácter especial, signo de 
puntuación, emoji o dato que no concuerde con lo que estamos buscando. 
Además de lo anterior se debe convertir todo el texto o en mayúsculas o en 
minúsculas para que no el ordenador pueda reconocer la misma palabra, 
aunque este escrita de forma diferente. 
2.2.1.2 Tokenización: 
Al tokenizar, puede dividir convenientemente el texto por palabra o por 
oración. Esto le permitirá trabajar con fragmentos de texto más pequeños que 
aún son relativamente coherentes y significativos, incluso fuera del contexto del 
resto del texto. Es su primer paso para convertir datos no estructurados en 
datos estructurados, que son más fáciles de analizar. 
Hay dos tipos de tokenización: 
• Palabra: La tokenización por palabra permite identificar palabras que 
aparecen con especial frecuencia. 
• Oración: La tokenización por oración analiza cómo esas palabras se 
relacionan entre sí y ver más sobre el contexto. 
 
 
 
7 
 
2.2.1.3 Filtrado de palabras vacías: 
Las palabras vacías son palabras que desea ignorar, por lo que cuando un texto 
es procesado estas palabras se filtran y se eliminan. Palabras muy comunes a 
menudo se usan como palabras vacías, ya que no agregan mucho significado a 
un texto por sí mismas. 
Los tipos de palabras son: 
• Palabra de contenido: brindan información sobre los temas tratados en 
el texto o el sentimiento que el autor tiene sobre esos temas. 
• Palabras de contexto: brindan información sobre el estilo de escritura. 
2.2.1.4 Derivación: 
La derivación designa el simple proceso heurístico de cortar el final o el inicio 
de las palabras para mantener solo la raíz de la palabra. 
Estas técnicas funcionan basándose en una lista de sufijos y prefijos que según 
el idioma. 
Como una misma palabra se puede encontrar de diferentes formas dependiendo 
del género, número, persona etc.; al aplicarle la derivación obtendríamos la 
misma raíz. 
2.2.1.5 Lematización: 
Este proceso es parecido al anterior ya que también reduce la palabra a otro 
termino. 
Pero en este caso hay una diferencia y es que la lematización trabaja haciendo 
un análisis morfológico de las palabras con ayuda de diccionarios detallados 
según el idioma. 
Por ello la lematización siempre relaciona cada palabra con la forma en la que 
aparece un diccionario. 
Para los chat-bots este método es más efectivo que la derivación si se quiere 
comprender mejor las consultas de los usuarios. 
2.2.1.6 Etiquetado: 
Esta etapa se encarga de asignar la categoría gramatical que toma cada palabra. 
Hay palabras que pueden tomar diferentes categorías dependiendo del contexto 
en el que se usen y por ello el proceso se puede realizar de acuerdo con la 
definición de la palabra o por su relación con las palabras que tiene adyacentes. 
Los posibles roles son: sustantivo, verbo, adjetivo, adverbio, pronombre, 
preposición, conjunción e interjección. 
2.2.2 Comprensión del Lenguaje Natural (CLN) [2]: 
La comprensión del lenguaje natural es un subconjunto de PLN que trata con 
la faceta mucho más estrecha, pero igualmente importante, de cómo manejar 
mejor las entradas no estructuradas y convertirlas en una forma estructurada 
que una máquina puede entender y actuar. Mientras que los humanos son 
capaces de manejar sin esfuerzo las malas palabras, palabras intercambiadas, 
contracciones, coloquialismos y otras peculiaridades, las máquinas no son tan 
expertas en comprender y asimilara aquellos inputs con faltas de ortografía u 
otros supuestos. 
 
 
 
8 
 
La comprensión del lenguaje natural es una rama de la Inteligencia Artificial 
que utiliza software de computadora para comprender la entrada en forma de 
oraciones usando texto o habla. 
CLN analiza los datos para determinar su significado utilizando algoritmos para 
reducir el habla humana a una ontología estructurada. 
Dos conceptos fundamentales de CLN son la intención y el reconocimiento de 
entidades (NER). 
2.2.3 Generación del Lenguaje Natural (GLN) [3]: 
La generación de lenguaje natural es un campo de investigación y desarrollo de 
la Inteligencia Artificial que se ocupa del uso de sistemas informáticos para 
producir automáticamente lenguaje natural, principalmente texto escrito. 
El sofisticado software GLN tiene la capacidad de extraer grandes cantidades de 
datos numéricos, identificar patrones y compartir esa información de una 
manera que sea fácil de entender para los humanos. 
GLN es un proceso de varias etapas, en el que en cada paso refina aún más los 
datos que se utilizan para producir contenido con un lenguaje que suena 
natural. Las seis etapas de GLN son las siguientes: 
• Análisis de contenido. 
• Comprensión de datos. 
• Estructuración documental. 
• Agregación de oraciones. 
• Estructuración gramatical. 
• Presentación del idioma. 
2.2.4 Recuperación de información (RI) 
La recuperación de información es el campo dentro de la informática que se 
encarga de procesar textos de documentos, para poder recuperar partes 
específicas en base a palabras clave. Por ejemplo, técnicas como la extracción 
de información estructurada o los sistemas de respuesta a preguntas de 
usuarios. No genera nuevas frases, por lo que no necesita utilizar reglas 
gramaticales. Tampoco es tan “inteligente” como la Generación del Lenguaje 
Natural. 
Una estrategia de recuperación de información puede utilizar diversos métodos 
que no necesariamente se excluyen entre sí, sino que pueden combinarse. De 
hecho, hoy existen muchos modelos que solo se diferencian en algunos detalles. 
Pueden clasificarse en tres grandes categorías (modelos clásicos): 
2.2.4.1 Modelo booleano 
Se basa en la teoría de conjuntos del álgebra de George Boole, mediante la 
aplicación de operaciones lógicas AND (Intersección), OR (Unión), NOT (Resta) y 
XOR (Complemento). Para llevarlo a efecto sólo se necesita un fichero 
diccionario donde almacenar los términos de los documentos de la colección y 
la correspondencia de aparición de estos. 
Este modelo es el más rápido de ejecutar ya que solo comprueba los términos 
en función de una condición lógica, pero el resultado que nos devuelve solo 
puede tener los valores 0 (ausencia) o 1 (presencia). 
 
 
 
9 
 
En el proceso más básico no se devuelve la cantidad de veces que aparece un 
término en cada documento y para conseguirlohabría que realizar un proceso 
de varios pasos para la optimización de los datos recopilados por el sistema. 
2.2.4.2 Modelo de espacio vectorial 
Desde un punto de vista matemático, la información también puede 
representarse como un conjunto de vectores. En el modelo espacio vectorial los 
términos constituyen los ejes de coordenadas y tanto los documentos como las 
consultas obtienen valores específicos en relación con ellos, de forma que 
pueden representarse como puntos o vectores dentro de un espacio vectorial. A 
continuación, se comparan los vectores y aquel más cercano a la consulta 
corresponde al contenido que debería mostrarse en primer lugar. 
Los dos tipos de modelos más utilizados son: 
2.2.4.2.1 Bag of Words (BOW) 
Este modelo de espacio vectorial se encarga de representar un documento 
ignorando el orden de aparición de cada término y de su importancia en él. Las 
principales ventajas de utilizar este modelo es su facilidad de uso y su eficiencia 
computacional. También es conocido como proceso de vectorización. 
Para comenzar a usar este modelo es necesario conocer las palabras del 
vocabulario sobre el que vamos a trabajar. Con esta información, ya se tiene el 
tamaño del vector que va a resultar de analizar cada documento, el cual va a 
tener como longitud el número de palabras únicas seleccionadas en el 
vocabulario. 
 
𝐵𝑂𝑊 = [𝑥1 … 𝑥𝑛] 
Ecuación 1.Vector bag of words 
 
A continuación, ya se puede realizar el vector resultante de procesar un 
documento, para ello se comprueba si cada palabra del vocabulario aparece en 
el documento analizado, si lo contiene se asignará a el valor ‘xi’, siendo ‘i’ la 
posición del término; el valor de 1, en cambio si no lo contiene se le asignara un 
valor de 0. 
 
𝑥𝑖 = {
0 𝑠𝑖 𝑑 ⊄ 𝑖
1 𝑠𝑖 𝑑 ⊂ 𝑖
 
Ecuación 2. condición para asignación del valor xi 
 
La variable ‘i’ se refiere al termino correspondiente y la variable ‘d’ representa el 
documento en el que se está analizando. 
Con este método se consigue un espacio vectorial normalizado en el que cada 
dimensión solo puede tener los valores 0 o 1 y por consiguiente la distancia 
entre dos vectores de este mismo espacio esta estandarizada. 
Al tener la característica anterior este modelo de espacio vectorial puede ser 
usado con clasificadores de aprendizaje automático y redes neuronales sin que 
haya problemas en sus algoritmos. 
 
 
 
10 
 
2.2.4.2.2 TF-IDF 
Este tipo de modelo de espacio vectorial se basa en la relación de cada termino 
en un documento en comparación con los demás documentos del conjunto total. 
Esta medida se calcula al multiplicar la frecuencia de cada termino (TF), que 
representa el peso de ese término en particular en un documento especifico; por 
la frecuencia inversa del documento (IDF), que representa el peso del término 
en base a todos los documentos. 
Para la obtención del valor de TF es necesario contar el número de veces que 
aparece el termino en su documento y dividirlo por el número total de palabras 
que hay en él. 
 
𝑇𝐹𝑡,𝑑 =
𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑑𝑒 𝑡 𝑒𝑛 𝑑
𝑛ú𝑚𝑒𝑟𝑜 𝑝𝑎𝑙𝑎𝑏𝑟𝑎𝑠 𝑡𝑜𝑡𝑎𝑙 𝑑𝑒 𝑑
 
Ecuación 3. Función TF 
 
El valor IDF se puede calcular de distintas formas que son ligeramente 
diferentes. Esto se debe a que esta medida es igual para cada termino ya que 
no requiere de un documento específico para calcularlo, si no el uso de todos. 
Como durante el desarrollo he usado la librería Sklearn escribiré la formula 
predeterminada que usa esta librería para este cálculo. 
La fórmula correspondiente es logaritmo del número total de documentos 
dividido por el número de documentos que contienen el término. 
 
𝐼𝐷𝐹𝑡 = log(
𝑛ú𝑚𝑒𝑟𝑜 𝑡𝑜𝑡𝑎𝑙 𝑑𝑒 𝑑𝑜𝑐𝑢𝑚𝑒𝑛𝑡𝑜𝑠 
𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑑𝑜𝑐𝑢𝑚𝑒𝑛𝑡𝑜𝑠 𝑞𝑢𝑒 𝑐𝑜𝑛𝑡𝑖𝑒𝑛𝑒𝑛 𝑡
) 
Ecuación 4. Función IDF 
 
Finalmente se obtiene la medida TF-IDF como la multiplicación de estos valores. 
 
𝑇𝐹_𝐼𝐷𝐹𝑡,𝑑 = 𝑇𝐹𝑡,𝑑 × 𝐼𝐷𝐹𝑡 
Ecuación 5. Función TF-IDF 
 
El resultado final de este algoritmo es la creación de una matriz en la cada fila 
representa un término y cada columna un documento. 
 
𝑀𝑎𝑡𝑟𝑖𝑧𝑇𝐹_𝐼𝐷𝐹 = [
𝑇𝐹𝐼𝐷𝐹𝑡1,𝑑1 ⋯ 𝑇𝐹𝐼𝐷𝐹𝑡1,𝑑𝑛
⋮ ⋱ ⋮
𝑇𝐹𝐼𝐷𝐹𝑡𝑛,𝑑1 ⋯ 𝑇𝐹𝐼𝐷𝐹𝑡𝑛,𝑑𝑛
] 
Ecuación 6. Matriz resultante por el algoritmo 
 
 
 
 
11 
 
La variable ‘t’ se refiere al termino correspondiente y la variable ‘d’ representa el 
documento en el que se está analizando. 
Para la medida de coincidencia usando este modelo se puede usar la métrica 
conocida como cosine similarity. Esta calcula el coseno del ángulo que forman 
dos vectores en un espacio multidimensional. Los valores que puede tomar esta 
medida son [-1, 1], en el caso de -1 significa que los vectores son completamente 
opuestos y que apuntan en direcciones contrarias; en cambio, el valor 1 se 
obtiene cuando ambos vectores tienen la misma dirección. 
Usando el modelo TF-IDF y la métrica cosine similarity se puede obtener la 
similitud de un documento u oración en comparación con otro gran número de 
documentos. Primero se realizaría la matriz TF-IDF y después se calcularía la 
medida cosine similarity entre el vector perteneciente al documento entrante y 
todos los demás vectores de los otros documentos. El mayor valor de estos 
resultados se podría prever como que es el documento más similar frente al 
documento entrante. 
2.2.4.3 Modelo probabilístico 
Este modelo recurre a la teoría de la probabilidad. A cada contenido se le asigna 
un valor de probabilidad y los resultados se ordenan en función de la 
probabilidad con la que se ajustan a la intención de búsqueda. Para calcularla, 
el modelo utiliza el llamado feedback de relevancia, por el cual se anima a los 
usuarios a valorar manualmente los resultados, de tal modo que en la próxima 
búsqueda idéntica el modelo pueda mostrar una lista diferente de resultados, 
quizá mejor que la primera. 
2.2.5 Aprendizaje automático – Machine Learning 
El Machine Learning es una rama de la inteligencia artificial que permite que las 
máquinas aprendan sin ser expresamente programadas para ello. Una 
habilidad indispensable para hacer sistemas capaces de identificar patrones 
entre los datos para hacer predicciones. 
Básicamente, esta rama consigue que un ordenador se convierta en un maestro 
del reconocimiento de patrones, y que sea capaz de convertir una muestra de 
datos en un programa informático capaz de extraer inferencias de nuevos 
conjuntos de datos para los que no ha sido entrenado previamente. 
Automáticamente, también en este contexto, implica que estos sistemas se 
mejoran de forma autónoma con el tiempo, sin intervención humana. 
La base fundamental del aprendizaje automático es la estadística y las 
matemáticas, su funcionamiento consiste en una serie de algoritmos capaces 
de analizar grandes cantidades de datos para deducir cuál es el resultado 
óptimo para un determinado problema. 
2.2.5.1 Aprendizaje supervisado 
El aprendizaje supervisado se define por el uso de conjuntos de datos 
etiquetados para entrenar los algoritmos para clasificar datos o predecir 
resultados con precisión. A medida que se introducen datos de entrada en el 
modelo, adapta sus pesos hasta que el modelo se haya ajustado correctamente. 
El objetivo de este aprendizaje de clasificar y predecir conjuntos de datos, que 
no se han usado en el entrenamiento, con la mayor precisión posible. 
 
 
 
12 
 
Para conseguirlo se necesita ajustar bien el modelo con los parámetros 
necesarios. Existen muchos tipos de clasificadores y por ello es importante 
encontrar cual se ajusta más a las necesidades del problema que se quiere 
resolver. 
Todos los modelos deben ser entrenados con anterioridad y por ello es necesario 
elegir un buen conjunto de datos evitando el underfitting o el overfitting. 
• Underfitting: esto ocurre cuando un modelo de datos no puede capturar 
la relación entre las variables de entrada y salida con precisión, 
generando una alta tasa de error tanto en el conjuntode entrenamiento 
como en los datos no vistos. Ocurre cuando un modelo es demasiado 
simple, lo que puede ser el resultado de un modelo que necesita más 
tiempo de entrenamiento, más características de entrada o menos 
regularización. 
Unos buenos indicadores de que esto está ocurriendo en el modelo son 
un alto sesgo y una varianza baja. 
• Overfitting: esto ocurre cuando un modelo de datos genera una 
predicción perfecta en los datos de entrenamiento, pero en cambio, en 
los conjuntos nuevos no es capaz de ser preciso. 
Este suceso se produce cuando el modelo memoriza el ruido producido 
por el conjunto de datos inicial y se ajusta demasiado al conjunto de 
entrenamiento. 
Unos buenos indicadores de que esto está ocurriendo en el modelo son 
una tasa de error baja y una varianza alta. 
En el aprendizaje supervisado existen dos categorías principales en función de 
la salida que producen: 
2.2.5.1.1 Clasificación 
La clasificación es el lugar donde se entrena a un algoritmo para clasificar los 
datos de entrada en variables discretas. 
Por lo tanto, el objetivo de estos algoritmos es predecir a qué clase de las posibles 
pertenece el conjunto de datos de entrada. 
2.2.5.1.2 Regresión 
La regresión es un método en el que se entrena a un algoritmo para predecir 
una salida a partir de un rango continuo de valores posibles. 
En la regresión, los algoritmos necesitan identificar relaciones funcionales entre 
los parámetros de entrada y salida. Los valores de salida no son discretos como 
en la clasificación, sino una función de los parámetros de entrada. La precisión 
de un algoritmo de regresión se calcula como la desviación entre el resultado 
exacto y el resultado previsto. 
2.2.5.2 Aprendizaje no supervisado 
El aprendizaje no supervisado se define por el uso de conjuntos de datos que 
no están etiquetados por lo que el algoritmo tiene que intentar entender por sí 
mismo. 
El objetivo es simplemente dejar que la máquina aprenda sin ayuda o 
indicaciones. En el camino, también deberá aprender a ajustar los resultados y 
 
 
 
13 
 
agrupaciones cuando haya resultados más adecuados, permitiendo que la 
máquina comprenda los datos y los procese como mejor le parezca. 
El aprendizaje no supervisado se utiliza para explorar datos desconocidos. 
Puede revelar patrones que podrían haberse pasado por alto o examinar grandes 
conjuntos de datos que serían demasiado para que los abordara una sola 
persona. 
Los algoritmos de este aprendizaje se utilizan para agrupar los datos no 
estructurados según sus similitudes y patrones distintos en el conjunto de 
datos. 
La salida de estos algoritmos se utiliza para poder describir la estructura de los 
datos e intentar encontrar algún tipo de organización que simplifique el análisis. 
Por ello, tienen un carácter exploratorio. 
En el aprendizaje no supervisado es usado para resolver diferentes tipos de 
problemas: 
2.2.5.2.1 Agrupamiento (clustering) 
En estos problemas el objetivo es encontrar diferentes grupos dentro de los 
elementos de los datos. Para ello, los algoritmos de agrupamiento encuentran 
patrones ocultos en los datos de manera que los elementos del mismo clúster 
son más similares entre sí que con los demás clústeres diferentes. 
El resultado de estos algoritmos será un nuevo patrón en los datos asociado a 
una etiqueta o clase. La interpretación de las clases o grupos obtenidos es una 
tarea que se realiza ‘a posteriori’ por un analista. 
Este tipo de comportamiento de aprendizaje es similar al de los humanos. 
Imagina cómo analizamos y observamos el entorno para recoger los datos y 
entender y reconocer las cosas. 
Los tipos de algoritmos se pueden categorizar en estas categorías: 
• Clustering particional. 
• Clustering jerárquico. 
• Clustering probabilístico. 
2.2.5.2.2 Asociación 
El objetivo de estos algoritmos es la búsqueda de asociaciones entre ciertos 
valores de las variables que componen las muestras. 
Para conseguirlo se busca la concurrencia entre ellos, es decir, contando las 
veces que aparecen simultáneamente. Este tipo de problema puede generar 
como resultado un conjunto de reglas de asociación. 
Las reglas de asociación permiten establecer asociaciones entre objetos de datos 
dentro de grandes bases de datos. 
Esta técnica no supervisada trata de descubrir relaciones interesantes entre 
variables que inicialmente un ser humano no es capaz de observar a simple 
vista. 
 
 
 
14 
 
2.2.5.2.3 Reducción de la dimensionalidad 
El Machine Learning trabaja con datos que pueden tener una gran complejidad 
y por ello requiera una mayor capacidad de procesamiento. Los datos están 
compuestos de variables que son también conocidas como características. 
Aunque se pueda pensar que a mayor número de variables el modelo será más 
preciso esto no es exactamente cierto ya que además de requerir más tiempo y 
recursos, el modelo puede llegar a verse afectado por el overfitting si el conjunto 
de datos no es de calidad. 
Por ello, algunas características a veces son redundantes y están 
correlacionadas. Es entonces cuando se necesita ayuda del algoritmo de 
reducción de dimensionalidad. Este algoritmo no supervisado reducirá las 
variables aleatorias y obtendrá una selección óptima para estas variables. 
Se usa comúnmente para la etapa de preprocesado de los datos y para favorecer 
la visualización de los datos. 
2.2.5.3 Aprendizaje por refuerzo 
El aprendizaje por refuerzo es un modelo que no se basa ni en reconocer 
patrones ni en predecir un resultado, en cambio se basa en la retroalimentación 
que recibe de su entorno en función de las acciones o comportamientos que 
toma. 
El objetivo es que en base a los refuerzos que el modelo recibe ajuste su 
comportamiento de manera que la próxima vez que tome una decisión esta sea 
la correcta. 
En los modelos anteriores se intenta minimizar la función de coste (reducir el 
error), en cambio, con el aprendizaje por refuerzo se busca maximizar la 
recompensa. 
Para conseguirlo trabajan a base de ensayo y error. Esto en los ordenadores es 
una tarea fácil ya que pueden ejecutar el mismo proceso sin cansarse y además 
a una velocidad extremadamente rápida. Por ello pueden sacar un gran 
rendimiento al proceso de prueba y error. 
El aprendizaje por refuerzo se diferencia del aprendizaje supervisado por que no 
recibe datos etiquetados si no la intervención humana que verifica el 
comportamiento y refuerza al modelo con lo que corresponda. Y la diferencia 
con el aprendizaje no supervisado es que no busca la agrupación en grupos si 
no que ya se conoce el resultado esperado. 
2.2.6 Redes neuronales 
Las redes de neuronas artificiales (RNA) son un paradigma de aprendizaje y 
procesamiento automático inspirado en la forma en que funciona el sistema 
nervioso de los animales. Consiste en simular las propiedades observadas en 
los sistemas neuronales biológicos a través de modelos matemáticos recreados 
mediante mecanismos artificiales (como un circuito integrado, un ordenador o 
un conjunto de válvulas). 
Una neurona se compone de tres partes: 
 
 
 
15 
 
• Cuerpo celular o soma: el cual contiene al núcleo celular. Es la zona 
encargada de manejar todas las funciones de la célula. Al albergar el 
núcleo celular contiene material genético en forma de ADN y ARN. 
• Axones: son prolongaciones del cuerpo celular en forma de finas 
estructuras alargadas y su función es la de transmitir sustancias desde 
el cuerpo celular a cada uno de los extremos, y desde un extremo a otro 
de la célula. Su forma es muy característica debido a que facilita 
la transmisión del impulso nervioso y a que permite agrupar densamente 
todas las neuronas 
• Dendritas: son ramificaciones que se encuentran en las porciones 
distales de los axones, siendo estas estructuras las que generalmente 
entran en contacto con otras neuronas. Su forma ramificada permite que 
una sola neurona tenga un mejor alcance sobre una o varias células al 
mismo tiempo, constituyendo una auténticamalla de conexiones 
intercelulares bastante fuente y organizada que permite la adecuada 
transmisión de los impulsos nerviosos. 
Cuando se establece el contacto entre dos células diferentes, generalmente se 
da un proceso conocido como sinapsis química. 
Las redes neuronales buscan simular este mecanismo biológico, consiguiendo 
que los ordenadores encuentren la capacidad de resolver problemas complejos 
al analizar y procesar la información. 
El modelo de una red neuronal está organizado en varias capas, una de entrada, 
una o más capas ocultas y finalmente una de salida. 
Cada una de estas capas está compuesta por un conjunto de nodos llamados 
neuronas artificiales que a su vez están conectados con todos los nodos de la 
capa siguiente. 
En estos enlaces el valor de salida de la neurona anterior es multiplicado por 
un valor de peso. Estos pesos en los enlaces pueden incrementar o inhibir el 
estado de activación de las neuronas adyacentes. Del mismo modo, a la salida 
de la neurona, puede existir una función limitadora o umbral, que modifica el 
valor resultado o impone un límite que no se debe sobrepasar antes de 
propagarse a otra neurona. 
El aprendizaje automático de estos modelos se produce cuando la propia red 
neuronal cambia los pesos que conectan las neuronas. 
Las redes neuronales se pueden clasificar en diferentes tipos según la topología 
o según el método de aprendizaje. [4] [5] 
2.2.6.1 Tipos según arquitectura 
2.2.6.1.1 Red neuronal monocapa 
Se corresponde con la red neuronal más simple, únicamente está compuesta 
por dos capas, aunque como la de entrada no ejecuta operaciones sobre los 
pesos no se contabiliza. Por lo tanto, la única capa que realiza cálculos es la de 
salida y sobre ella está proyectada la de entrada. 
 
 
 
16 
 
 
Ilustración 1. Diagrama de una red neuronal monocapa 
2.2.6.1.2 Red neuronal multicapa 
Mantiene las capas de entrada y salida igual que en la anterior, pero entre las 
conexiones de entrada y de salida, existen diversas capas de neuronas que 
hacen de intermediarias, denominadas capas ocultas. Estas capas de neuronas 
pueden conectarse entre ellas o no. 
 
Ilustración 2. Diagrama de una red neuronal multicapa 
2.2.6.1.3 Red neuronal convolucional (CNN) 
La diferencia principal de este tipo de red comparándola con las multicapas 
comunes es que las diferentes partes de la red neuronal se pueden entrenar 
para tareas diversas. Con esto se consigue aumentar la velocidad de 
entrenamiento e identificar patrones de una forma más avanzada. Gracias al 
uso de algoritmos para redes convolucionales, se reduce el número de 
conexiones y de parámetros, por lo que requiere de menor entrenamiento. 
 
 
 
17 
 
 
Ilustración 3. Diagrama de una red neuronal convolucional 
2.2.6.1.4 Red neuronal recurrente (RNN) 
Las redes neuronales recurrentes están especializadas en procesar datos 
secuenciales o series temporales debido a que tienen la posibilidad de realizar 
conexiones de realimentación, ya sea entre neuronas de una misma capa o de 
diferentes capas. El proceso de realimentación consigue que este tipo de redes 
sea capaz de obtener una memoria artificial. 
 
Ilustración 4. Diagrama de una red neuronal recurrente 
2.2.6.1.5 Red de base radial (RBF) 
Las redes de base radial calculan la salida de la función en función de la 
distancia a un punto denominado centro. La salida es una combinación lineal 
de las funciones de activación radiales utilizadas por las neuronas individuales. 
Las redes de base radial tienen la ventaja de que no presentan mínimos locales 
donde la retro propagación pueda quedarse bloqueada. 
 
 
 
18 
 
 
Ilustración 5. Diagrama de una red neuronal de base radial 
2.2.6.2 Tipos según algoritmo de aprendizaje 
2.2.6.2.1 Aprendizaje supervisado 
El funcionamiento de este aprendizaje es prácticamente idéntico al explicado 
anteriormente, las únicas diferencias que poseen son que dispone de un agente 
externo, también llamado supervisor maestro, que se encarga de controlar la 
salida de la red y en caso de no coincidir, procede a modificar los pesos de las 
conexiones. Repite este proceso hasta que la salida obtenida se aproxime a la 
deseada. 
2.2.6.2.1.1 Aprendizaje por corrección de error. 
Este tipo de aprendizaje consiste en calcular la función de error en la salida y 
ajustar los pesos en base al resultado. Esta función es la diferencia entre los 
valores deseados y los obtenidos en la salida. 
Algunos de los algoritmos de este tipo son: 
• Regla de aprendizaje del Perceptrón 
• Regla de aprendizaje Delta o regla del mínimo error cuadrado (LMS Error) 
• Regla de aprendizaje de propagación hacia atrás o de backpropagation 
(LMS multicapa) 
2.2.6.2.1.2 Aprendizaje estocástico. 
Este tipo de aprendizaje consiste en cambiar los pesos de forma aleatoria y 
evaluar cual es el efecto en función de los valores deseados y distribuciones de 
posibilidad. 
2.2.6.2.2 Aprendizaje no supervisado 
En este aprendizaje no hay diferencia con el explicado arriba ya que no se 
proporciona la salida deseada en función de la entrada proporcionada. El ajuste 
de los pesos se genera sin saber si la salida es correcta o no. Así que el objetivo 
de este aprendizaje no es predecir un resultado si no representar el grado de 
familiaridad o similitud de los datos de entrada. 
2.2.6.2.2.1 Aprendizaje hebbiano. 
Esta regla de aprendizaje funciona de manera simple, aumenta el peso de la 
conexión de dos neuronas si ambas toman el mismo estado simultáneamente. 
Los posibles estados son activo o inactivo y para ello se usan neuronas binarias. 
 
 
 
19 
 
2.2.6.2.2.2 Aprendizaje competitivo y comparativo. 
Este aprendizaje se orienta al clustering de los datos de entrada. 
Comienza clasificando los datos de entrada en las clases que repiten un 
determinado patrón, si el nuevo dato de entrada se reconoce como perteneciente 
a una clase ya existente, la red ajusta los pesos para matizar la representación 
de esta clase; en cambio, si determina que no pertenece a ninguna clase, la red 
neuronal ajustara su estructura para añadir nuevos pesos que reconocerán la 
nueva clase en siguientes iteraciones. 
2.2.6.2.3 Aprendizaje por refuerzo 
Podría considerarse dentro del aprendizaje supervisado ya que el proceso del 
aprendizaje es parecido al aprendizaje por corrección de error, pero en este caso 
se basa en no tener durante el entrenamiento la salida exacta si no que se 
calculen los pesos en función de una señal de refuerzo y un mecanismo de 
probabilidades. 
2.3 Moodle 
Moodle es una aplicación de aprendizaje electrónico que le permite crear cursos 
y programas de capacitación en línea. 
Es muy popular entre los profesores de todo el mundo como herramienta para 
crear sitios web dinámicos en Internet para sus alumnos. Para usarlo, debe 
estar instalado en un servidor web, y puede instalarse en una computadora 
personal y en un servidor proporcionado por una empresa de alojamiento web. 
El objetivo del proyecto Moodle siempre ha sido brindar a los docentes las 
mejores herramientas. 
Moodle fue creado por Martin Dougiamas, quien fue administrador 
de WebCT en la Universidad Tecnológica de Curtin. Basó su diseño en las ideas 
del constructivismo en pedagogía que afirman que el conocimiento se construye 
en la mente del estudiante en lugar de ser transmitido sin cambios a partir de 
libros o enseñanzas y en el aprendizaje colaborativo. Un profesor que opera 
desde este punto de vista crea un ambiente centrado en el estudiante que le 
ayuda a construir ese conocimiento con base en sus habilidades y 
conocimientos propios en lugar de simplemente publicar y transmitir la 
información que se considera que los estudiantes deben conocer. 
2.3.1 Arquitectura de Moodle [6] 
En términos de arquitectura, Moodle es una aplicación web que se ejecuta sin 
modificaciones en Unix, GNU/Linux, OpenSolaris, FreeBSD, Windows, Mac OS 
X, NetWare y otros sistemas que soportan PHP, incluyendo la mayoría de los 
proveedoresde hosting web. 
Moodle dispone de bastantes módulos por defecto y permite al desarrollador 
incluir módulos ya implementados o diseñar un módulo propio. 
Moodle está diseñado siguiendo la lógica de la arquitectura modelo, vista y 
controlador (MVC). 
2.3.1.1 Capa de vista: 
En esta capa se mostrarán cada uno de los elementos que serán manejables por 
los usuarios. Estos elementos se crearán a partir de funciones y bibliotecas 
 
 
 
20 
 
dadas por Moodle, están creados en PHP. El uso de estas funciones permite 
mantener este esquema en toda la plataforma. 
También permite la introducción de bloques de texto directamente desde el sitio 
web usando los formularios disponibles, el formato puede ser HTML o texto. 
2.3.1.2 Capa del controlador: 
En esta capa se concentra toda la lógica del negocio de la aplicación. Cada uno 
de los módulos que componen la plataforma tienen su propia capa de negocio, 
y es en cada una de estas capas donde se encuentran todos los componentes 
encargados de generar la funcionalidad del sistema. Esta capa es la encargada 
de comunicarse con la capa de presentación para recibir las peticiones y con la 
capa de datos para almacenar o recuperar los datos almacenados en ella. Toda 
la lógica que compone esta capa esta implementada en PHP y siguiendo los 
estándares de codificación indicados por la plataforma Moodle. 
2.3.1.3 Capa de modelo: 
La capa de datos contiene todo lo relacionado con el servidor de base de datos. 
Este servidor contiene todas las tablas necesarias para guardar la información 
de los usuarios, así como la gestión de instalación y actualización de las 
actividades. La plataforma Moodle únicamente soporta de forma nativa los 
servidores de base de datos PostgreSQL, MySQL y MariaDB, aunque 
actualmente dispone de extensiones que permiten el uso de la mayoría de los 
sistemas de bases de datos existentes. 
2.4 Python 
Python es un lenguaje de programación de alto nivel que se utiliza para 
desarrollar aplicaciones de todo tipo. A diferencia de otros lenguajes como Java 
o .NET, se trata de un lenguaje interpretado, es decir, que no es necesario 
compilarlo para ejecutar las aplicaciones escritas en Python, sino que se 
ejecutan directamente por el ordenador utilizando un programa denominado 
interpretador, por lo que no es necesario “traducirlo” a lenguaje máquina. 
Python es un lenguaje sencillo de leer y escribir debido a su alta similitud con 
el lenguaje humano. Además, se trata de un lenguaje multiplataforma de código 
abierto y, por lo tanto, gratuito, lo que permite desarrollar software sin límites. 
Con el paso del tiempo, Python ha ido ganando adeptos gracias a su sencillez y 
a sus amplias posibilidades, sobre todo en los últimos años, ya que 
facilita trabajar con Inteligencia Artificial, Big Data, Machine Learning y Data 
Science, entre muchos otros campos en auge. 
Para la implementación del chat-bot es necesario el uso de librerías de Python 
tales como: 
2.4.1 SpaCy [7] 
SpaCy es una librería de Python que permite construir aplicaciones de 
procesamiento de lenguaje natural (PLN). SpaCy proporciona modelos 
preentrenados de diferentes idiomas, lo cual junto a una sintaxis clara hace que 
sea ideal para principiantes en el campo de la PLN. 
SpaCy funciona ejecutando una serie de pipelines predefinidas. 
 
 
 
 
21 
 
 
 
Ilustración 6. Diagrama flujo de ejecución de los pipelines 
Además de estos pipelines, permite crear modelos nuevos o reentrenar los 
modelos que proporciona con datos propios para entrenar los modelos en 
campos específicos. 
SpaCy está orientado al uso de producción, proporcionando un framework para 
construir aplicaciones completas que requieran de procesamiento de lenguaje 
natural. Además, es eficiente en CPU pese a utilizar modelos de redes 
neuronales. 
2.4.2 Natural Languaje Toolkit (NLTK) [8] 
NLTK es una biblioteca de Python para trabajar con datos en lenguaje humano. 
Proporciona interfaces fáciles de usar junto con un conjunto de bibliotecas de 
procesamiento de texto para clasificación, tokenización, derivación, etiquetado, 
análisis y razonamiento semántico. 
Muchas de las tareas de preprocesamiento que se necesitan ya están 
programadas de manera eficiente en NLTK y se pueden usar directamente en 
cualquier programa. Además de los programas, se distribuyen también una 
cantidad mayor de cincuenta corpus y otros datos lingüísticos. 
2.4.3 Scikit-learn [9] 
Scikit-learn es una biblioteca para aprendizaje automático para el lenguaje de 
programación Python. 
Incluye varios algoritmos de clasificación, regresión y análisis de grupos entre 
los cuales están máquinas de vectores de soporte, bosques aleatorios, Gradient 
Boosting, K-Means y DBSCAN. Está diseñada para interoperar con las 
bibliotecas numéricas y científicas NumPy y SciPy. 
Scikit-learn es ampliamente utilizado en la competencia Kaggle, así como en 
empresas tecnológicas prominentes. Scikit-Learn ayuda en el 
preprocesamiento, la reducción de dimensionalidad (selección de parámetros), 
la clasificación, la regresión, la agrupación y la selección de modelos. 
La gran variedad de algoritmos y utilidades de Scikit-learn la convierten en la 
herramienta básica para empezar a programar y estructurar los sistemas de 
análisis datos y modelado estadístico. Los algoritmos de Scikit-Learn se 
combinan y depuran con otras estructuras de datos y aplicaciones externas 
como Pandas o PyBrain. 
Dentro de Scikit-learn se incluyen diferentes paquetes: 
 
 
 
22 
 
• NumPy: una librería de Python que se utiliza en proyectos de Machine 
Learning. Se utiliza para crear estructuras de datos con matrices y 
matrices multidimensionales. 
• Pandas: una extensión de Numpy que se utiliza para estructurar, 
analizar y visualizar datos de manera automática. 
• Matplotlib: se utiliza para crear representaciones gráficas de los datos. 
• SymPy: esta librería permite automatizar el cálculo simbólico. 
• Ipython: incluye una consola que incorpora funcionalidades que facilitan 
el trabajo. Entre otras cosas, permite que varias aplicaciones se ejecuten 
y monitoreen de forma interactiva y en paralelo. 
• SciPy: es una librería científica que incluye módulos para el desarrollo de 
tareas de ciencia e ingeniería. 
2.4.4 Keras [10] 
Keras es una biblioteca de redes neuronales de código abierto escrita 
en Python. 
Está especialmente diseñada para posibilitar la experimentación en más o 
menos poco tiempo con redes de Aprendizaje Profundo. Sus fuertes se centran 
en ser amigable para el usuario, modular y extensible. 
Keras es una abstracción, un API High-level, para la creación de modelos de 
aprendizaje. Aporta una sintaxis homogénea y una interfaz sencilla, modular y 
ampliable para la creación de redes neurales. 
Keras consta de tres motores de backend, que son los siguientes: 
• TensorFlow: es un producto de Google, que es una de las herramientas 
de aprendizaje profundo más famosas y ampliamente utilizada en el área 
de investigación de aprendizaje automático y redes neuronales 
profundas. 
• Está construido de tal manera que puede ejecutarse fácilmente en 
múltiples CPU y GPU, así como en sistemas operativos móviles. Consiste 
en varios contenedores en distintos lenguajes como Java, C++ o Python. 
 
• Theano: es una biblioteca de Python de código abierto que se usa 
ampliamente para realizar operaciones matemáticas en matrices 
multidimensionales mediante la incorporación de Scipy y Numpy. Utiliza 
GPU para un cálculo más rápido y calcula de manera eficiente los 
gradientes mediante la creación automática de gráficos simbólicos. Ha 
resultado ser muy adecuado para expresiones inestables, ya que primero 
las observa numéricamente y luego las calcula con algoritmos más 
estables. 
 
• CNTK: Microsoft Cognitive Toolkit es el marco de código abierto de 
aprendizaje profundo. Consta de todos los componentes básicos 
necesarios para formar una red neuronal. Los modelos se entrenan 
usando C++ o Python, pero incorpora C# o Javapara cargar el modelo 
para hacer predicciones. 
 
 
 
 
23 
 
3 Arquitectura 
Para el desarrollo de este sistema se usará una arquitectura de N capas que 
sigue la arquitectura MVC, el objetivo de esta elección es separar las partes que 
componen el software en capas lógicas con la finalidad de gestionar y controlar 
de mejor manera el desarrollo que se lleva a cabo en cada una de ellas. 
 
Ilustración 7. Diagrama de la arquitectura de N capas 
3.1 Frontend 
Esta es la capa externa del software y es con la que el usuario podrá interactuar. 
Como el sistema tiene que estar integrado en la plataforma educativa Moodle 
pues se usa la misma capa vista para el funcionamiento de las propias 
funcionalidades de Moodle como para el uso del chat-bot que se conectara a 
una capa controladora diferente. 
Esta capa hará uso del lenguaje HTML y JavaScript. 
Con el lenguaje HTML se diseñará el campo visual donde el usuario podrá 
escribirle al chat-bot y por donde recibirá la respuesta generada por él. Además, 
se ha usado CSS para darle estilo al HTML. 
Con el lenguaje JavaScript se realizará las funciones para recuperar los 
mensajes escritos por el usuario, a continuación, enviar las peticiones al 
backend y finalmente mostrar la respuesta recibida en el lugar que le 
corresponde. 
Para hacer las peticiones al backend se ha hecho uso de la librería Axios de 
JavaScript. 
3.2 Backend 
Esta es la capa del software donde se ha desarrollado toda la lógica del chat-
bot, la recepción de peticiones del frontend, el procesamiento del texto de 
entrada, seguido del flujo correspondiente a la intención encontrada y la 
administración de la base de datos. 
A continuación, se explica brevemente las tecnologías que se han usado para 
que se pueda entender el funcionamiento completo del backend. Después se 
explicará la estructura que forman estas tecnologías. 
 
 
 
24 
 
3.2.1 Tecnologías 
3.2.1.1 Docker [11] 
La idea detrás de Docker es crear contenedores ligeros y portables para las 
aplicaciones software que puedan ejecutarse en cualquier máquina con Docker 
instalado, independientemente del sistema operativo que la máquina tenga por 
debajo, facilitando así también los despliegues. 
Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, 
QA, como administradores de sistemas, en relación a las máquinas, a los 
entornos en sí donde se ejecutan las aplicaciones software, los procesos de 
despliegue, etc. 
En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse 
en desarrollar su código sin preocuparse de si dicho código funcionará en la 
máquina en la que se ejecutará. 
 
Docker también es muy bueno para el testeo, para tener varios entornos de 
pruebas. Por un lado, es muy sencillo crear y borrar un contenedor, además de 
que son muy ligeros, por lo que podemos ejecutar varios contenedores en una 
misma máquina (base de datos, servidor, librerías…). 
Esto además beneficia a la parte de sistemas, ya como los contenedores son 
más ligeros que las máquinas virtuales, se reduce el número de máquinas 
necesarias para tener un entorno. 
3.2.1.2 Nginx [12] 
Nginx es un famoso software de servidor web de código abierto. En su versión 
inicial, funcionaba en servidores web HTTP. Sin embargo, hoy en día también 
sirve como proxy inverso, balanceador de carga HTTP y proxy 
de correo electrónico para IMAP, POP3 y SMTP. 
Nginx está diseñado para ofrecer un bajo uso de memoria y alta 
concurrencia. En lugar de crear nuevos procesos para cada solicitud web, Nginx 
usa un enfoque asincrónico basado en eventos donde las solicitudes se manejan 
en un solo hilo. 
Con Nginx, un proceso maestro puede controlar múltiples procesos de trabajo. 
El proceso maestro mantiene los procesos de trabajo, y son estos lo que hacen 
el procesamiento real. 
Algunas características comunes que se ven en Nginx incluyen: 
• Proxy inverso con caché 
• IPv6 
• Balanceo de carga 
• Soporte FastCGI con almacenamiento en caché 
• Websockets 
• Manejo de archivos estáticos, archivos de índice y auto indexación 
• TLS / SSL con SNI 
3.2.1.3 Django [13] 
Django es un framework web de alto nivel que permite el desarrollo rápido de 
sitios web seguros y mantenibles. Desarrollado por programadores 
experimentados, Django se encarga de gran parte de las complicaciones del 
 
 
 
25 
 
desarrollo web, por lo que puedes concentrarte en escribir tu aplicación sin 
necesidad de reinventar la rueda. Es gratuito y de código abierto, tiene una 
comunidad próspera y activa, una gran documentación y muchas opciones de 
soporte gratuito y de pago. 
Las características que hacen que Django sea tan bueno son que ayuda a crear 
un software: 
• Completo. 
• Versátil. 
• Seguro. 
• Escalable. 
• Mantenible. 
• Portable. 
La arquitectura que maneja este framework es así de simple. 
 
Ilustración 8. Diagrama de la arquitectura de Django 
3.2.1.4 PostgreSQL [14] 
PostgreSQL es un sistema de código abierto de administración de bases de datos 
del tipo relacional y orientado a objetos que es capaz de funcionar de manera 
muy estable en un servidor. 
Algunas de sus principales características son: 
• Alta concurrencia. 
• Soporte para múltiples tipos de datos de manera nativa. 
• Soporte a triggers. 
• Trabajo con vistas. 
• Objeto-relacional. 
• Soporte para bases de datos distribuidas. 
• Soporte para gran cantidad de lenguajes. 
PostgreSQL permite crear, gestionar y consultar bases de datos relacionales de 
gran tamaño, lo que lo convierte en un sistema ideal para la creación de páginas 
web que necesiten interactuar con datos. 
 
 
 
 
26 
 
3.2.2 Estructura 
En este apartado explicaré la estructura que compone el backend, comentando 
las ventajas que suponen el diseño de esta forma. El principal objetivo del 
backend fue desarrollar una arquitectura que permitiese la ejecución del 
sistema desde cualquier tipo de maquina sin importar el sistema operativo del 
que dispusiese. 
Las dos opciones para realizar esto fueron el uso de máquinas virtuales que 
contuvieran los diferentes entornos o el uso de contenedores ligeros que dispone 
la herramienta Docker. 
La estructura general se basa en el uso de la tecnología Docker, el motivo del 
uso de ella, aparte de lo explicado anteriormente, es que Docker permite un 
tiempo de inicio prácticamente instantáneo. Todos los contenedores se inician 
en una fracción mínima de tiempo, lo cual supone una ventaja en vez de usar 
máquinas virtuales para crear cada entorno. 
Otra de las diferencias fundamentales entre los contenedores y las máquinas 
virtuales es la carga de procesamiento a la que se somete un procesador. En el 
caso del uso de máquinas virtuales, la máquina que actúa como host necesita 
mantener varios sistemas operativos simultáneamente además de sus discos 
duros virtuales a la vez que usa su propio sistema operativo. Para solucionar 
este problema se recurre al uso de los contenedores que realizan el mismo 
trabajo de aislamiento entre los distintos entornos, pero usando la misma CPU 
y memoria del sistema host. La propia herramienta de Docker se encarga de 
administrar los recursos disponibles para cada contenedor en función de lo que 
requieran para ejecutar sus servicios. 
 
Ilustración 9. Diagrama de estructura: Máquina virtual vs Contenedores Docker 
Ahora entrare en la explicación de los contenedores específicos creados. Para el 
desarrollo de esta arquitectura he creado 3 contenedores distintos dentro de 
Docker. Toda la configuración de los contenedores se encuentra en el archivo 
“docker-compose.yml”. 
 
 
 
27 
 
 
Ilustración 10. Esquema de la composición de contenedores y sus tecnologías 
El primer contenedor está compuesto por el servicio que administrará la base 
de datos. En él se encuentra la imagen correspondiente de PostgreSQL. En ella 
se crearán las tablas necesarias para guardar la información necesaria para el 
desarrollo del chat-bot. 
El segundo contenedor alberga el servidorweb de Nginx, el cual da la ventaja 
de ahorrar recursos durante la gestión de las solicitudes. He decidido usar este 
servidor frente a otros como Apache por la arquitectura usada por Nginx. La 
mayor diferencia es que permite manejar múltiples en un solo hilo y no 
sobrecargar el sistema con múltiples hilos como haría Apache. 
Y, por último, el tercer contenedor contendrá la aplicación web desarrollada con 
el lenguaje Python y usando el framework Django. Esta aplicación contendrá la 
configuración para conectarse a los otros dos contenedores. 
En conclusión, la capa frontend es la encargada de recuperar la entrada de datos 
del usuario, creara la petición y la realizara al servidor web Nginx contenido en 
un contenedor de Docker, este servidor gestionará la solicitud y cuando sea 
procesada la recibirá la aplicación web, haciendo uso de Django. A 
continuación, la lógica del chat-bot generará una respuesta, la cual puede 
necesitar consultar datos de la base de datos PostgreSQL o no. Finalmente, 
Django retornara la respuesta al frontend pasando por el servidor web Nginx. 
 
 
 
 
 
28 
 
4 Desarrollo 
4.1 Estructura de directorios 
En este apartado explicare los directorios más relevantes para el desarrollo del 
proyecto y solo comentare por encima los directorios que son usados para la 
configuración de los componentes. 
4.1.1 Carpeta Moodle 
En esta carpeta se encuentran los archivos necesarios para la configuración de 
la plataforma web y para poder ejecutar la capa vista. Todo su contenido ha sido 
autogenerado al descargar de la página web de Moodle. 
Los archivos “Start Moodle.exe” y “Stop Moodle.exe” se usan para iniciar o 
finalizar el sitio web de Moodle, que actuara como capa vista del sistema, 
usando como servidor la máquina anfitriona. Usa la dirección ‘localhost:80’. 
El directorio “server” no ha sido modificado a mano, en cambio, toda la 
configuración añadida ha sido realizada desde el navegador web en base a la 
interfaz que proporciona el sitio. 
4.1.2 Carpeta Código 
En esta carpeta se encuentra el conjunto de ficheros necesarios para el 
desarrollo de las capas controlador y modelo. 
Contiene dos subdirectorios que son “nginx” el cual tiene un archivo de 
configuración del servidor proxy que usara el framework de Django. Y el 
subdirectorio “web” el cual posee toda la lógica del chat-bot. 
También contiene el archivo “Makefile” que será usado para ejecutar comandos 
de una manera sencilla y rápida, como puede ser desplegar el servidor del 
backend, entrenar el chat-bot o ejecutar las pruebas unitarias. Otro archivo 
dentro de este directorio es el “docker-compose.yml” el cual contiene la 
información para configurar los contenedores de Docker, y finalmente está el 
archivo “index.html” usado para configurar la interfaz de usuario. 
4.1.2.1 Carpeta web 
Contiene toda la aplicación del chat-bot, en ella se encuentra el fichero 
“Dockerfile” usado para configurar la imagen del contenedor de la aplicación y 
el fichero “requirements.pip”, contiene todas las librerías que es necesario 
importar para ejecutar el código del chat-bot. 
También contiene un archivo “.env” que proporciona las variables usadas 
durante el proyecto. Este archivo no se sube a git porque contine información 
sobre contraseñas y nombres de usuarios para la conexión con la base de datos. 
4.1.2.2 Carpeta src 
Esta carpeta es el content root de la aplicación web. En ella se encuentran dos 
archivos usados por Django para ejecutar sus configuraciones y diferentes 
operaciones. 
El archivo “manage.py” es el script necesario para ejecutar las herramientas de 
las que dispone Django. 
Los dos paquetes que cuelgan de esta carpeta son: 
 
 
 
29 
 
• “_setup”: usado para configurar el API REST y conexiones con la base de 
datos. 
• “chat_bot”: directorio en el que se encuentran las clases y ficheros que 
definen los módulos y operaciones del chat-bot. 
4.1.2.3 Paquete chat_bot 
Los ficheros que se encuentran dentro están separados en los distintos módulos 
del chat-bot: 
• “trainer” contiene la programación del módulo de entrenamiento. 
• “moodle_bot” contiene la programación del módulo principal. 
• “natural_language_processor.py” contiene la programación del módulo 
PLN. 
• “natural_language_understander.py” contiene la programación del 
módulo CLN. 
• “named_entity_recognizer.py” contiene la programación del módulo NER. 
4.1.2.3.1 Paquete admin 
Este paquete contiene el registro de las clases pertenecientes a las tablas de la 
base de datos. Simplemente registra en el sitio web desplegado por Django las 
tablas para poder hacer modificaciones a la base de datos desde el propio 
navegador. Creando un usuario administrador y desde la url 
‘http://localhost:8000/admin/’ es posible acceder a la administración de 
Django. 
 
Ilustración 11. Sitio web para la administración de Django 
4.1.2.3.2 Paquete core 
Dentro de este paquete están creadas todas las clases pertenecientes al CORE 
del chat-bot, hay una clase por cada posible intención y dentro de ellas esta 
implementada el seguimiento del flujo correspondiente según el resultado del 
análisis de entidades. También se encargan de hacer las consultas necesarias 
a la base de datos para obtener los campos necesarios para la devolución de 
cada respuesta. 
4.1.2.3.3 Directorio database 
Contiene los ficheros usados para el entrenamiento de la red neuronal como es 
el archivo “intents.json” y “frequent_questions.txt”. También alberga los 
archivos generados por el módulo de entrenamiento que más adelante serán 
usados por los otros módulos. Por último, contiene el archivo del logger y el 
fichero de preguntas frecuentes sin responder. 
 
 
 
30 
 
4.1.2.3.4 Paquete migrations 
Paquete usado por el propio Django para la creación y modificación de la base 
de datos. Se generan automáticamente cuando se hace un cambio en las tablas. 
Cuando se realiza una modificación de los atributos de un modelo es necesario 
ejecutar desde la carpeta “Codigo” el comando ‘make migrate’. 
4.1.2.3.5 Paquete models 
Aquí están desarrolladas las clases que representan las tablas de la base de 
datos. Estas clases son necesarias para la creación de nuevos valores, para la 
consulta de datos y para la modificación o eliminación desde el código de 
Python. 
4.1.2.3.6 Paquete rest 
Simplemente contiene la clase encargada de funcionar como interfaz entre el 
backend y el frontend. En ella se recibe la petición y se devuelve la respuesta 
generada. 
4.1.2.3.7 Paquete test 
Alberga los ficheros encargados de definir las pruebas unitarias realizadas en el 
sistema. Dispone de una clase por cada fichero del CORE. 
4.2 Diagramas de flujo 
A continuación se representan los diagramas de flujo de cada uno de los 
módulos que componen el proyecto. Del módulo CORE no hay diagrama de flujo 
porque depende de la predicción obtenida y cada intención esta explicada más 
a continuación. 
4.2.1 Diagrama del sistema 
 
 
Ilustración 12. Flujo a través de los entornos del sistema 
 
4.2.2 Diagrama módulo PLN 
 
 
Ilustración 13. Flujo de los procesos del módulo PLN 
 
 
 
31 
 
 
4.2.3 Diagrama módulo CLN 
 
 
Ilustración 14. Flujo de los procesos del módulo CLN 
 
4.2.4 Diagrama módulo NER 
 
 
Ilustración 15. Flujo de los procesos del módulo NER 
 
4.2.5 Diagrama módulo principal 
 
 
Ilustración 16. Flujo de los procesos del módulo principal 
 
 
 
32 
 
4.3 Interfaz de usuario 
La interfaz de usuario la he implementado directamente desde el sitio web de 
Moodle, desde la opción de añadir bloque de texto. 
Para llegar hasta este formulario es necesario acceder al sitio con un usuario de 
administrador, a continuación, hacer click en el botón de activar edición. Ahora 
el sitio te permite agregar un bloque en la columna que se desee del apartado 
seleccionado. En mi caso he decidido colocara en la página del área personal en 
la columna central y como primer bloque. 
Para acceder a rellenar el bloque es necesario seleccionar

Continuar navegando