Tutorial: Cerca de segments traduïts en corpus comparables - mtuoc/tutorials GitHub Wiki

1. Introducció

Fins ara hem alineat documents paral·lels, és a dir, documents en què la majoria de segments del document en una llengua també es troben en el document de l'altra. Els programes que hem vist són capaços de detectar segments que falten, i fins i tot buscar alineacions amb relacions diferents d'1:1.

En aquest apartat veurem una tècnica que permet cercar si en dos documents que no són paral·lels, hi ha segments de traducció que són equivalents entre ells. Això és possible de fer mitjançant els anomenats sentence embeddings, que és un concepte similar als word embeddings, però en lloc de representar una paraula amb un vector, representa tota una oració. Per aquesta tasca utilitzarem models de sentence embeddings multilingües, que permeten representar oracions en diferents llengües en un mateix espai vectorial. D'aquesta manera, oracions que estiguin properes en l'espai vectorial, tindran moltes possibilitats de ser equivalents de traducció.

2. Lectura recomanada

Schwenk, H., Wenzek, G., Edunov, S., Grave, É., Joulin, A., & Fan, A. (2021, August). CCMatrix: Mining Billions of High-Quality Parallel Sentences on the Web. In Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers) (pp. 6490-6500).

3. Procediment per a la cerca de segments traduïts

Els passos per a buscar segments equivalents de traducció en corpus no paral·lels són els següents:

  • Disposem d'un fitxer amb segments en una determinada llengua (L1) i un d'altre amb segments en una d'altra (L2)
  • Representem els segments de cada fitxer mitjançant un model de sentence embeddings multilingüe.
  • Comparem els vectors resultants corresponents als segments a L1 amb totes les representacions vectorials dels segments en L2. Si un segment a L1 té un segment a L2 amb vectors prou similars, aquests segments a L1 i L2 probablement seran equivalents de traducció.

Aquest procés el podem realitzar amb els programes MTUOC-bitext_mining.py i MTUOC-bitext_mining-GPU.py del repostori https://github.com/mtuoc/MTUOC-aligner. Els dos programes són el mateix, però el segon permet utilitzar unitats GPU. El procés de representació en vectors i la cerca de vectors similars té un gran cost computacional, de manera que es fa necessari en moltes ocasions utilitzar unitats GPU.

Per provar aquests algoritmes utilitzarem el resultat de la conversió a text de la descàrrega de medline amb el programa genèric, que si recordeu creava dos arxius de text, un amb tots els segments en anglès i un d'altre amb tots els segments en espanyol. Podeu descarregar aquests fitxers dels següents enllaços:

http://lpg.uoc.edu/seminarioTAN/semana_3/text-en.txt

http://lpg.uoc.edu/seminarioTAN/semana_3/text-es.txt

Podem escriure:

wget http://lpg.uoc.edu/seminarioTAN/semana_3/text-en.txt
wget http://lpg.uoc.edu/seminarioTAN/semana_3/text-es.txt

Eliminarem els segments repetits d'aquests fitxers:

cat text-en.txt | sort | uniq | shuf > text-uniq-en.txt
cat text-es.txt | sort | uniq | shuf > text-uniq-es.txt

I ara podrem executar el programa de la següent manera:

python3 MTUOC-bitext_mining.py text-uniq-en.txt text-uniq-es.txt aliSBERT-uniq-brut-en-es.txt

(és possible que us manqui algun prerequisit, així que si us dona error instal·leu-lo: sentence_transformes i faiss-cpu, si no disposeu de GPU)

El procés sense GPU és bastant lent, així que paciència.

Podeu descarregar el resultat directament de: http: // lpg.uoc.edu/seminarioTAN/semana_4/aliSBERT-uniq-brut-eng-spa.txt

L'alineació consisteix en el segment a l’L1, tabulador, el segment a l’L2, tabulador i un índex de confiança. Els resultats estan ordenats per aquest índex de confiança.

Aquí és important fer una inspecció visual. Obriu el fitxer d'alineació amb un editor de text i aneu baixant fins que els resultats siguin dolents per a determinar l'índex més baix a partir del que rebutjarem els resultats. Després podreu utilitzar el programa selecteAlignmentsFile.py per a seleccionar els segments amb un índex superior al trobat.

Fixeu-vos també que hi ha alineacions de segments L1 - L2, a l'exemple, anglès - anglès. Això és així perquè han aparegut aquests segments en els textos espanyols. Per ara considereu-los una bona alineació. A la setmana 6 aprendrem a netejar corpus i a comprovar automàticament la llengua dels segments.