Full text
Extracción de recuerdos de vídeos de entrevistas con personas con problemas de memoria Trabajo de Fin de Grado Curso 2021–2022 Autor Hugo García González Director Alberto Díaz Esteban Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid
Memory extraction from video interviews with people with memory problems Trabajo de Fin de Grado en Ingeniería Informática Departamento de Ingeniería de Software e Inteligencia Artificial Autor Hugo García González Director Alberto Díaz Esteban Convocatoria: Septiembre 2022 Calificación: 9 Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid 23 de septiembre de 2022
Autorización de difusión El abajo firmante, matriculado en el Grado en Ingeniería en Informática de la Facultad de Informática, autoriza a la Universidad Complutense de Madrid (UCM) a difundir y utilizar con fines académicos, no comerciales y mencionando expresamente a su autor el presente Trabajo Fin de Grado: “Extracción de recuerdos de vídeos de entrevistas con personas con problemas de memoria”, realizado durante el curso académico 2021-2022 bajo la dirección de Alberto Diaz Esteban en el Departamento de Ingeniería de Software e Inteligencia Artificial, y a la Biblioteca de la UCM a depositarlo en el Archivo Institucional E-Prints Complutense con el objeto de incrementar la difusión, uso e impacto del trabajo en Internet y garantizar su preservación y acceso a largo plazo. Hugo García González 23 de septiembre de 2022 v
Dedicatoria Dedicado a aquellos que anduvieron antes de mí. vii
Agradecimientos Agradezco a Alberto por haber dirigido este trabajo de forma excelente, a la Universidad Complutense por la formación que me ha dado para llegar hasta aquí, y a mis padres por su apoyo e interés. ix
4.2. Obtención de la transcripción . . . . . . . . . . . . . . . . . . 17 4.3. Clasificación de preguntas . . . . . . . . . . . . . . . . . . . . 18 4.4. Generación de grafos . . . . . . . . . . . . . . . . . . . . . . . 18 4.5. Almacenamiento en base de datos . . . . . . . . . . . . . . . . 21 4.6. Implementación con interfaz gráfica . . . . . . . . . . . . . . . 23 4.7. Implementación en notebook con Google Colab . . . . . . . . 25 5. Resultados 27 5.1. Generación y almacenamiento de grafos . . . . . . . . . . . . 27 5.1.1. Pregunta1 ........................ 28 5.1.2. Pregunta2 ........................ 29 5.1.3. Pregunta3 ........................ 30 5.1.4. Pregunta4 ........................ 31 5.1.5. Pregunta5 ........................ 32 5.1.6. Pregunta6 ........................ 33 5.1.7. Pregunta7 ........................ 34 5.1.8. Pregunta8 ........................ 35 5.1.9. Pregunta9 ........................ 36 5.1.10. Grafo completo . . . . . . . . . . . . . . . . . . . . . . 37 6. Conclusiones y trabajo futuro 39 6.1. Conclusiones ........................... 39 6.2. Trabajofuturo .......................... 40 6. Conclusions and future work 41 6.1. Conclusions............................ 41 6.2. Futurework............................ 42 Bibliografía 43
Índice de figuras 1.1. Representación visual de la transformación de entrevista a grafo 2 1.1. Visual representation of the transformation from interview to graph ............................... 4 2.1. PipelineSpacy .......................... 6 2.2. Visualización de dependencias sintácticas en Spacy . . . . . . 7 2.3. Grafo generado por Grafeno . . . . . . . . . . . . . . . . . . . 8 2.4. Comparación modelos de almacenamiento . . . . . . . . . . . 9 2.5. Ejemplo de transcripción con separación de hablantes, puntuación y términos específicos de dominio . . . . . . . . . . . 10 3.1. Diagrama Gantt del trabajo realizado . . . . . . . . . . . . . 13 4.1. Diagrama del funcionamiento del Sistema . . . . . . . . . . . 16 4.2. Configuración pipeline Grafeno . . . . . . . . . . . . . . . . . 19 4.3. Consultas Cypher tipo CREATE . . . . . . . . . . . . . . . . 22 4.4. Consultas Cypher tipo MERGE . . . . . . . . . . . . . . . . . 22 4.5. Diagrama de secuencia del sistema . . . . . . . . . . . . . . . 23 4.6. Interfaz gráfica mostrando los resultados de una transcripción automática ............................ 24 4.7. Interfaz gráfica mostrando los resultados de extracción de grafos sobre una transcripción manual . . . . . . . . . . . . . . . 24 4.8. Celda con formulario . . . . . . . . . . . . . . . . . . . . . . . 25 4.9. Celda con código ejecutada con su output . . . . . . . . . . . 26 xvii
5.1. Texto y grafo pregunta 1 . . . . . . . . . . . . . . . . . . . . . 28 5.2. Propiedades nodo tipo fecha . . . . . . . . . . . . . . . . . . . 28 5.3. Texto y grafo pregunta 2 . . . . . . . . . . . . . . . . . . . . . 29 5.4. Texto y grafo pregunta 3 . . . . . . . . . . . . . . . . . . . . . 30 5.5. Texto y grafo pregunta 4 . . . . . . . . . . . . . . . . . . . . . 31 5.6. Texto y grafo pregunta 5 . . . . . . . . . . . . . . . . . . . . . 32 5.7. Texto y grafo pregunta 6 . . . . . . . . . . . . . . . . . . . . . 33 5.8. Texto y grafo pregunta 7 . . . . . . . . . . . . . . . . . . . . . 34 5.9. Texto y grafo pregunta 8 . . . . . . . . . . . . . . . . . . . . . 35 5.10. Texto y grafo pregunta 9 . . . . . . . . . . . . . . . . . . . . . 36 5.11.Grafocompleto.......................... 37
Cap´ ıtulo 1 Introducción “Sin memoria no somos” — Luis Rojas Marcos 1.1. Motivación Este TFG forma parte del proyecto CANTOR, el cual propone el desarrollo de una herramienta de creación de historias de vida haciendo uso de técnicas de Inteligencia Artificial. Estas historias de vida se generan a partir de documentos del paciente e información obtenida en entrevistas terapéuticas. Trabajos pasados han estudiado y diseñado sistemas enfocados a las distintas partes de dicho proceso, como por ejemplo el almacenamiento de los datos [1], recopilación de datos de redes sociales [2], generación de preguntas [3], evocación de recuerdos [4] y generación de resúmenes a partir de entrevista [5]. Partiendo de ese último, este TFG se centra en la extracción y tratamiento de información de las entrevistas para obtener un resultado estructurado que puede ser utilizado por otros procesos, por ejemplo, la generación de historias de vida. La idea por la que nos decidimos fue usar un modelo de datos basado en grafo semántico. Para implementarlo creamos un sistema que toma como entrada una entrevista en formato de vídeo, audio o transcripción; procesa cada pregunta con su respuesta transformándolos en grafos; y finalmente combina todos los grafos en un solo grafo semántico que representa el contenido total de la entrevista de forma estructurada. La siguiente figura muestra un esquema conceptual del proceso. 1
2Capítulo 1. Introducción Figura 1.1: Representación visual de la transformación de entrevista a grafo 1.2. Objetivos Investigar las herramientas de procesamiento de lenguaje natural actualmente disponibles para determinar las posibilidades de estructuración de la información en forma de grafo. Implementar un sistema que estructure y almacene en forma de grafo la información de una entrevista terapéutica guiada en vídeo. 1.3. Organización de la memoria Los contenidos de este documento se organizan de la siguiente manera: En el Capítulo 1 se expone la motivación y los objetivos propuestos. En el Capítulo 2 se habla de las tecnologías y herramientas actuales relevantes para este trabajo. En el Capítulo 3 se habla de cómo se ha desarrollado este trabajo. En el Capítulo 4 se explica y se muestra en detalle los componentes y el funcionamiento del sistema creado en este trabajo. En el Capítulo 5 se muestran los resultados que produce el sistema. En el Capítulo 6 se explican las conclusiones sacadas en la realización de este trabajo y las líneas de desarrollo futuras.
Chapter 1 Introduction 1.1. Motivation This end of degree project forms part of the CANTOR project, which proposes the development of a life story creation tool, making use of Artificial Intelligence techniques. Life stories are generated out of documents from the patient and information obtained from therapeutic interviews. Past works have studied and designed systems dedicated to the different parts of said process, such as the storage of the data [1], the gathering of data from social networks [2], generation of questions [3], the recollection of memories [4] and the generation of summaries out of interviews [5]. Continuing from the last one, this project focuses on the extraction and processing of the information in the interviews, to obtain a structured result that can be used by other processes, for example the generation of life stories. The idea we chose was to use a data model based on a semantic graph. In order to implement it we created a system that takes an interview in video, audio or transcription format as input; then processes each question and its answer transforming them into graphs; and finally combines all the graphs in a single final semantic graph which represents the total content of the interview in a structured form. The following figure shows an outline of the process. 3
4Chapter 1. Introduction Figure 1.1: Visual representation of the transformation from interview to graph 1.2. Objectives Investigate the language processing tools currently available to determine the possibilities of structuring information into graph form. Implement a system capable of structuring and storing as graphs the information in a therapeutic interview. 1.3. Organization of the document The contents of this document are organized in the following way: In Chapter 1 the motivation and objectives are presented. In Chapter 2 the tools and technologies relevant for this project are discussed. In Chapter 3 the way this project was developed is discussed. In Chapter 4 the components and functioning of the system created in this project is explained and displayed in detail. In Chapter 5 the results produced by this system are displayed. In Chapter 6 the conclusions obtained from realizing this work and the future lines of work are discussed.
Cap´ ıtulo 2 Estado de la cuestión 2.1. Herramientas PLN El PLN (Procesamiento de Lenguaje Natural) es un campo que combina la informática y la lingüística para entender y procesar el significado de un texto de forma automática. Actualmente hay gran variedad de herramientas PLN de código abierto. Algunas de las más populares son: Spacy, Freeling, NLTK y GATE. Spacy es la que se ha elegido para la realización de este trabajo. Entre las opciones propietarias están las APIs de Google Cloud, IBM Watson, Microsoft Azure y Amazon Comprehend. Son muy buenos servicios, pero tienen la desventaja del coste de uso y las limitaciones que tienen las pruebas gratuitas a la hora de mantener el sistema a largo plazo. 2.2. Spacy Spacy [6] es una biblioteca open source de Python, diseñada para el desarrollo de aplicaciones de extracción de información y comprensión de lenguaje natural. Sus puntos fuertes son la sencillez de uso y velocidad de procesamiento. Spacy ofrece la funcionalidad altamente integrada, documentada en detalle y actualizada con las últimas tecnologías para alcanzar los estándares del estado del arte actual. El procesamiento de Spacy se organiza en la pipeline que se puede ver en la Figura 2.1. Recibe texto como entrada y produce una estructura Doc que se transmite y modifica de componente a componente hasta llegar al final. 5
6Capítulo 2. Estado de la cuestión Figura 2.1: Pipeline Spacy 1 Los componentes son los siguientes: Tokenizer: El primer componente básico, que segmenta el texto en Tokens y crea el Doc. Tagger: Asigna el tipo de palabra (part-of-speech tag) a los Tokens, como sustantivo, verbo, adverbio, etc. DependencyParser: establece las relaciones de dependencias sintácticas entre los Tokens, como objeto directo, complemento, etc. EntityRecognizer: Reconoce y clasifica entre los Tokens tipos de entidades como lugares, personas, organizaciones, etc. Lemmatizer: Asigna a los Tokens la forma base de sus palabras. TextCategorizer: Asigna categoría al Doc (documento completo). Morphologizer: Predice características morfológicas en los Tokens. SentenceRecognizer: Reconoce los limites de las frases. Custom: Componente creado por el usuario. La estructura Doc resultante almacena las características generales del documento y todos los Tokens con sus características individuales. Por último, Spacy ofrece la búsqueda de patrones a partir de reglas utilizando el Matcher, la comparación de similitud con otro Doc utilizando el método similarity y la serialización para almacenar los resultados. 1Imagen obtenida de https://spacy.io/usage/processing-pipelines
2.3. Grafeno 7 Figura 2.2: Visualización de dependencias sintácticas en Spacy La figura 2.2 muestra un ejemplo de cómo Spacy establece las dependencias sintácticas a partir de una frase. Los tokens estan etiquetados por sus categorías gramaticales y entre ellos se conectan con flechas las dependencias sintácticas. Esta es una función de gran importancia para este trabajo. A pesar de ser compatible con 64 idiomas, el verdadero potencial de Spacy viene en los pipelines pre-entrenados disponibles para 19 idiomas, entre ellos el español. Estos pipelines emplean modelos estadísticos de información etiquetada para hacer predicciones sobre el nuevo texto a procesar. El modelo español es_core_news_lg presenta resultados superiores al 0.9 en todas las evaluaciones de precisión, recall y F-score de sus componentes 2. 2.3. Grafeno Grafeno [7] es una biblioteca de Python open source desarrollada en el Departamento de Ingeniería de Software e Inteligencia Artificial de la Universidad Complutense de Madrid, dedicada a la extracción de información semántica en forma de grafo a partir de texto. Esta herramienta es de gran interés para este trabajo, ya que consideramos que dicha representación es una de las más adecuadas para estructurar el tipo de información que se transmite en una entrevista. 2https://spacy.io/models/es#es_core_news_lg
Cap´ ıtulo 4 Sistema de extracción y almacenamiento de grafos El sistema desarrollado en este TFG tiene como principal función estructurar la información expresada en una entrevista en forma de grafos y almacenarla en una base de datos. Dado que el objetivo es procesar entrevistas terapéuticas en las que el terapeuta hace preguntas al paciente, el sistema está diseñado para identificar las preguntas y respuestas de la entrevista a partir de un guión de preguntas predeterminado. De esta forma se puede ajustar la estructuración en base al tipo de pregunta, y además se puede mantener la relación entre la información estructurada y la pregunta del guión a la que se corresponde. La información estructurada se almacena en una base de datos de grafos. Allí se combinan los grafos individuales correspondientes a cada pregunta del guión, combinando las partes comunes para formar un único grafo final. El resultado final es un grafo que representa toda la información de la entrevista de manera conectada, sin repeticiones y clasificada acorde a las preguntas. 15
16 Capítulo 4. Sistema de extracción y almacenamiento de grafos 4.1. Diseño general Figura 4.1: Diagrama del funcionamiento del Sistema El sistema tiene 4 partes principales: Obtención de transcripción: La transcripción de la entrevista se obtiene de manera automática a partir de un vídeo o audio, o de manera manual por el usuario introduciendo el texto. Clasificación de preguntas: La transcripción se divide en segmentos que contienen cada pregunta del guión con su respuesta. Generación de grafos: Cada segmento se transforma en un grafo, teniendo en cuenta el tipo de pregunta a la que se corresponde.
4.2. Obtención de la transcripción 17 Almacenamiento en base de datos: Los grafos se linearizan a un formato de consulta para ser agregados a la base de datos. A continuación se explicará más a fondo el funcionamiento de cada parte. 4.2. Obtención de la transcripción Para generar la transcripción de forma automática se utiliza la API de Google Cloud Speech to Text. Se aceptan archivos de vídeo y audio. Si la entrada es un archivo de vídeo, es necesario transformarlo a un archivo de audio. El sistema realiza este paso usando la biblioteca de Python MoviePy. Siguiendo las recomendaciones descritas en [5], se ajusta la frecuencia del audio a los rangos de la voz humana, se pone el audio a un solo canal y se normaliza. Una vez el audio está listo, se procede a subirlo a Google Cloud Storage. Para autenticarse en la API, el sistema configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS con el path a la clave de cuenta de servicio. Una vez autenticado se sube el audio a un bucket de Google Cloud Storage. A continuación se hace la petición a la API Speech to Text. La petición se forma con la URI que representa el audio en Google Cloud Storage y una configuración. En esta configuración se especifica el tipo de transcripción que se desea llevar a cabo. Configuración: language_code = ’es-ES’ →idioma español enable_speaker_diarization=True →separación por hablantes diarization_speaker_count=2 →número de hablantes enable_automatic_punctuation=True →puntuación automática En respuesta a la petición, la API devuelve en orden todas las palabras identificadas con su hablante asociado. Con ellas el sistema forma las frases de cada hablante, completando la transcripción automática. La transcripción resultante puede contener algunos fallos, especialmente debido a las dificultades de reconocimiento que presenta la forma de hablar de los pacientes de avanzada edad con demencia. Los fallos más comunes son la separación incorrecta de frases entre los hablantes y la incorrecta interpretación de palabras.
18 Capítulo 4. Sistema de extracción y almacenamiento de grafos Para evitar que estos fallos se propaguen a las siguientes fases del proceso, el sistema permite al usuario corregir los fallos de la transcripción antes de procesarla. 4.3. Clasificación de preguntas Para clasificar las preguntas de la transcripción, el sistema utiliza un guión de preguntas que establece que preguntas debe buscar y sus tipos. Esta información se almacena en un archivo JSON con el siguiente formato: "preguntas": { "¿Cómo te llamas?": 0, "¿En qué año naciste?": 1, ...} El número representa el tipo de pregunta. En el sistema hay 3 tipos definidos: 0: Grafo general, para las preguntas en las que se quiere estructurar toda la información. Ejemplo: ¿Qué tal fue tu juventud, que aficiones tenías? 1: Fechas, para las preguntas en las que se busca una fecha en particular. Ejemplo: ¿En qué año naciste? 2: Texto, para las preguntas en las que se quiere almacenar la respuesta sin modificar. Ejemplo: ¿Recuerda alguna anécdota? Una vez cargado el archivo JSON, el sistema analiza para cada pregunta del guión cuál es la línea de la transcripción más similar usando el medidor de similaridad de Spacy, y con esa información forma los segmentos. Un segmento abarca desde su propia pregunta hasta el comienzo de la siguiente (se entiende que entre dos preguntas consecutivas se halla la respuesta a la primera). Cada segmento finalizado se manda a procesar. 4.4. Generación de grafos Para transformar texto en grafos el sistema utiliza una versión modificada de la biblioteca Grafeno.
4.4. Generación de grafos 19 Una de las modificaciones realizadas a Grafeno fue corregir un problema de versiones con la biblioteca interna Networkx. Ambas, la versión recomendada por Grafeno y la última versión producían errores. Como solución se optó por actualizar el código de Grafeno para que fuera compatible con la última versión de Networkx, ya que era un arreglo sencillo. El resto de modificaciones añaden funcionalidad al conjunto de transformadores para poder procesar mejor el lenguaje en español. Los transformadores nouns ykeep_deps fueron modificados. Los transformadores determinants,pronouns_es yomitted_subject fueron creados. Más adelante se hablará sobre cada uno de ellos. Como se ha comentado previamente en el Capítulo 2, la generación de grafos depende de la selección de transformadores y del árbol de dependencias sintácticas original. El sistema crea el árbol sintáctico usando el transformador spacy_parse. El resto de la pipeline se define en la siguiente configuración: transformers : −pos_extract −unique −keep_deps −nouns −determinants −pronouns_es −omitted_subject −adjectives −adverbs −numerals −attr_class transformer_args : lang : es unknown_dep_translate : KEEP dep_translate : dobj : THEME i o b j : ARG nsubj : AGENT obj : OBJ nmod : CONTEXT advcl : CONTEXT nummod: NUMBER csubj : OBJ conj : UNION Figura 4.2: Configuración pipeline Grafeno
20 Capítulo 4. Sistema de extracción y almacenamiento de grafos La pipeline comienza con pos_extract, transformador recomendado en la documentación para iniciar el proceso. Para cada término del árbol de dependencias semánticamente relevante (sustantivos, verbos, adjetivos, adverbios) crea un nodo en el grafo y les asigna las etiquetas de concept (concepto) y sempos (posición semántica). Ejemplos: casa se transforma en el nodo (concept: casa, sempos: n) voy se transforma en el nodo (concept: ir, sempos: v) unique quita los nodos del grafo repetidos. keep_deps convierte dependencias sintácticas en aristas semánticas usando el diccionario de la sección de argumentos dep_translate. Este diccionario solo pretende mostrar cómo se puede hacer la traducción, y por ello no hace una traducción exhaustiva de todas las dependencias sintácticas posibles. Por ello se ha modificado el transformador para que pueda crear la arista aun si la dependencia no se encuentra en el diccionario, señalado por el argumento unknown_dep_translate = KEEP. Ejemplo: La dependencia -nsubj- (sujeto nominal) se transforma en en la arista <-AGENT- (agente) nouns añade etiquetas de num (plural o singular) y proper (propio o común) a los nodos sustantivos. En español este transformador no funciona, por lo que se modificó el código para que pudiera detectar si el sustantivo era propio o no. Ejemplos: Con animales se añaden las etiquetas num: p, proper: false Con Juan se añaden las etiquetas num: s, proper: true determinants,pronouns_es yomitted_subject son transformadores creados en este trabajo. Buscan en el árbol de dependencias determinantes posesivos en primera persona, pronombres en primera persona y verbos en primera persona, respectivamente. Estos términos suelen representar al paciente en este tipo de entrevista. Por eso para cada uno de ellos se añade al grafo un nodo sustantivo ’Paciente’y las aristas correspondientes. De esta forma se recupera la información implícita del sujeto omitido. Ejemplos: mi trabajo se transforma en (Paciente) <-ATTR- (trabajo)
4.5. Almacenamiento en base de datos 21 yo juego se transforma en (Paciente) <-AGENTE- (jugar) tengo se transforma en (Paciente) <-AGENTE- (tener) adjectives,adverbs ynumerals añade aristas de tipo ATTR (atributo) entre el nodo adjetivo/adverbio/número y el nodo sustantivo al que se asocian. Ejemplos: cielo azul se transforma en (cielo) -ATTR-> (azul) 4 hermanos se transforma en (hermanos) -ATTR-> (4) attr_class añade la etiqueta class a las aristas de tipo ATTR. Dicha etiqueta indica la clase de atributo del que se trata en base al hiperónimo de WordNet del nodo atributo. Por ejemplo, un hiperónimo del adjetivo rojo es color, y esa sería la clase de una arista que lo conectara con un nodo sustantivo. Por otro lado, también añade la etiqueta synset a todos los nodos para guardar el hiperónimo del concepto si existe. Ejemplo: (cielo) -ATTR-> (azul) se transforma en (cielo) -ATTR, class: color-> (azul) Con esto se completa la generación del grafo a partir de texto. Con las preguntas de tipo Fecha se complementa este proceso con el buscador de patrones de Spacy. Grafeno extrae el sujeto y la acción de la pregunta en un grafo, el buscador de patrones encuentra en la respuesta la fecha en la que se lleva a cabo la acción, y lo añade al grafo en un nodo de tipo DATE. Ejemplo: 2 de febrero de 1956 se transforma en el nodo de tipo DATE (day: 2 de febrero, month: febrero, year: 1956) Con las preguntas de tipo Texto el grafo es un solo nodo de tipo TEXT que contiene el texto. El siguiente paso es dar a los grafos un formato adecuado para su almacenamiento. 4.5. Almacenamiento en base de datos Para almacenar los grafos en una base de datos Neo4j el sistema traduce todos los grafos a consultas de lenguaje Cypher.
22 Capítulo 4. Sistema de extracción y almacenamiento de grafos La biblioteca Grafeno viene con el linearizador cypher_create que transforma los grafos a una consulta de tipo CREATE. Un ejemplo de consultas producida: CREATE (n :NOUN { concept : ’ Frase ’ , sempos : ’n ’ , _temp_id : ’ 0 ’ } ) ; CREATE (n :NOUN { concept : ’ ejemplo ’ , sempos : ’n ’ , _temp_id : ’ 1 ’ } ) ; MATCH (n {_temp_id : ’0 ’ }) , (m {_temp_id : ’1 ’}) CREATE (n) −[ r :ATTR]−>(m) ; MATCH (n) REMOVE n . _temp_id ; Figura 4.3: Consultas Cypher tipo CREATE Estas consultas crean en la base de datos los nodos del grafo con sus etiquetas y una ID temporal para después poder añadir las aristas. Una vez se han añadido todos los elementos se borran las IDs temporales. En este trabajo es de interés que en la base de datos se combinen los nodos repetidos y además se añada la etiqueta del número de pregunta que se corresponde a cada grafo. Con ese fin se ha creado un nuevo linearizador cypher_merge basado en el anterior con la diferencia de que crea consultas de tipo MERGE y añade la etiqueta de número de pregunta. Un ejemplo de consulta producida: MERGE (n :NOUN { concept : ’ Frase ’ , sempos : ’n ’ ) SET n : P3 , n . _temp_id= ’0 ’; MERGE (n :NOUN { concept : ’ ejemplo ’ , sempos : ’n ’ } ) SET n : P3 , n . _temp_id= ’1 ’; MATCH (n {_temp_id : ’0 ’ }) , (m {_temp_id : ’1 ’}) CREATE (n) −[ r :ATTR]−>(m) ; MATCH (n) REMOVE n . _temp_id ; Figura 4.4: Consultas Cypher tipo MERGE Estas consultas hacen lo mismo que las anteriores, excepto que solo crea el nodo si aún no existe, y después añade el ID temporal y la etiqueta general de número de pregunta PX (la X se sustituye más adelante por el número). De esta forma se consigue la combinación de grafos mencionada en la introducción de este capítulo. Una vez el sistema ha generado las consultas de todos los grafos correspondientes a todos los segmentos de la entrevista, procede a mandarlos a la base de datos. Para establecer esta conexión se usa la biblioteca de Python de neo4j. El sistema necesita tener usuario y contraseña para la autenticación; y la URI de la base de datos. El sistema también puede mostrar las consultas en pantalla en caso de que el usuario no quiera o pueda conectarse a la base de datos.
4.6. Implementación con interfaz gráfica 23 4.6. Implementación con interfaz gráfica Una de las implementaciones del sistema es un ejecutable de Python con interfaz gráfica. Las interacciones entre los componentes se pueden ver en el diagrama de la figura 4.5. El usuario interactúa con main.py, el módulo que contiene la interfaz gráfica creada con la biblioteca PySimpleGUI. A su vez, main.py interactúa con transcription.py para transcribir la entrevista, y con graph_queries.py para extraer y almacenar los grafos. graph_queries_aux.py es un módulo auxiliar de graph_queries.py. Figura 4.5: Diagrama de secuencia del sistema El diseño de la interfaz sigue un diseño intuitivo y sencillo. Todo el sistema se opera desde una sola ventana. En la mitad izquierda el usuario puede ajustar los parámetros del sistema mediante botones de radio, casillas de verificación, campos de texto y selectores de rutas de archivos. En la mitad derecha se ve la salida y estado del sistema. Las dos vistas principales de la interfaz gráfica se pueden ver en las figuras 4.6 y 4.7. Aparte de la funcionalidad mostrada en las figuras, la interfaz posee también ventanas emergentes de ayuda y aviso de errores.
30 Capítulo 5. Resultados 5.1.3. Pregunta 3 ¿De dónde son tus padres? Mi padre es de León. Mi madre es de Valladolid. Figura 5.4: Texto y grafo pregunta 3 En este grafo se representa la información de procedencia de los padres, y su relación padre-hijo con el paciente mediante atributos. Las dos frases separadas de la respuesta se unen en el grafo por su característica común, el nodo ”paciente” que esta relacionado con el nodo ”madre” y el nodo ”padre”.
5.1. Generación y almacenamiento de grafos 31 5.1.4. Pregunta 4 ¿Tienes algún hermano? Tengo un hermano mayor de 62 años, José. Figura 5.5: Texto y grafo pregunta 4 Este grafo representa la información sobre el hermano del paciente. Su nombre, edad y relación con el paciente se añaden en nodos como conceptos y se unen alrededor del nodo central "hermano". Sin embargo hay dos redundancias. El nodo ”tener” y sus aristas no aportan información nueva, ya que la relación del hermano con el paciente ya se representa con el nodo atributo. El nodo ”año” y ”62” se podrían reducir a uno solo.
32 Capítulo 5. Resultados 5.1.5. Pregunta 5 ¿Que relación tenías con tu hermano? Jugaba mucho con mi hermano en casa. Figura 5.6: Texto y grafo pregunta 5 En este grafo se representa la información sobre la relación del paciente con su hermano, que consiste en la acción de jugar y su contexto. Una vez más, se produce una redundancia con el nodo ”tener”, que se podría reducir para unir de forma más directa el concepto de ”relación” con el paciente y su hermano.
5.1. Generación y almacenamiento de grafos 33 5.1.6. Pregunta 6 ¿Qué te gustaba cuando eras niño? Me gustaban el fútbol y los comics. Figura 5.7: Texto y grafo pregunta 6 En este grafo se representa la información de los gustos del paciente con su contexto temporal. Cuando era niño le gustaban dos cosas: el fútbol y los comics. Esa conjunción no se transmite del todo bien al grafo, ya que el nodo ”comic” esta conectado al nodo ”fútbol” con una arista de tipo unión, cuando debería estar unido al nodo ”gustar”.
34 Capítulo 5. Resultados 5.1.7. Pregunta 7 ¿Cómo eran tus vacaciones? En la vacaciones iba al pueblo de mi padre. En el pueblo hacíamos excursiones por la montaña. Figura 5.8: Texto y grafo pregunta 7 En este grafo se representan la información sobre las vacaciones del paciente. Por un lado está la acción de ir al pueblo, y por otro la acción de hacer excursiones en la montaña. Las dos acciones se representan de forma adecuada interconectadas entre sí en los nodos ”pueblo” y ”paciente”.
5.1. Generación y almacenamiento de grafos 35 5.1.8. Pregunta 8 ¿Qué tal el colegio? Yo era un poco vago, y en el colegio me aburría un poco. Figura 5.9: Texto y grafo pregunta 8 En este grafo se representa la experiencia del paciente en el colegio. Está la cualidad de vago en conjunción la acción de aburrirse y su contexto. En este caso la conjunción sí se transmite de forma adecuada con la arista de tipo unión.
36 Capítulo 5. Resultados 5.1.9. Pregunta 9 ¿Cual era tu asignatura favorita del colegio? Mi asignatura favorita era matemáticas. Yo siempre he sido bueno con las matemáticas. Figura 5.10: Texto y grafo pregunta 9 En este grafo se representa la información relacionada a la asignatura favorita del paciente. Por un lado esta la asignatura y sus características, y por otro la cualidad del paciente de ser bueno en matemáticas. En el centro se puede ver una arista de tipo atributo duplicada. Es una redundancia, pues individualmente son bidireccionales.
5.1. Generación y almacenamiento de grafos 37 5.1.10. Grafo completo Figura 5.11: Grafo completo Este es el grafo completo que contiene todos los subgrafos anteriores. Los colores de los nodos son los mismos en todas las ilustraciones, y representan visualmente su asociación con las preguntas. Se puede ver cómo se conectan entre sí y, dado que esto es una entrevista sobre un paciente, todos tienen el vínculo común en el nodo central ”paciente”. Esta interconexión supone una reducción considerable de nodos. Por separado los subgrafos suman en total 49 nodos. En el grafo final hay 38, un 22% menos.
Cap´ ıtulo 6 Conclusiones y trabajo futuro 6.1. Conclusiones Se ha construido un sistema que permite la extracción, estructuración y almacenamiento de información a partir de entrevistas en formato de vídeo. En él se combinan distintas tecnologías de última generación: La transcripción automática se realiza mediante la tecnología speechto-text de Google. La información se estructura en grafos usando las bibliotecas de Grafeno y Spacy. El resultado se almacena en una base de datos de grafos Neo4j. El speech-to-text de Google produce demasiadas imprecisiones para la tarea en cuestión. Esto se puede mejorar aumentando la calidad del audio de la entrevista para que las voces sean más claras, pero no se puede esperar que la conversación entre el paciente y el doctor se desarrolle con absoluta claridad. La automatización de esta parte del proceso sin fallos requiere un nivel de reconocimiento inteligente que a día de hoy no se ha alcanzado con las herramientas gratuitas disponibles. Es por eso que de momento la transcripción automática debe utilizarse como un complemento para agilizar el proceso y no como un sustituto. Grafeno fue creado para procesar texto en inglés, por lo que sin modificaciones solo puede procesar reglas sintácticas básicas en español. Para superar esta limitación es necesario adaptar las reglas gramáticas del español a los transformadores de Grafeno. En este trabajo se ha implementado el procesamiento de sujetos omitidos en verbos, determinantes y pronombres como 39