2. Diseño de programación de AMEBA

Ameba es la primera versión de un Emobot. Este prototipo tiene la capacidad para experimentar sentimientos, comprender los sentimientos de su interlocutor, escuchar a otras personas y responderles, así como demandar ayuda para satisfacer sus propias necesidades.

Autores

Coordinador del equipo de programación: José Manuel Vargas Montero

Coordinador del equipo de psicología: Jorge Martija

Fecha de inicio del diseño

11 de mayo de 2020 

Versión

0.1 (Versión inicial)

Contenidos

  1. Introducción
  2. Requerimientos de software
  3. Requerimientos funcionales
  4. Arquitectura del software
  5. Etapas
  6. Información acerca de las bases de datos

1. Introducción

El proyecto Ameba, primera versión de un Emobot, tuvo como objetivo crear un software capaz de:

  1. Identificar el estado emocional de una persona a través del análisis de su voz y las palabras que éste emplea
  2. Mantener una conversación
  3. Demandar necesidades básicas
  4. Expresar el estado de ánimo en base a sus propias demandas, el tono emocional del interlocutor y el historial de conversación con el usuario.
  5. Diferenciar conversaciones entre diferentes usuarios.

En primer lugar, fue necesario el diseño de un software personalizado que permitió generar datos de entrenamiento, así como la participación de entrenadores que generaron un dataset de audios asociados a emociones.

1.1. Entorno 

El proyecto fue desarrollado principalmente en Python 3. Hizo uso de librerías existentes en la actualidad para la creación de modelos computacionales de inteligencia artificial, así como de redes neuronales, y demás funcionalidades a disposición. Su ejecución se llevo a cabo por medio de línea de comandos desde la cual se pudo capturar el audio, producir sonido y visualizar mensajes. Finalmente, para permitir mayor uso se generó un servicio web al código desarrollado en Python, con el fin de ser desplegado el sistema en una página web. 

El software de Python se desplegó en un servidor dedicado en la nube (Google Cloud Platform). 

Así mismo se hizo uso de servicios de la nube para convertir el texto a voz, y de voz a texto para agilizar el proceso. 

1.2. Estándares

A lo largo del desarrollo del proceso, se utilizaron estándares de codificación, nomenclatura y demás, con el fin de obtener un proyecto estructurado y facilitar diferentes labores, sin ser esto un criterio de calificación. 

1.3. Documentación

Se utilizó la documentación del modelo teórico de la Arquitectura de las Emociones, así como información pertinente en el diseño e implementación de sistemas de inteligencia artificial. 

2. Requerimientos de Software

Los requerimientos funcionales o características que debía cumplir el software fueron:

  • FSR1 Transcribir voz a texto en lenguaje español. 
  • FSR2 Obtener características básicas de la voz: tono, timbre y volumen. 
  • FSR3 Modelo de inteligencia computacional con lógica difusa o borrosa para interpretar sentimientos. 
  • FSR4 Convertir texto en español a voz. 
  • FSR5 Chatbot basado en sentimientos en español básico. 
  • FSR6 Demanda de necesidades básicas (conversar, pasear, ser cargado) por medio de imágenes y la conversación. 
  • FSR7 Base de datos para entrenamiento y gestión de usuarios.
  • FSR8 Sistema de generación de datos de entrenamiento. 
  • FSR9 Visualizar en colores el sentimiento del sistema. 

Los requerimientos de Testing fueron:

  • ST1 Se probó tanto con voz ingresada a través de un micrófono, como con archivos previamente generados y conocidos. 
  • ST2 Se hizo prueba en vivo visualizando esta información, como con datos conocidos por medio teórico y/o con otras herramientas.
  • ST3 Se ingresaron datos de la voz con el fin de estudiar la respuesta obtenida.
  • ST4 Se pidió convertir un texto ingresado y se escuchó la respuesta. 
  • ST5 Se realizó una conversación observando la consistencia en las respuestas. 
  • ST6 Se forzaron cada una de las necesidades. 
  • ST7 Se ejecutó el modelo de la base de datos como los datos generados.
  • ST8 Se probó el software de datos de entrenamiento. 

3. Requerimientos de ambiente

El presente proyecto se desarrolló en Pycharm Community Edition 2019 o superior como IDE.

Se utilizó el lenguaje de Programación Python 3.8 o 3.7 dependiendo de las dependencias de las librerías.

Los archivos no se almacenaron directamente en el sistema operativo sino que, como gestor de base de datos, se utilizó una base de datos no relacional (MongoDB). Esto nos permitió unas ventajas claras puesto que se trata de un sistema de gestión para los mismos, consultas y demás, una capa adicional de seguridad y la oportunidad de escalar el sistema, facilitando soportar mucho tráfico de usuarios.

Por otra parte, el diseño y los valores en MongoDB se modelaron mediante un sistema de aprendizaje difuso.

4. Arquitectura del software

Se utilizó el modelo arquitectónico basado en Componentes, al ser este bastante flexible para cambios en el futuro y reutilización de desarrollo. Como paradigma de programación se empleó tanto programación orientada a objetos como programación funcional. 

5. Etapas

El objetivo principal fue obtener de manera temprana el “mínimo viable”, es decir, el sistema básico pero completo que permitiera realizar pruebas de todo el sistema en las primeras semanas del proyecto. Para esto se definió una etapa relámpago: 

5.1. Etapa relámpago

Se usaron librerías, servicios de la nube y demás desarrollos existentes para solucionar: 

  1. Transcripción de voz a texto
  2. Conversión de texto a voz
  3. Creación de chatbot emocional en castellano con respuestas preexistentes asociadas a sentimientos
  4. Creación de un modelo con lógica difusa para la interpretación del sentimiento
  5. Generación de la demanda de necesidades de manera determinista 

Estos enfoques permitieron agilizar el desarrollo con el fin de obtener un producto completamente funcional de la manera más rápida posible. Posteriormente se analizaron los resultados y se continuó con el desarrollo del resto de las funcionalidades. 

5.2. Etapa de ajuste

El objetivo de esta etapa fue realizar correcciones y ajustes tempranos con el sistema completamente funcional pero básico, lo que ahorró tiempos futuros de cambios en una etapa más avanzada, así como también evitó desarrollos no pertinentes debido a una interpretación equivocada de los requerimientos. 

5.3. Etapa de interpretación del sentimiento

Para lograr la acertada interpretación de los sentimientos del usuario se emplearon diferentes estrategias:

  1. Análisis de entradas adicionales como las palabras recibidas y el usuario con quien conversa (historial de este).
  2. Extracción de características más específicas de la voz, como tono, timbre, volumen por palabra; pausas y sonidos no vocales.
  3. Empleo de diferentes sistemas de inteligencia computacional (redes neuronales, SVM, otros).
  4. Creación de un diseño propio y modular.

5.4. Etapa de diseño de chatbot basado sentimientos

Este chatbot nos permitió:

  1. Modelar la posibilidad de dar diferentes respuestas, dependiendo del sentimiento del sistema y/o el sentimiento recibido del usuario.
  2. Personalizar la base de pregunta-respuesta por usuario.
  3. Permitir cualquier cambio y mejora futuro.
  4. Para el desarrollo de esta etapa, existe una etapa previa en el análisis de lenguaje natural que permita encontrar la menor distancia entre las frases recibidas. 

5.5. Etapa de demanda de necesidades y generación de conversación de manera autónoma.

Esta etapa tuvo como fin implementar un sistema de inteligencia computacional que permitiera al Emobot no sólo demandar acciones al usuario para satisfacer sus necesidades básicas, sino también iniciar una conversación de manera espontánea dependiendo del sentimiento y el historial de conversación.

5.6. Etapa de conversión de texto a voz

Esta etapa permitió desarrollar un algoritmo propio, gracias a lo cual fue posible: 

  1. No depender de servicios o librerías de terceros.
  2. Disminuir costos y personalizar la funcionalidad.
  3. Modelar el sentimiento del sistema por medio de la dicción de la voz generada en la respuesta. 

5.7. Etapa de transcripción de voz a texto. 

Esta etapa aportó las siguientes ventajas: 

  1. No depender de servicios o librerías de terceros.
  2. Disminuir costos y personalizar la funcionalidad.
  3. Mejorar la transcripción al hacer uso de un conjunto de palabras pertenecientes a un contexto específico por usuario y/o momento.