Introducción
Los sistemas de reconocimiento automático del habla (ASR, por sus siglas en inglés) proporcionan transcripciones de texto. Normalmente, se trata de una secuencia de palabras. Cisco utiliza sistemas ASR para proporcionar subtítulos en tiempo real en las reuniones de Webex. Uno de los problemas que surgen es que puede resultar difícil leer los subtítulos sin puntuación ni mayúsculas. La capacidad de entender el significado del texto puede cambiar en función de la puntuación. Imagine la siguiente secuencia de palabras con dos opciones de puntuación:“gracias su donación acaba de ayudar a alguien a conseguir un trabajo”.
Opción A: “¡Gracias! Su donación acaba de ayudar a alguien a conseguir un trabajo”.
Opción B: “¡Gracias! Su donación acaba de ayudar a alguien. ¡A conseguir trabajo!”.
Los signos de puntuación marcan una gran diferencia.
Repasaremos varias consideraciones a la hora de desarrollar un sistema de posprocesamiento:- Modelos de alta precisión para la restauración de los signos de puntuación y el uso de mayúsculas a partir del texto sin formato. Inferencia rápida sobre los resultados provisionales: para seguir el ritmo de los subtítulos en tiempo real.
- Utilización de pocos recursos: el reconocimiento del habla es intensivo desde el punto de vista computacional; no necesitamos que nuestros modelos de puntuación también lo sean.
- Capacidad para procesar palabras no incluidas en el vocabulario: a veces, necesitaremos asignar puntuación o poner en mayúsculas palabras que nuestro modelo no ha visto antes.
TruncBiRNN
La intuición y los experimentos demuestran que es imprescindible contar con el contexto futuro al desarrollar un modelo de puntuación, ya que es más difícil determinar los signos de puntuación en una posición actual sin conocer las siguientes palabras. Para utilizar la información sobre los próximos tokens y no tener que actualizar todos los estados ocultos para todos los tokens en la dirección hacia atrás, decidimos truncar la dirección hacia atrás en una ventana fija. En la dirección hacia delante, es solo una RNN normal. En la dirección hacia atrás, solo consideramos una ventana fija en cada token y ejecutamos la RNN sobre esta ventana (figura 2). Usando esta ventana, podemos lograr una inferencia en tiempo constante para un nuevo token de entrada (debemos calcular un estado oculto en la dirección hacia adelante y n+1 en la dirección hacia atrás). . Ahora para cada token, tenemos estados ocultos para las direcciones hacia adelante y hacia atrás, respectivamente. Llamemos a este nivel TruncBiRNN o TruncBiGRU (ya que utilizamos GRU). Estos estados ocultos se pueden calcular en tiempo constante, lo que no depende de la longitud de la entrada. El funcionamiento en tiempo constante es fundamental para que el modelo pueda seguir el ritmo de los subtítulos en tiempo real.Arquitectura
La arquitectura consta de una capa de incrustación, una capa TruncBiGRU y una capa de GRU unidireccional, y un nivel totalmente conectado. Para la salida, utilizamos dos capas softmax para la puntuación y el uso de mayúsculas, respectivamente (figura 3). Para cada palabra, el modelo predice su uso de mayúscula y el signo de puntuación después de la palabra. Para sincronizar mejor estas dos salidas y predecir el uso de mayúsculas, también debemos conocer la incrustación del token anterior (para restaurar el signo de puntuación del paso anterior). Junto con una función de pérdida personalizada (consulte la siguiente sección), esto nos permite evitar los casos en los que se produce una palabra en minúscula al principio de una oración. Para la predicción de la puntuación, también es útil obtener la predicción del uso de mayúsculas de la siguiente palabra. Por eso, concatenamos las incrustaciones actual y siguiente. Una capa de salida para la puntuación predice la distribución de todos los signos de puntuación. Para nuestro modelo, es un conjunto:punto: un punto en medio de una oración que no implica necesariamente que la siguiente palabra deba ir en mayúscula (“a. m”., “D.C.”, etc.)
coma
signo de interrogación
puntos suspensivos
dos puntos
guion
punto final: un punto al final de una oración
Para el uso de mayúsculas, tenemos cuatro clases:minúsculas
mayúsculas: todas las letras se escriben en mayúsculas (“IEEE”, “NASA”, etc.)
mayúsculas
mix_case: para palabras como “iPhone”
mayúscula inicial: palabras que comienzan una oración
Las clases adicionales, “mayúscula inicial” y “punto final”, pueden parecer redundantes a primera vista, pero ayudan a aumentar la coherencia de las respuestas relacionadas con el uso de mayúsculas y la puntuación. El “punto final” implica que la siguiente respuesta de asignación de mayúsculas no puede ser “minúscula”, mientras que “mayúscula inicial” significa que el signo de puntuación anterior es un “punto final” o un signo de interrogación. Estas clases desempeñan un papel importante en la función de pérdida. Función de pérdida: Tenemos que optimizar tanto el uso de mayúsculas como la puntuación. Para lograrlo, utilizamos una función de pérdida de suma de logaritmos con un coeficiente: Sin embargo, como ya se ha dicho, las salidas de una red neuronal pueden no estar perfectamente correlacionadas. Por ejemplo, el puntuador puede predecir un “punto final” para la palabra actual, pero el asignador de mayúsculas no predice una “mayúscula inicial” para el siguiente token. Este tipo de error, aunque poco frecuente, puede ser muy llamativo. Para solucionarlo, utilizamos un término de penalización adicional en la función de pérdida que penaliza este tipo de error: El primer término corresponde a la probabilidad de tener “mayúscula inicial” después de un elemento que no es un “punto final”, y el segundo a la probabilidad de no tener “mayúscula inicial” después de un “punto final” Esta penalización se suma sobre los tokens en los que se produce este error. Además, pasamos dos tensores consecutivos de la capa anterior a las capas softmax. Con esto, podemos reducir eficientemente los términos de penalización. Por último, tenemos la función de pérdida: