Tutorial: Búsqueda de segmentos traducidos en corpus comparables - mtuoc/tutorials GitHub Wiki
1. Introducción
Hasta ahora hemos alineado documentos paralelos, es decir, documentos en la que la mayoría de segmentos del documento en una lengua también están en el documento de la otra lengua. Los programas que hemos visto son capaces de detectar segmentos que falta, e incluso buscar alineaciones con relaciones diferentes de 1:1.
En este apartado veremos una técnica que permite buscar si en dos documentos que no son paralelos, existen segmentos que son equivalentes de traducción entre ellos. Esto es posible hacerlo mediante los llamados sentence embeddings, que es un concepto similar a los word embeddings, pero que en lugar de representar una palabra con un vector, representa toda una oración. Para esta tarea utiliaremos modelos de sentence embeddings multilingües, que permiten representar oraciones en diferentes lenguas en un mismo espacio vectorial. De esta manera, oraciones que estén próximas en el espacio vectorial, tendrá muchas posibilidades de ser equivalentes de traducción.
2. Lectura recomendada
3. Procedimiento para la búsqueda de segmentos traducidos
Los pasos para buscar segmentos equivalentes de traducción en corpus no paralelos son los siguientes:
- Disponemos de un archivo con segmentos en una determinada lengua (L1) y otro con segmentos en otra lengua (L2)
- Representamos los segmentos de cada archivo mediante un modelo de sentence embeddings multilingüe.
- Comparamos los vectores resultantes correspondientes a los segmentos en L1 con todas las representaciones vectoriales de los segmentos en L2. Si un segmento en L1 tiene un segmento L2 con vectores suficientemente similares, estos segmentos en L1 y L2 probablemente serán equivalentes de traducción.
Este proceso lo podemos hacer con los programas MTUOC-bitext_mining.py y MTUOC-bitext_mining-GPU.py del repostorio https://github.com/mtuoc/MTUOC-aligner. Los dos programas son el mismo, pero el segundo permite utilizar unidades GPU. El proceso de representación en vectores y la búsqueda de vectores similares tiene un gran coste computacional, por lo que se hace necesario en muchas ocasiones utilizar unidades GPU.
Para probar estos alorimos utilizaremos el resultad de la conversión a texto de la descarga de medline con el programa genérico, que si recordáis creaba dos archivos de texto, uno con todos los segmentos en inglés y otro con todos los segmentos en español. Podéis descargar estos archivos de los siguientes enlaces:
http://lpg.uoc.edu/seminarioTAN/semana_3/text-en.txt
http://lpg.uoc.edu/seminarioTAN/semana_3/text-es.txt
Podemos escribir:
wget http://lpg.uoc.edu/seminarioTAN/semana_3/text-en.txt
wget http://lpg.uoc.edu/seminarioTAN/semana_3/text-es.txt
Eliminaremos los segmentos repetidos de estos archivos:
cat text-en.txt | sort | uniq | shuf > text-uniq-en.txt
cat text-es.txt | sort | uniq | shuf > text-uniq-es.txt
Y ahora podremos ejecutar el programa de la siguiente manera:
python3 MTUOC-bitext_mining.py text-uniq-en.txt text-uniq-es.txt aliSBERT-uniq-brut-en-es.txt
(quizás os falte algún prerequisito, así que si os da error instaladlo: sentence_transformes y faiss-cpu, si no disponéis de GPU)
El proceso sin GPU es bastante lento, así que paciencia.
Podéis descargar el resultado directamente de: http://lpg.uoc.edu/seminarioTAN/semana_4/aliSBERT-uniq-brut-eng-spa.txt
La alineación consiste en el segmento en la L1, tabulador, el segmento en la L2, tabulador y un índice de confianza. Los resultados están ordenados por este índice de confianza.
Aquí es importante hacer una inspección visual. Abrid el archivo de alineación con un editor de textos e id bajando hasta que los resultados sean malos para determinar el índice más bajo a partir del que rechazaremos los resultados. Después podréis utilizar el programa selectAlignmentsFile.py para seleccionar los segmentos con un índice superior al encontrado.
Fijaos también que hay alineaciones de segmentos L1 - L2, en el ejemplo, inglés - inglés. Esto es así porque han aparecido estos segmentos en los textos españoles. Por ahora consideradlos una buena alineación. En la semana 6 aprenderemos a limpiar corpus y a comprobar automáticamente la lengua de los segmentos.