Construya un flujo de trabajo de traducción automática multilingüe con Amazon Translate Active Custom Translation.

Build a multilingual automatic translation workflow with Amazon Translate Active Custom Translation.

Dive into Deep Learning ( D2L.ai ) es un libro de texto de código abierto que hace que el aprendizaje profundo sea accesible para todos. Cuenta con cuadernos interactivos Jupyter con código autocontenido en PyTorch, JAX, TensorFlow y MXNet, así como ejemplos del mundo real, figuras de exposición y matemáticas. Hasta ahora, D2L ha sido adoptado por más de 400 universidades de todo el mundo, como la Universidad de Cambridge, la Universidad de Stanford, el Instituto de Tecnología de Massachusetts, la Universidad Carnegie Mellon y la Universidad de Tsinghua. Este trabajo también está disponible en chino, japonés, coreano, portugués, turco y vietnamita, con planes de lanzar la versión en español y otros idiomas.

Es un desafío tener un libro en línea que se mantenga continuamente actualizado, escrito por múltiples autores y disponible en varios idiomas. En esta publicación, presentamos una solución que D2L.ai utilizó para abordar este desafío mediante el uso de la función de traducción personalizada activa (Active Custom Translation, ACT) de Amazon Translate y la construcción de un pipeline de traducción automática multilingüe.

Demostramos cómo utilizar la Consola de administración de AWS y la API pública de Amazon Translate para ofrecer traducción automática de lotes de máquinas y analizar las traducciones entre dos pares de idiomas: inglés y chino, e inglés y español. También recomendamos las mejores prácticas al utilizar Amazon Translate en este pipeline de traducción automática para garantizar la calidad y eficiencia de la traducción.

Descripción general de la solución

Construimos pipelines de traducción automática para varios idiomas utilizando la función ACT en Amazon Translate. ACT le permite personalizar la salida de traducción al proporcionar ejemplos de traducción adaptados en forma de datos paralelos. Los datos paralelos consisten en una colección de ejemplos textuales en un idioma fuente y las traducciones deseadas en uno o más idiomas de destino. Durante la traducción, ACT selecciona automáticamente los segmentos más relevantes de los datos paralelos y actualiza el modelo de traducción sobre la marcha basándose en esos pares de segmentos. Esto resulta en traducciones que coinciden mejor con el estilo y contenido de los datos paralelos.

La arquitectura contiene varios sub-pipelines; cada sub-pipeline maneja una traducción de idiomas, como inglés a chino, inglés a español, y así sucesivamente. Se pueden procesar varios sub-pipelines de traducción en paralelo. En cada sub-pipeline, primero construimos los datos paralelos en Amazon Translate utilizando el conjunto de datos de alta calidad de ejemplos de traducción personalizados de los libros de D2L traducidos por humanos. Luego generamos la salida de traducción de máquina personalizada sobre la marcha en tiempo de ejecución, lo que logra una mejor calidad y precisión.

En las siguientes secciones, demostramos cómo construir cada pipeline de traducción utilizando Amazon Translate con ACT, junto con Amazon SageMaker y Amazon Simple Storage Service (Amazon S3).

Requisitos previos

Para seguir los pasos en esta publicación, asegúrese de tener una cuenta de AWS con lo siguiente:

  • Acceso a AWS Identity and Access Management (IAM) para la configuración de roles y políticas
  • Acceso a Amazon Translate, SageMaker y Amazon S3
  • Un bucket de S3 para almacenar los documentos fuente, documentos de referencia, conjunto de datos de datos paralelos y salida de traducción

Crear un rol IAM y políticas para Amazon Translate con ACT

Nuestro rol IAM debe contener una política de confianza personalizada para Amazon Translate:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "Statement1",
        "Effect": "Allow",
        "Principal": {
            "Service": "translate.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }]
}

Este rol también debe tener una política de permisos que conceda a Amazon Translate acceso de lectura a la carpeta de entrada y subcarpetas en Amazon S3 que contienen los documentos fuente, y acceso de lectura/escritura al bucket y carpeta de salida de S3 que contiene los documentos traducidos:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:PutObject",
            “s3:DeleteObject” 
        ]
        "Resource": [
            "arn:aws:s3:::NOMBRE-DE-TU-BUCKET-S3"
        ] 
    }]
}

Para ejecutar los cuadernos de Jupyter en SageMaker para los trabajos de traducción, necesitamos otorgar una política de permiso en línea al rol de ejecución de SageMaker. Este rol pasa el rol de servicio de Amazon Translate a SageMaker que permite que los cuadernos de SageMaker tengan acceso a los documentos fuente y traducidos en los cubos de S3 designados:

{
    "Versión": "2012-10-17",
    "Declaración": [{
        "Acción": ["iam:PassRole"],
        "Efecto": "Permitir",
        "Recurso": [
            "arn:aws:iam::YOUR-AWS-ACCOUNT-ID:role/batch-translate-api-role"
        ]
    }]
}

Preparar muestras de entrenamiento de datos paralelos

Los datos paralelos en ACT deben ser entrenados por un archivo de entrada que consiste en una lista de pares de ejemplo de texto, por ejemplo, un par de idioma fuente (inglés) e idioma objetivo (chino). El archivo de entrada puede estar en formato TMX, CSV o TSV. La siguiente captura de pantalla muestra un ejemplo de un archivo de entrada CSV. La primera columna es los datos del idioma fuente (en inglés), y la segunda columna es los datos del idioma objetivo (en chino). El siguiente ejemplo se extrajo del libro D2L-en y del libro D2L-zh.

Realizar entrenamiento de datos paralelos personalizados en Amazon Translate

En primer lugar, configuramos el cubo de S3 y las carpetas como se muestra en la siguiente captura de pantalla. La carpeta source_data contiene los documentos fuente antes de la traducción; los documentos generados después de la traducción por lotes se colocan en la carpeta de salida. La carpeta ParallelData contiene el archivo de entrada de datos paralelos preparado en el paso anterior.

Después de cargar los archivos de entrada en la carpeta source_data, podemos usar la API CreateParallelData para ejecutar un trabajo de creación de datos paralelos en Amazon Translate:

S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.create_parallel_data(
                Name=pd_name,                              # pd_name es el nombre de los datos paralelos
                Description=pd_description,          # pd_description es la descripción de los datos paralelos 
                ParallelDataConfig={
                      'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn,        # S3_BUCKET es el nombre del cubo de S3 definido en el paso anterior
                      'Format': 'CSV'
                },
)
print(pd_name, ": ", response_t['Status'], " creado.")

Para actualizar datos paralelos existentes con nuevos conjuntos de datos de entrenamiento, podemos usar la API UpdateParallelData :

S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.update_parallel_data(
                Name=pd_name,                          # pd_name es el nombre de los datos paralelos
                Description=pd_description,      # pd_description es la descripción de los datos paralelos  
                ParallelDataConfig={
                      'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn,    # S3_BUCKET es el nombre del cubo de S3 definido en el paso anterior
                      'Format': 'CSV'  
                },
)
print(pd_name, ": ", response_t['Status'], " actualizado.")

Podemos verificar el progreso del trabajo de entrenamiento en la consola de Amazon Translate. Cuando el trabajo esté completo, el estado de los datos paralelos se muestra como Activo y está listo para usar.

Ejecutar la traducción por lotes asincrónica utilizando datos paralelos

La traducción por lotes se puede realizar en un proceso en el que varios documentos de origen se traducen automáticamente en documentos en idiomas de destino. El proceso implica cargar los documentos de origen en la carpeta de entrada del bucket S3, luego aplicar la API StartTextTranslationJob de Amazon Translate para iniciar un trabajo de traducción asincrónica:

S3_BUCKET = “NOMBRE-DE-TU-BUCKET-S3”
ROLE_ARN = “EL-ROL-DEFINIDO-EN-EL-PASO-1”
src_fdr = “datos_de_origen”
output_fdr = “salida”
src_lang = “en”
tgt_lang = “zh”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
response = translate_client.start_text_translation_job (  
              JobName='D2L_job',         
              InputDataConfig={
                 'S3Uri': 's3://'+S3_BUCKET+'/'+src_fdr+'/',       # S3_BUCKET es el nombre del bucket S3 definido en el paso anterior
                                                                   # src_fdr es la carpeta en el bucket S3 que contiene los archivos de origen  
                 'ContentType': 'text/html'
              },
              OutputDataConfig={ 
                  'S3Uri': 's3://'+S3_BUCKET+'/’+output_fdr+’/',   # S3_BUCKET es el nombre del bucket S3 definido en el paso anterior
                                                                   # output_fdr es la carpeta en el bucket S3 que contiene los archivos traducidos
              },
              DataAccessRoleArn=ROLE_ARN,            # ROLE_ARN es el rol definido en el paso anterior
              SourceLanguageCode=src_lang,           # src_lang es el idioma de origen, como ‘en’
              TargetLanguageCodes=[tgt_lang,],       # tgt_lang es el idioma de destino, como ‘zh’
              ParallelDataNames=pd_name              # pd_name es el nombre de los datos paralelos definido en el paso anterior        
)

Seleccionamos cinco documentos de origen en inglés del libro D2L (D2L-en) para la traducción masiva. En la consola de Amazon Translate, podemos monitorear el progreso del trabajo de traducción. Cuando el estado del trabajo cambia a Completado, podemos encontrar los documentos traducidos al chino (D2L-zh) en la carpeta de salida del bucket S3.

Evaluar la calidad de la traducción

Para demostrar la efectividad de la función ACT en Amazon Translate, también aplicamos el método tradicional de traducción en tiempo real de Amazon Translate sin datos paralelos para procesar los mismos documentos y comparamos la salida con la salida de traducción por lotes con ACT. Utilizamos la puntuación BLEU (BiLingual Evaluation Understudy) para calibrar la calidad de la traducción entre los dos métodos. La única manera de medir con precisión la calidad de la salida de la traducción automática es tener a un experto revisar y calificar la calidad. Sin embargo, BLEU proporciona una estimación de la mejora relativa de calidad entre dos salidas. Una puntuación BLEU suele ser un número entre 0-1; calcula la similitud de la traducción automática con la traducción humana de referencia. Una puntuación más alta representa una mejor calidad en la comprensión del lenguaje natural (NLU).

Hemos probado un conjunto de documentos en cuatro canalizaciones: inglés al chino (en a zh), chino al inglés (zh a en), inglés al español (en a es) y español al inglés (es a en). La siguiente figura muestra que la traducción con ACT produjo una puntuación BLEU promedio más alta en todas las canalizaciones de traducción.

También observamos que cuanto más granulares son los pares de datos paralelos, mejor es el rendimiento de la traducción. Por ejemplo, utilizamos el siguiente archivo de entrada de datos paralelos con pares de párrafos, que contiene 10 entradas.

Para el mismo contenido, utilizamos el siguiente archivo de entrada de datos paralelos con pares de frases y 16 entradas.

Utilizamos archivos de entrada de datos paralelos para construir dos entidades de datos paralelos en Amazon Translate y luego creamos dos trabajos de traducción por lotes con el mismo documento fuente. La siguiente figura compara las traducciones de salida. Muestra que la salida utilizando datos paralelos con pares de oraciones superó a la que utiliza datos paralelos con pares de párrafos, tanto para la traducción del inglés al chino como para la traducción del chino al inglés.

Si está interesado en aprender más sobre estos análisis de referencia, consulte Auto Machine Translation and Synchronization for “Dive into Deep Learning”.

Limpieza

Para evitar costos recurrentes en el futuro, le recomendamos que limpie los recursos que creó:

  1. En la consola de Amazon Translate, seleccione los datos paralelos que creó y elija Eliminar. Alternativamente, puede utilizar la API DeleteParallelData o el comando de la interfaz de línea de comandos de AWS (AWS CLI) delete-parallel-data para eliminar los datos paralelos.
  2. Elimine el bucket de S3 utilizado para alojar los documentos de origen y referencia, los documentos traducidos y los archivos de entrada de datos paralelos.
  3. Elimine la función y la política de IAM. Para obtener instrucciones, consulte Cómo eliminar funciones o perfiles de instancias y Cómo eliminar políticas de IAM.

Conclusión

Con esta solución, nuestro objetivo es reducir la carga de trabajo de los traductores humanos en un 80%, manteniendo la calidad de la traducción y admitiendo múltiples idiomas. Puede utilizar esta solución para mejorar la calidad y eficiencia de sus traducciones. Estamos trabajando en mejorar aún más la arquitectura de la solución y la calidad de la traducción para otros idiomas.

Sus comentarios siempre son bienvenidos; por favor, deje sus pensamientos y preguntas en la sección de comentarios.