5. Sobre las funciones conversacionales y su implementación
Redes recurrentes
Los humanos no iniciamos nuestro razonamiento desde cero cada segundo que pasa, por ejemplo, mientras leemos este párrafo, entendemos lo que está escrito basados en nuestro entendimiento de las palabras o frases anteriores. Básicamente, nuestros pensamientos son persistentes.
En este sentido, las redes neuronales tradicionales (NNs) no pueden simular esta tarea por su características secuenciales y olvidan atributos previos. Las redes secuenciales son un tipo de red neuronal en donde cada entrada es procesada de manera independiente sin considerar los datos procesados con anterioridad.
En el caso de las redes recurrentes (del inglés Recurrent Neural Networks RNNs), se utiliza información de los procesos y datos anteriores para calcular una nueva salida. Las llamadas RNNs se utilizan ampliamente para realizar análisis de secuencias ya que están diseñadas para extraer la información contextual definiendo las dependencias entre varios pasos de tiempo. De manera gráfica, las RNNs se caracterizan por un flujo de retroalimentación de sus estados internos.
Long-Short Term Memory (LSTM)
- Una LSTM es un tipo de red neuronal recurrente que contiene celdas de tipo LSTM en lugar de las capas clásicas de las redes neuronales. [fuente: Nimesh]
- Estas celdas tienen varios componentes llamados: input gate, forget gate, y output gate.
- Están explícitamente diseñadas para evitar el problema long-term dependency, recordando información de estructuras largas y cortas.
- Proveen la solución al problema de desvanecimiento de gradiente.
- También poseen una estructura en cadena, pero el módulo repetitivo tiene una estructura diferente. En lugar de tener una sola capa neuronal, hay cuatro que interactúan de manera especial.
Sequence-to-sequence (Seq2seq)
El modelo seq2seq es considerado un modelo auto-regresivo, esto significa que puede predecir un nuevo valor basado en sus predicciones anteriores, por lo que la aplicación más popular de esta herramienta es la traducción. [fuente: Lena Voita]
En los últimos años, los sistemas comerciales se volvieron sorprendentemente buenos en tareas de traducción automática, por ejemplo, Google Translator, Yandex, DeepL Translator, Bing Microsoft Translator. Ver la siguiente figura de ejemplo.
Este modelo consiste de dos RNNs, llamados encoder y decoder. El encoder es encargado de leer la secuencia de entrada, palabra por palabra, y emitir un contexto que idealmente capture la esencia de la secuencia de entrada. Esta información será almacenada por dos estados al final del encoder llamados: [cell, hidden]. Basados en el contexto capturado por los estados del encoder, el decoder genera una secuencia de salida, un valor a la vez mientras observa el contexto de las palabras calculadas con anterioridad. Este proceso es básicamente el que adoptamos para realizar tareas de generación de lenguaje natural (NLG) como el necesario para un sistema conversacional automático.
Base de datos conversacional
Es una base de datos la cual consta de una colección de datos generados manualmente, así como diálogos extraídos de un conjunto público de Kaggle. Las oraciones han sido revisadas, limpiadas y pre-procesadas conteniendo 2000 lineas de diálogo con un vocabulario de 1857 palabras. Ver la siguiente gráfica de nubes de palabras.
Proceso general Seq2seq de entrenamiento
En el caso práctico, dos secuencias de texto correspondientes a un diálogo de tipo pregunta-respuesta son procesados mediante técnicas de tokenización para la conversión de cada palabra, lo que produce una representación numerica de cada frase. Para el caso del decodicador, se utilizan dos palabras reservadas <SOS> y <EOS> que indican respectivamente el inicio y el final de cada oración en la secuencia objetivo. Posteriormente, ambos arreglos son embebidos y utilizados como elemento de entrada de cada bloque LSTM, tanto del codicador, como del decodicador.
Primero, el estado final resultante del codificador es utilizado como estado inicial del decodicador. Posteriormente, el decodicador hará predicciones por cada palabra la cual será comparada con la palabra objetivo. Finalmente, mediante el calculo del error a través de la función de pérdida, el sistema ajustara los pesos de la arquitectura a cada iteración. Los hiperparámetros son ajustados heurísticamente.
- Lectura de los datos
- Limpieza de los datos
- Pre-procesamiento (Tokenización, conteo de palabras, histograma de palabras)
- Construcción y guardado de los diccionarios (formato: .pickle)
- Definir el modelo
- Primera capa embebida (tamaño de conversión = 200)
- Red LSTM de dimensión = (256, return_state = True)
- Encoder de LSTM con salidas: [state_hidden, state_cell]
- Segunda capa embebida = (tamaño de conversión = 200)
- Red LSTM de dimensión = (256, return_sequence = True, return_state = True)
- Decoder de LSTM con salidas: [decoder_output]
- Tercera capa densa = (longitud_diccionario+1 , activation = 'softmax')
- Construcción del modelo: Model([encoder_inputs, decoder_inputs], decoder_outputs)
- Hiper-parámetros
- Optimizador: RMSProp, learning rate = 0.01
- Pérdida: Entropía cruzada categórica (CCE)
- Métrica: Accuracy
- Tamaño del batch: 64
- Épocas: 50
- Dropout: 0.2
- Longitud de la secuencia: 15 palabras
- Salvado del modelo (formato .h5)
- Gráficas de rendimiento. Gráficas que muestran el desempeño de la red en término de perdida (Loss) y precisión (Accuracy) por épocas (Epochs)
Arquitectura Seq2seq de entrenamiento
Proceso general Seq2seq de inferencia
Básicamente, el modelo de inferencia aprovechará todos los parámetros de red aprendidos durante el entrenamiento pero estos serán definidos por separado ya que las entradas y salidas durante la inferencia son diferentes de lo que eran durante el entrenamiento de la red.
En la siguiente figura, observamos que no hay cambios en el lado del encoder de la red. Por lo tanto, alimentamos el nuevo vector con una oración (la ingresada por el usuario) como secuencia de entrada al modelo de encoder y obtenemos los estados finales.
Arquitectura Seq2seq de inferencia
Algunos resultados
A continuación se muestran algunos ejemplos de la característica conversacional del asistente. Como se puede observar, la funcionalidad es directamente proporcional al tamaño y pulcritud de los datos que se utilizan en la etapa de entrenamiento. Sin embargo, este sistema es capaz de evaluar bases de datos más y mejorar su rendimiento.


Comentarios
Publicar un comentario