Lilt Labs | Conexión entre investigación y práctica en la traducción

De qué manera Lilt entrena los modelos de traducción automática

Escrito por Aditya Shastry | 13-dic-2021 8:00:00

En este artículo, descubrirás cómo Lilt convierte una enorme cantidad de datos y ecuaciones matemáticas en traducciones de lenguaje natural. Los modelos de traducción automática pueden parecer mágicos, pero aquí te dejaremos echar un vistazo detrás de escena.

 

Recopilación de datos

Entrenar un modelo de traducción automática (MT, por su sigla en inglés) es como cocinar siguiendo una receta. Tienes que seguir los pasos, pero los ingredientes deben ser frescos para que el plato tenga un buen sabor.

Lilt usa fuentes de datos abiertas y pagas para obtener datos de corpus paralelos, el componente clave para traducir modelos de MT.

Las fuentes abiertas están disponibles libremente y las fuentes revisadas de datos de corpus paralelos habitualmente se ponen a disposición con la licencia CC-BY o CC-BY-SA. Algunas de las fuentes son Opus, Paracrawl, y CCMatrix.

Las fuentes pagas son las que se crean con la licencia CC-NC, lo que permite utilizarlas solo con fines no comerciales o de investigación. Tenemos que pagar un cargo para poder usarlas en nuestros modelos. Un ejemplo de estas fuentes es WIPO COPPA V2.

En lo que respecta al tamaño de los datos, cuanto más, mejor. Más datos generalmente conduce a modelos de MT de más alta calidad. Hasta la fecha, hemos recopilado 3800 millones de segmentos en 76 pares de idiomas.

 

Preparación de los datos

Cada porción de datos que obtenemos de las fuentes antes mencionadas pasa por un riguroso proceso. Basta con decir que la preparación de los datos es una tarea hercúlea, incluso antes de comenzar el entrenamiento. ¡Así es como lo hacemos!

Limpiar y validar

Utilizamos los siguientes subpasos para realizar una limpieza sintáctica básica:

  1.  Eliminar las oraciones en blanco
  2.  Eliminar las oraciones que contengan puntuación solamente
  3.  Validar que los archivos del idioma origen y de destino contengan una cantidad coincidente de segmentos (de lo contrario, descartar la fuente).

 

Versionar los datos

Versionamos nuestros datos con DVC, ya que permite combinar los archivos de origen y de destino y cualquier archivo de rastreo interno adicional en una sola unidad. La unidad única es un archivo .dvc, que está consignado a nuestro Github para rastrear todas las fuentes de datos que usamos.

 

Normalizar los segmentos

Para garantizar la consistencia de todos los segmentos, realizamos los siguientes pasos:

  1. Normalizar Unicode: el texto como unicode o HTML se convierte en texto legible para el ser humano. Por ejemplo: Broken text… it’s flubberific! se convierte en: Broken text... it's flubberific!
  2. Normalizar los espacios duros: para idiomas como el francés, en el cual hay reglas estrictas sobre la posición de los espacios duros (de no separación), este paso agrega los espacios donde es necesario, si no están presentes ya.

 

Filtro

Primero, eliminamos los segmentos potencialmente problemáticos de un corpus a nivel del segmento o del par de segmentos. Esto se conoce como filtrado individual.

  1. Secuencia: es lícito suponer que si un segmento de ja (japonés) contiene un token/una frase de ta (Tamil), quizás no se lo pueda utilizar durante el entrenamiento. Mantenemos reglas para las secuencias que no son eficaces cuando se incrustan en otra secuencia, y eliminamos esos segmentos.
  2. Código de idiomas: usamos el paquete de python cld3 para identificar el idioma de un segmento; si no coincide con el idioma del corpus, se descarta.
  3. Excluir patrones: excluimos segmentos que coinciden con expresiones regulares que identifican patrones problemáticos, por ejemplo, "http://" para las URL.
  4. Extensión del segmento: excluimos cualquier segmento de más de 300 palabras (configurable por idioma).
  5. Falta de coincidencia de números: excluimos cualquier par de segmentos que use el mismo sistema numérico, pero que contenga números diferentes en los segmentos de origen y de destino.
  6. Relación de extensión: excluimos cualquier segmento cuando el segmento de origen o de destino sean inusualmente extensos o cortos para un par de segmentos, después de compararlos con un umbral calculado sobre el corpus completo.
  7. Distancia de edición: excluimos cualquier segmento cuando el segmento de origen y de destino sean idénticos o similares, dado que esto puede indicar una traducción errónea. Controlamos la distancia de edición entre el segmento de origen y de destino en función de un mínimo de 0,2

 

Aumento de datos

Cuando se presentan datos no familiares o subrepresentados, los modelos de traducción automática pueden fallar produciendo "alucinaciones", texto traducido que está divorciado del texto de origen. Para aliviar este problema, generamos (aumentamos) artificialmente ejemplos de oraciones paralelas. El entrenamiento con ejemplos aumentados mejora la solidez y resiliencia del modelo en función de estos datos, lo que nos permite traducir eficazmente una amplia variedad de dominios de clientes. Aumentamos los pares de segmentos existentes de las siguientes formas:

  1. Segmentos múltiples: concatenamos hasta 5 segmentos consecutivos para formar un único segmento largo.
  2. Uso de mayúsculas: aplicamos mayúsculas a los segmentos seleccionados según esquemas de uso de TODO MAYÚSCULAS y Mayúscula inicial en cada palabra.
  3. No traducibles: introducimos no traducibles utilizados por nuestros clientes, al detectar tokens/frases comunes en los segmentos de origen y de destino, y al encerrarlos con caracteres ${ y }.

 

Codificación de pares de bytes (BPE)

El vocabulario para un corpus grande puede ser enorme, con muchas palabras pocas veces vistas. Realizamos codificación de pares de bytes (BPE, por su sigla en inglés) en las palabras para desglosarlas en fragmentos de palabras (por ej., amablemente podría separarse en amable y mente). Esto nos permite corregir el tamaño del vocabulario y, por extensión, el modelo de MT, y en consecuencia, los recursos necesarios para entrenar el modelo.

Además, la BPE nos permite traducir segmentos con tokens que no han aparecido en los corpus de entrenamiento, comunes en idiomas morfológicamente ricos como las lenguas latinas y eslávicas, ya que podemos dividir los tokens en fragmentos de palabras familiares.

 

Entrenamiento de los modelos de MT

Desde que la arquitectura Transformer entró en escena, hemos basado en ella nuestros modelos de traducción de producción.

Antes de pasar a los detalles específicos del modelo Transformer, permítanme una breve digresión sobre un concepto conocido como espacio de inmersión o espacio de representación continua. Cada punto en este espacio de alta dimensión representa el significado de una oración. Dos oraciones que son similares en significado tendrán representaciones próximas entre sí. Básicamente puedes adivinar de qué manera encaja este concepto en el diseño de un modelo de traducción automática. Solo diseñamos dos componentes:

Codificador: esto toma una oración de origen y la transforma en la representación de espacio de inmersión

Decodificador: esto toma la representación de espacio de inmersión y la convierte en una oración del idioma de destino

El Codificador y el Decodificador juntos forman un modelo de traducción automática para un par de idiomas dado. Secuencia a secuencia (seq2seq) es un nombre multifunción para los modelos que usan esta arquitectura de codificador-decodificador, donde el Transformer es ampliamente considerado como el que tiene más desempeño.

Así es como se ve un modelo de Transformer:

Dada la arquitectura, debemos elegir el tamaño del modelo. El tamaño del modelo está determinado por la cantidad de parámetros y es similar a la capacidad de un hotel. La información aprendida del corpus en el entrenamiento es análoga a la cantidad de personas que hay efectivamente en el hotel.

Queremos lograr el máximo aprovechamiento, por lo que usamos la cantidad de oraciones en el corpus paralelo obtenido de la sección de Preparación de los datos para determinar qué tamaño de modelo es el mejor para un par de idiomas dado:

- Modelo pequeño para cuando se dispone de menos pares de oraciones en paralelo, por ejemplo, inglés -> hindi

Modelo grande para cuando hay muchos pares de oraciones en paralelo disponibles, por ej. inglés -> alemán

Luego, entrenamos el modelo. Los detalles específicos podrían describirse en una publicación de blog futura, pero basta decir que activamos muchos nodos informáticos de alto desempeño, entrenamos el modelo con los datos de entrenamiento generados a partir de la sección Preparación de los datos y hacemos un análisis de referencia del desempeño del modelo con conjuntos de pruebas preparados por organizaciones como WMT, TED y grupos académicos como LTI.

Para puntuar los modelos, usamos métricas automáticas como la puntuación BLEU, que responde preguntas como "¿Cómo evalúo objetivamente qué es un buen modelo de inglés a francés?".

Después de alcanzar un nivel aceptable, mandamos el modelo a nuestros servidores de producción y nuestros traductores pueden comenzar a usarlo de inmediato.