Traducciones de texto con GPT-3
Los traductores automáticos son funcionales cuando hablamos de textos cortos, poco complejos y muy literales/formales.

Uno de los mayores problemas a los que nos enfrentamos en la creación de textos es la coherencia y la cohesión de los términos utilizados para referirnos a un concepto o tema a lo largo del texto. ¿No os habéis encontrado alguna vez con algún personaje secundario que, en varias páginas, ha cambiado de nombre? Aparte de síntoma de una mala edición; lo es de un cambio en el nombre por alguna motivación posterior a la escritura.
Esto no solo ocurre con los nombres de personajes, también con conceptos nuevos que generan varias propuestas de traducción y que conviven hasta que uno de los términos, en el mejor de los casos, acaba usándose de forma estandarizada. Ahora, ¿cómo garantizarías que no se cuele el término en desuso en algún lugar del texto? Este problema puede acentuarse en la traducción y, sobre todo, cuando no hay un traductor humano profesional detrás con todos los apoyos habituales que va generando durante la traducción: glosarios, anotaciones, consultas…; y pasamos a utilizar un sistema automático para realizarla.
Hay que tener en cuenta aquí que los idiomas tienen peculiaridades propias, conceptos que no existen en otras, flexiones, figuras retóricas y referencias culturales que deben evaluarse individualmente tanto en el idioma de origen como en el de destino. Un ejemplo de esto puede ser la traducción de la saga de Geralt de Rivia, de Andrzej Sapkowski, que realizó al español José María Faraldo (Torán, J. 2010). No solo se trata de pasar de un idioma a otro un texto, se trata de transmitir la misma experiencia que tiene el lector polaco al lector español, para lo que hacen falta adaptaciones que no haría un traductor automático. ¿Cómo hubiese hecho la traducción de los diálogos rurales un traductor automático? Creo que no quiero saberlo. Teniendo en cuenta que la mayoría de las palabras presentaban alguna deformación, vamos a asumir que, en el mejor de los casos, no recurriría a deformarlo tal como se hace en las zonas rurales españolas.
La ventaja de las traducciones automáticas
La interpretación de un lenguaje es complejo, tratar de crear equivalencias entre dos lenguas es un trabajo arduo y que, gracias a la mejora de las traducciones automáticas, tiende a infravalorarse. La traducción automática y profesional humana deberán convivir; la primera bien podría convertirse en una herramienta muy útil para el traductor profesional, que podrá agilizar su trabajo en los pasajes más literales de la traducción y dedicar más tiempo a los que de verdad son un reto intelectual.
Desde la irrupción de los modelos Transformers (Vaswani, A. et al 2017), el Procesamiento de Lenguaje Natural ha experimentado una mejora sustancial en las tareas relacionadas con textos, siendo la traducción de textos una de las más beneficiadas y más utilizadas. Es una herramienta muy útil, sobre todo cuando nos enfrentamos a textos formales y muy estructurados tales como informes, ensayos clínicos, etc. que prescinden en la mayor parte de los casos de figuras retóricas que requieren de una comprensión profunda para la adaptación.
La ventaja de la traducción automática, por tanto, es claramente el tiempo que tardamos en conseguir el resultado, la rapidez; a cambio, siempre perderemos algo de calidad. Seamos sinceros, la mayor calidad en cuanto a comprensión de la intención del texto la encontraremos en la lengua de origen, pero para poder acceder a ella, se requiere de unos conocimientos que podríamos tardar años en adquirir. Por lo tanto, la pérdida de esa calidad compensa y es asumible porque nos permite acceder a información nueva.
La literalidad como ventaja. Cuando pedimos a un traductor que haga su trabajo, el traductor tiene la tarea de cambiar unas palabras por otras y que el mensaje sea entendible en la lengua de destino como en origen, lo que requiere de otro tipo de adaptaciones adicionales. Cuando utilizamos un traductor automático accedemos a una traducción, en gran medida, literal.
Un ejemplo de traducción literal podría ser la expresión: no prizes for guessing, que un traductor automático traduce como: “no hay premios por adivinar” (Google Translate, 2021); y que en español no existe como tal. Esta expresión se utiliza para señalar algo que es muy evidente. Probablemente, un traductor humano la sustituiría por: “como ya sabrás”, “está claro que”, etc. La traducción no literal sigue presentando un gran reto para las máquinas.
Por otro lado, podemos utilizar la literalidad de los sistemas automáticos como una herramienta de apoyo al aprendizaje para conocer cómo piensan en aquella lengua (esto necesita de un poco de entrenamiento y de hacer comparaciones con el texto de origen, lo que requiere también de cierto conocimiento)… en definitiva, un buen ejercicio y apoyo para ir mejorando la comprensión de una lengua que no sea la materna.
Hacer una traducción con GPT-3
GPT-3 es un modelo de lenguaje general, muy versátil y al que se le han regalado mucho los oídos (hasta cierto punto, con razón). Si tienes acceso a la API de GPT-3 y quieres probar un caso de uso realizando llamadas a la API desde la biblioteca que facilita OpenAI para Python, a continuación desarrollaré un ejemplo de cómo realizarlas. Recuerda que, para que funcione, debes tener una clave de la API (API key).
texto_original = 'I enjoy doing puzzles.' idioma_origen = 'inglés' idioma_destino = 'inglés'entrada = 'Texto en ' + idioma_origen + ': ' + texto_original + '\nTraducido al'+ idioma_destino + ':' traduccion = openai.Completion.create(engine='davinci', prompt=entrada, temperature=0.81, stop=['\n', 'Traducido al'], max_tokens = int(len(texto_original))) doc_traducido = traduccion['choices'][0]['text'][1:] doc_traducido
Con esta estructura sencilla podemos realizar una petición de autocompletado para que haga la traducción; la entrada que formamos con las variables texto_original, idioma_origen e idioma_destino, quedaría de la siguiente manera:
Texto en inglés: I enjoy doing puzzles.
Traducido al español:
El modelo, una vez pasada esa entrada, responderá (tal vez con alguna variación al ser estocástico):
Me gusta hacer rompecabezas.
Hay que tener en cuenta que esta no es la única manera de indicarle que estamos solicitando una traducción; el modelo entenderá igualmente una entrada más simple:
English: I enjoy doing puzzles.
Español:
Puedes probar diferentes fórmulas de entrada hasta que encuentres la que más se ajusta a lo que buscas y a la que responda mejor. Recuerda que es un modelo generativo y, si no haces bien las especificaciones, podría comenzar a hacer la traducción de I enjoy doing puzzles también a otros idiomas o seguir generando un texto relacionado con rompecabezas.
Solicitando la traducción con openai.Completion.create. Hay que tener en cuenta los parámetros obligatorios que deben introducirse para realizar correctamente la petición. Los obligatorios para la generación de texto son:
- engine: el motor que utilizará para generar la respuesta. El ejemplo está hecho con el modelo más grande, ’davinci’; pero existen otros más pequeños y rápidos que también pueden ser utilizados (aunque hay que valorar siempre la eficiencia de cada motor para la tarea que va a realizar): curie, babbage y ada.
- prompt: la entrada de texto que vamos a realizar al modelo; aunque este en realidad es opcional, es importante si queremos condicionar la creación del modelo. Cuando escribamos esta petición, debemos tener en cuenta que no podemos hacer saltos de párrafo ni de línea, sino que habrá que especificarlos explícitamente con \n.
Por otro lado, no son los únicos parámetros que existen para la entrada; hay que tener en cuenta que GPT-3 genera un coste por uso, por lo que es importante ajustar las respuestas lo máximo posible para que no genere tokens de más. Para esta función tenemos herramientas como:
- stop: en el que podemos especificar secuencias de parada para el modelo; lo que quiere decir que, en cuanto el modelo las genere, interrumpa la ejecución. En el caso de la traducción, como hemos utilizado en la entrada la estructura ‘Traducido al’ y nos interesa que haga esa traducción y no siga con otros idiomas, podemos especificarle esta como parada; también puede serlo un salto de línea (\n) siempre que el texto de entrada que generemos no tenga ninguno que pueda dejar a medias la traducción.
- max_tokens: otra forma de limitar la salida es limitando el número de tokens que el modelo puede generar; el modelo viene restringido con un mínimo y no se podrá pedir que genere menos de estos (64), y también un máximo (2048), que tampoco se podrá superar. Por eso es importante también especificar secuencias de parada; sobre todo si vamos a almacenar esa información automáticamente en algún fichero. Aquí hay que tener en cuenta las longitudes naturales de los diferentes idiomas para que no corte la ejecución antes de tiempo.
Por último, está el grado de libertad que le damos al modelo a la hora de generar la respuesta y que conseguimos con:
- temperature: de forma predefinida y recomendada estará en torno al 0,7 [0 – 1]; pero podemos modificarlo para ajustarlo al problema y a la creatividad que necesitamos que desarrolle el modelo. Cuanto mayor sea el número, le estaremos dando más libertad creativa y, por lo tanto, nos estaremos arriesgando a que incluso, cambie de tema; cuanto menor sea el número, más riesgos habrá de que tengamos a un loro que genere secuencias monótonas. Este parámetro está relacionado con el top_p, que controla la diversidad de los tokens que se generan; habitualmente está configurada en 1 y no se recomienda modificarla si se ha utilizado la temperatura.
Una vez realizamos una petición, el modelo nos entregará una respuesta; esta respuesta está en formato json y nos ofrece información de cada una de las propuestas que genera para la petición. Si no se le han especificado, generará solo una.
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"text": " Me gusta hacer rompecabezas."
}
],
"created": 1630658412,
"id": "cmpl-3dz24mNXB3bmaK7E2FVtJdKY9Edvp",
"model": "davinci:2020-05-03",
"object": "text_completion"
}
Generalmente, lo que nos interesará es el texto generado. Para acceder a él, utilizamos traduccion[‘choices’][0][‘text’][1:] para extraerlo del json. Hay que tener en cuenta que, en las peticiones no es nada recomendable que se queden espacios al final de la línea y, como consecuencia, lo primero que generará el modelo en la respuesta es un espacio; por lo tanto, para eliminarlo de forma automática y que la respuesta sea limpia se extraerá de ella desde el segundo caracter generado.
Como podemos comprobar, las traducciones simples no suponen un problema para los modelos automáticos; si bien, las limitaciones y problemas a las que nos enfrentamos en textos largos y complejos son evidentes. Si existe una limitación en la entrada que puede asimilar el modelo, llegará un momento en el que pierda las primeras referencias y, por lo tanto, podría hacer cambios de concepto al no tener la continuidad completa de la memoria; como ya dijimos, esto es la falta de cohesión a lo largo de un texto.
Aunque estos sistemas nos permitan tener una traducción medianamente legible, aún requieren de un ojo experto que la evalúe y depure para eliminar las carencias debidas a las limitaciones físicas y contextuales de los modelos existentes para traducción.
Fuentes:
- Torán, J. “Fantasymundo entrevista a José María Faraldo, trductor”. [En línea]. Fantasymundo; 2010. https://www.fantasymundo.com/fantasymundo-entrevista-a-jose-maria-faraldo-traductor/
- Vaswani, A.; Shazeer, N.; Parmar, N.; Uszkoreit, J.; Jones, L.; Gomez, A. N.; Kaiser, L.; Polosukhin, I. Attention is all you need. [En línea] arXiv.org, 2017. arXiv:1706.03762v5
- OpenAI. Docs API. https://beta.openai.com/docs/introduction
Si quieres ampliar la información sobre cómo usar GPT-3 en Python, aparte de consultar otras publicaciones que haya hecho aquí, tenéis en mi GitHub disponible unos cuadernos con una Introducción a GPT-3 y ejemplos de uso de la API completamente en castellano. Si necesitáis profundizar aún más, la documentación de la beta de OpenAI (ENG) es muy completa y está muy cuidada.
Contenido originalmente publicado en Medium el 03 de septiembre de 2021 (https://medium.com/@erebyel/traducciones-de-texto-con-gpt-3-56c43c988266)