Trabajos Fin de Grado en Tecnologías de la Información
Lenguajes y Sistemas Informáticos
Trabajos Fin de Grado en Tecnologías de la Información
Propuestas de Trabajos
Directora: Covadonga Rodrigo (covadonga@lsi.uned.es)
Objetivo: El objetivo de este proyecto es la creación de una actividad de aprendizaje adaptativo basada en la generación de un flujo de preguntas al estudiante de forma interactiva a través de Telegram.
Descripción: El aprendizaje adaptativo (adaptive learning) es un método que individualiza las estrategias de enseñanza-aprendizaje según las necesidades y preferencias del alumno. Tiene particular aplicación en la educación mixta y en línea, desarrollada con el apoyo de entornos virtuales de aprendizaje. Se pretende diseñar y testar una actividad específica de auto-evaluación guiada que contenga preguntas realizadas por profesores y también generadas de forma automatizada mediante ChatGPT.
Metodología: desarrollo de software mediante enfoque iterativo e incremental, de manera que se generen versiones demostrables a partir del primer mes de trabajo en el proyecto.
Requisitos: conocimientos de programación en PHP. Se utilizará la API Telegram Bot.
Director: Miguel Ángel Rodríguez García (miguelangel.rodriguez@lsi.uned.es)
Objetivo: Desarrollo de un modelo de aprendizaje computacional para problemas de clasificación.
Descripción: Utilización de técnicas de aprendizaje profundo para resolver problemas candentes en el dominio del Procesamiento del Lenguaje Natural.
Entre los problemas a resolver, se destacan: identificación implícita de polaridad en el lenguaje natural, identificación de entidades y sus relaciones en el texto, elaboración de algoritmos para clasificar correos y evitar ataques de physing,
Metodología: La realización del proyecto se llevará acabo mediante una metodología incremental que permita al alumno ir aprendiendo paso a paso, desde el inicio con algoritmos de aprendizaje automático básicos, hasta el desarrollo de arquitecturas profundas de redes neuronales.
Requisitos previos: Habilidades de programación en lenguajes interpretado como python y dominio del inglés para la lectura de la documentación.
Directora: Raquel Martínez Unanue (raquel@lsi.uned.es), Miguel Ángel Rodríguez (miguelangel.rodriguez@lsi.uned.es)
Objetivo: dada una tarea del dominio biomédico se pretende implementar un sistema que permita la transferencia de conocimiento de un dominio a otro, o de una lengua a otra, asumiendo que en el dominio y/o lengua origen se dispone de más conocimiento que en el dominio y/o lengua destino para resolver la tarea.
Descripción: Es habitual en problemas relacionados con la minería de textos y el procesamiento del lenguaje natural que para una determinada tarea se dispongan de herramientas y recursos cuando ésta está limitada a un determinado dominio o a una lengua. Las técnicas de aprendizaje por transferencia (transfer learning) permiten exportar y aprovechar ese conocimiento en otro dominio de especialidad o lengua. Las aplicaciones estarán relacionadas con el dominio biomédico.
Metodología: Se desarrollarán y aplicarán diferentes técnicas de aprendizaje por transferencia a una tarea concreta.
Requisitos: Conocimientos de Java o Python.
Directores: Víctor Fresno (vfresno@lsi.uned.es) y Enrique Amigó (enrique@lsi.uned.es)
Objetivo: El objetivo de este proyecto es el desarrollo de una aplicación que permita comparar representaciones de frases cortas (sentences) basadas en embeddings generados con diferentes modelos de Deep Learning.
Descripción: Desarrollo de una aplicación que permita integrar y comparar diferentes modelos Transformers recopilados en https://huggingface.co/transformers.
Metodología: Se realizará en primer lugar un estudio del problema de la creación de embeddings para representar fragmentos de textos más largos que una palabra, así como de las diferentes arquitecturas neuronales que se han propuesto con este objetivo. Se desarrollará una aplicación que permita ejecutar en paralelo diferentes modelos y aplicar fases de fine-tuning a cada uno de ellos.
Requisitos: Conocimientos de Python.
Director: Francisco Iniesto (finiesto@lsi.uned.es)
Objetivo: El objetivo de este proyecto es la creación de una dashboard que permita comparar las auditorias de accesibilidad web WCAG 2.1 realizadas sobre un mismo o varios recursos (una misma página o portal), por distintos evaluadores, en diversos formatos visuales y estadísticos.
Descripción: El WCAG 2.1 (Web Content Accessibility Guidelines 2.1) es un conjunto de pautas y estándares desarrollados por el World Wide Web Consortium (W3C) para mejorar la accesibilidad de los sitios web y las aplicaciones web. En total, el WCAG 2.1 incluye 13 pautas principales, que se dividen en 61 criterios de éxito. El dashboard debe permitir importar datos, así como crear, editar y guardar auditorías de accesibilidad WCAG 2.1 directamente en el entorno. Además, la visualización de modelos comparativos, incluyendo datos estadísticos, así como la visualización de los resultados de distintas auditorias y comparativas de las mismas.
Metodología: En primer lugar, se realizará un estudio de los principales dashboards existentes en el área de las ciencias y su uso. Posteriormente se procederá a investigar de las distintas herramientas para su creación. Una vez elegida la mejor opción se procederá a su implementación.
Requisitos: Básicos: conocimientos de programación para entornos gráficos (por ejemplo, Python/ Altair o Dash) y conocimientos en estadística. Deseados: lectura de documentación en inglés y de entornos como Tableau, Power BI o similares.
Director: Miguel Ángel Rodríguez García (miguelangel.rodriguez@lsi.uned.es)
Objetivo. Este TFG tiene por objetivo desarrollar modelos de aprendizaje automático para resolver problemas actuales en el procesamiento, entendimiento y generación del lenguaje natural.
Descripción. Debido la diversidad del dominio de aplicación de este TFG, el primer paso se centra en concretar el dominio del problema a resolver. Actualmente, en el procesamiento del lenguaje existen diversos problemas que van desde problemas de textos generativos, análisis contenido clínico, identificación de lenguaje inclusivo o dañino, evaluación de perfiles políticos, entre otros. Después de seleccionar el problema a abordar, se deberá identificar conjuntos de datos, diseñar e implementar algoritmos basados en aprendizaje automático para tratar de resolver el problema.
Metodología: La realización del proyecto se llevará acabo mediante una metodología incremental que permita al alumno ir aprendiendo paso a paso, desde el inicio con algoritmos de aprendizaje automático básicos, hasta el desarrollo de arquitecturas profundas de redes neuronales.
Requisitos previos: Habilidades de programación en lenguajes interpretado como python y dominio del inglés para la lectura de la documentación
Directores: Raquel Martínez Unanue (raquel@lsi.uned.es) y Soto Montalvo (soto.montalvo@urjc.es)
Objetivo: En este proyecto se pretende diseñar e implementar un sistema para el reconocimiento de entidades biomédicas y la identificación de un determinado conjunto de relaciones entre ellas en textos de biomedicina en español.
Descripción: El reconocimiento de entidades y las posibles relaciones que puedan existir entre ellas es fundamental para la extracción de conocimiento de textos no estructurados. Existen diferentes enfoques en el estado del arte, fundamentalmente basados en aprendizaje automático, pero su eficacia es limitada dada la dificultad del problema.
Metodología: Se partirá del estudio de los sistemas existentes que resuelven este problema de manera más exitosa y se llevará a cabo una implementación basada en ellos. El sistema se desarrollará y se evaluará con los recursos proporcionados en https://knowledge-learning.github.io/ehealthkd-2020/.
Requisitos: Conocimientos de Java o Python.
Directores: Lourdes Araujo Serna (lurdes@lsi.uned.es) y Juan Martinez-Romo (juaner@lsi.uned.es)
Objetivo: En este proyecto se pretende diseñar e implementar un sistema para la visualización interactiva de los eventos y datos más relevantes mencionados en un documento médico ordenados temporalmente.
Descripción: Este tipo de herramientas son de gran utilidad para el personal sanitario que puede obtener una imagen inmediata del historial de un paciente, sin necesidad de una lectura detallada de largos documentos. El desarrollo del proyecto requiere representar las menciones
temporales que aparecen en el documento (hace 3 años, todas las semanas, etc.), así como de los sucesos médicos (ingreso, nueva medicación, etc.), y las relaciones entre ellos.
Se necesitará también explorar las opciones más adecuadas para la visualización de los datos.
Metodología: Se partirá del estudio de los sistemas existentes que resuelven este problema de manera más exitosa y se llevará a cabo una implementación basada en ellos.
Los datos de entrada al sistema se realizarán mediante ficheros de intercambio de datos en formato JSON.
El sistema se desarrollará y se evaluará con datos anotados con eventos y expresiones temporales.
Requisitos: Conocimientos de Python.
Directores: Alberto Pérez (alberto.perez@lsi.uned.es) y Santiago Dueñas (sduenas@bitergia.com)
Objetivo: Desarrollar un componente para SortingHat que:
- Recomiende qué perfiles de usuarios podrían corresponder a la misma persona (y por tanto podrían ser mezclados)
- Recomiende al usuario cuál podría ser la organización a la que pertenece una determinada identidad de SortingHat en base a información disponible públicamente en Internet.
Descripción: GrimoireLab es un toolkit Open Source para la recolección, enriquecimiento, consumo y visualización de datos procedentes de herramientas comunmente utilizadas en el proceso de desarrollo de Software Libre (Git, GitHub. GitLabe, Gerrit, Jira, Jenkins, StackExchange, Pipermail, etc.). La manera en que se visualzan los datos es a través de dashboards (p.e. https://chaoss.biterg.io/). Estos Dashboards se construyen sobre OpenSearch Dashboards (antes Kibana). Una parte importante de estos dashboards son las identidades únicas, o dicho de otra forma, las personas que hay detrás de los perfiles de usuarios que se encuentran en las distintas fuentes de datos. Para ser capaces de calcular y mostrar métricas robustas es muy importante ser capaces de atribuir las contribuciones a sus autores independientemente de la fuente o el perfil que utilicen para realizarlas. La gestión de estas identidades la realiza un componente llamado SortingHat que permite mezclar o separar perfiles de usuario y asignarles las organizaciones a las que han pertenecido durante un periodo de tiempo determinado.
Este trabajo está orientado a mejorar SortinHat para facilitar al usuario parte del trabajo manual que debe realizar para gestionar las identidades. Para ello se proponen dos caminos principales (durante el desarrollo del trabajo el alumno puede proponer abordar nuevas líneas de trabajo si lo desea, cuya inclusión será evaluada por los directores):
- Recomendación de perfiles similares para mezclar. Se trata de encontrar perfiles que pudieran pertenecer a la misma persona y que no estén aún mezclados. Para ello contamos con la información almacenada en la propia base de datos de SortingHat y podríamos basarnos en la similitud de nombres, correos electrónicos, nombres de usuario, etc. Sería conveniente además que con la sugerencia se incluya cierta información de por qué se realiza o con qué grado de confianza se propone.
- [Extra] También se podría explorar el uso de la información de los perfiles mezclados manualmente para extraer umbrales o reglas que aplicar automáticamente.
- Recomendación de afiliaciones. Dado una identidad, SortingHat es capaz de asociarla a una organización en base al dominio de su correo electrónico, sin embargo hay dos cosas que no hace y que serán parte de este trabajo:
- Cuando aparece un dominio para el que no hay organización asociada, buscar la posible organización y sugerir al usuario su inclusión en la base de datos.
- Cuando un usuario no tiene correo electrónico asociado o éste pertenece a un servidor genérico (gmail, hotmail, etc.) actualmente no hay más solución que buscar manualmente en Internet esa persona y tratar de averiguar a que organización pertenece. El objetivo sería reproducir en la medida de lo posible esos pasos manuales para que se realicen de forma automática y proponer al usuario la posible organización o las fuentes en las que se ha encontrado información relevante para que la consulte y decida. Por ejemplo, un camino habitual es buscar su perfil en GitHub y ver si tiene organización asociada y buscar su nombre en LinkedIn para comprobar si tiene perfil publico con información de afiliación. Ambas cosas, y posiblemente otras, podrían automatizarse para facilitar el trabajo del administrador de SortingHat.
Metodología: El trabajo se llevará a cabo en varias etapas tratando en cada una de ellas de incorporar nuevas funcionalidades respecto a la anterior. Se seguirá un modelo de desarrollo de Software Libre. El proyecto tendrá licencia libre y se desarrollará utilizando un repositorio alojado en GitHub, siguiendo un modelo de forks, ramas y releases (si fuera necesario) básico y utilizando Issues y Pull Requests para documentar los cambios y las posibles mejoras.
La idea final es tener una serie de desarrollos que puedan ser contribuídos upstream a SortingHat. Si bien que esto se realice o que sean aceptados no es requisito necesario para el trabajo, sí es deseable completar el ciclo para entender mejor cómo funcionan los proyectos de este tipo.
En cuanto a las etapas, una posible división sería como sigue:
- Instalar GrimoireLab y entender su arquitectura y funcionamiento. Será necesario disponer de un entorno funcional y con datos para poder realizar pruebas en las etapas posteriores. Sobre todo nos centraremos en SortingHat y sus interacciones con el resto de componentes, su API y su front-end web.
- Evaluación de alternativas para sugerir perfiles similares para mezclar.
- Implementación de alguna(s) de estas alternativas.
- Evaluación de alternativas para sugerir nuevas organizaciones que incluir en la base de datos.
- Implementación de alguna de estas alternativas.
- Evaluación de alternativas para sugerir posibles afiliaciones para las identidades más allá del dominio de su e-mail y de los confines de SortingHat.
- Implementación de alguna de estas alternativas.
Si bien el trabajo propone varias líneas de acción, dependiendo de la profundidad con la que se vayan atacando cada una de ellas puede que no se lleguen a cubrir todas estas etapas.
Requisitos: Conocimientos de Python, JavaScript, SQL, GraphQL (recomendable, pero se puede aprender durante el trabajo) e inglés leído y escrito
Directores: Alberto Pérez (alberto.perez@lsi.uned.es) y Santiago Dueñas (sduenas@bitergia.com)
Objetivo: El objetivo de este proyecto es integrar un sistema de gestión de credenciales en GrimireLab de tal manera que cualquier componente pueda solicitar las credenciales para acceder a una fuente de datos o servicio.
Descripción: GrimoireLab es un toolkit Open Source para la recolección, enriquecimiento, consumo y visualización de datos procedentes de herramientas comúnmente utilizadas en el proceso de desarrollo de Software Libre (Git, GitHub. GitLabe, Gerrit, Jira, Jenkins, StackExchange, Pipermail, etc.).
Las técnicas utilizadas para la recolección de los datos son diversas y suelen depender de sus fuentes. Por ejemplo, en la versión actual de GrimoireLab, para obtener información de los commits de un repositorio Git, se analiza su log obtenido mediante la ejecución del comando `git log`; para leer los informes de errores (issues) de Bugzilla, se analiza un fichero XML obtenido de la ejecución de un CGI, o para recuperar los datos sobre pull request de GitHub, se utiliza su API REST. En cualquier caso e independientemente del método empleado, el acceso y uso suele estar limitado mediante el uso de credenciales.
Las credenciales permiten a la fuente de datos (herramienta, aplicación web, etc) determinar que el usuario que intenta acceder es quien dice ser (comúnmente conocido como autenticación) y al mismo tiempo, limitar el acceso a los datos en base a su tipo y a las acciones que se pueden realizar sobre estos (también conocido como autorización). En GitHub, por ejemplo, si el usuario no tiene permisos de lectura de un repositorio privado, no podrá descargar información sobre sus issues, pero sí lo podrá hacer sobre todos los repositorios públicos. También se verá limitado en el uso de su API, ya que está restringida a un número determinado de peticiones por hora. Si se hacen más peticiones a la API de las permitidas, tendrá que esperar a que transcurra este tiempo para volver a utilizar su API.
Las credenciales a su vez pueden ser de varios tipos: claves simétricas (usuario y contraseña), claves asimétricas (GPG), tokens de autenticación (JWT), etc.
Actualmente, en GrimoireLab, la gestión de credenciales no es la más adecuada. Se guardan en ficheros de configuración, por lo que, si los permisos de acceso a estos ficheros son erróneos, cualquiera podría tener acceso a estas credenciales. También les resulta complicado a los administradores añadir nuevas credenciales, o actualizar o cancelar las ya existentes cuando su número es elevado. Al mismo tiempo, no se permite proporcionar distintas credenciales para una misma fuente de datos en base a las necesidades. Afortunadamente existen soluciones libres que permiten solucionar todos estos problemas de manera eficiente. Por ejemplo una de las más conocidas es HashiCorp Vault.
El objetivo de este proyecto es elegir una herramienta que permita la gestión eficiente de credenciales y secretos e integrarla en GrimoireLab teniendo en cuenta los siguientes requisitos:
- Gestión de todos los tipos de credenciales usados en GrimoireLab.
- Acceso directo de los componentes de GrimoireLab a las credenciales, evitando el paso de estas entre componentes.
- Manejo de las credenciales de los servicios que usa la plataforma (MariaDB/Mysql, Redis, OpenSearch/ElasticSearch).
- Permiso de creación de una bolsa de credenciales para una misma fuente de datos.
- Uso múltiple de una misma credencial en distintas fuentes de datos.
Metodología: El trabajo se llevará a cabo en varias etapas tratando en cada una de ellas de incorporar nuevas funcionalidades respecto a la anterior. Se seguirá un modelo de desarrollo de Software Libre. El proyecto tendrá licencia libre y se desarrollará utilizando un repositorio alojado en GitHub, siguiendo un modelo de ramas y releases básico y utilizando Issues y Pull Requests para documentar los cambios y las posibles mejoras.
La idea final es tener un proyecto de Software Libre real que cualquiera pueda utilizar y al que cualquiera pueda contribuir, como lo son los proyectos de GrimoireLab.
- Instalar GrimoireLab y entender su arquitectura y funcionamiento. Será necesario disponer de un entorno funcional y con datos para poder realizar pruebas en las etapas posteriores.
- Entender los requisitos específicos de cada tipo de credencial gestionado por GrimoireLab.
- Seleccionar una herramienta de software libre que permita la gestión de credenciales en base a los requisitos obtenidos en el punto anterior.
- Implementar la gestión y acceso a las credenciales de una fuente de datos basada en API tokens (por ejemplo, GitHub).
- Implementar la gestión de un pool de API tokens de la fuente de datos seleccionada en el punto anterior.
- Implementar el uso de distintos tokens para una misma fuente de datos dependientes del repositorio.
- Implementar la gestión de las credenciales de acceso a los distintos servicios usados por GrimoireLab: MariaDB, Redis, OpenSearch.
- Implementar el resto de credenciales soportadas por GrimoireLab y obtenidas en el punto 2.
Requisitos: Conocimientos de Python, conocimientos básicos de seguridad informática (ciberseguridad) e inglés leído y escrito