2022LM – Sobre la traducción con IA (II)

Crónica de mis experimentos traduciendo novelas con IA. Comparo modelos online y locales como QWEN y Gema, detallo costes y comparto un método avanzado.

Este texto ha sido generado por Gemini 2.5/3.1 a partir del audio del autor. El contenido y las ideas son íntegramente del autor; la redacción ha sido asistida por IA.


Un pequeño tropiezo y un ayudante peludo

¿Qué pasa, petardos míos? Antes de meternos en faena, os debo una disculpa por el error técnico de ayer. Estaba grabando con el S25 Ultra, pero a la hora de subir el audio, me lié y volví a procesar el archivo anterior. Un despiste tonto que ya está solucionado: el audio viejo ha sido borrado y el correcto ya está en su sitio. Esta es, por tanto, la segunda parte de mi aventura con las traducciones automáticas.

Mientras me preparaba para continuar, la vida real interrumpió de la forma más tierna posible. Mi gato, el gordito, se pegó un buen susto. Estaba tomando el sol tranquilamente en la ventana, se estiró sobre una alfombrilla, resbaló y acabó en el suelo. El pobre se asustó un poco, pero enseguida estaba pidiendo mimos y queriendo salir al jardín. ¡Estos ayudantes peludos siempre dan la nota!

Mis últimos proyectos de traducción sobre la mesa

Retomando el hilo, he seguido experimentando con la traducción de textos largos. Primero, terminé de traducir los números de enero a junio de la revista Asimov’s Science Fiction. Unas 120.000 palabras que, como os comenté, me costaron alrededor de medio euro usando los servicios online de Gemini. La calidad, francamente, es muy buena.

Luego me lancé a la aventura offline. Traduje el número de mayo-junio de Analog Science Fiction and Fact usando un modelo local: QWEN 3.6 de 35 mil millones de parámetros, en su versión sin censura y «herética». El proceso fue una maratón de 11 horas con mi MacBook Pro a pleno rendimiento, con los ventiladores a tope y los nodos de la GPU a unos 75 grados. ¿La calidad? Es un poco inferior a la versión online, con pequeños detalles que se notan, pero para ser una traducción automática local, es impresionante. Merece la pena solo por el placer de trastear.

Mi último proyecto ha sido traducir In the Balance, el primer libro de una saga de nueve de Harry Turtledove. Es una ucronía fascinante: en plena Segunda Guerra Mundial, la Tierra es invadida por extraterrestres. La serie narra primero nuestra lucha por liberarnos y luego cómo llevamos la guerra a su mundo con la tecnología que les hemos arrebatado. Este libro, de unas 240.000 palabras, me costó algo menos de un euro con Gemini, manteniendo la tarifa de medio euro por cada 100.000 palabras. Lo leí hace más de una década y tengo muchas ganas de releer la saga entera, que no está traducida al castellano.

Reflexiones sobre autores y cafeteras ruidosas

A Turtledove, o «el tortuguero» como a veces lo llamo, lo encuentro un autor peculiar. Su estilo no es especialmente épico, es más bien… tortuguero. Recuerdo otro libro suyo en el que la Armada Invencible gana, pero al final los ingleses nos echan de allí, supongo que porque el autor es inglés. En esa novela mezclaba personajes históricos como Lope de Vega y Shakespeare, haciéndolos amigos con conversaciones interesantes, aunque de dudosa veracidad histórica.

Hablando de sustos, mientras recordaba esto, ¡la cafetera se ha apagado de golpe y casi me da un infarto! Pero volviendo a la traducción del libro de Turtledove, tardó unas dos horas y, a primera vista, parece que no ha fallado, aunque sí he notado problemas con los «placeholders», esos marcadores de posición que usan los programas de traducción y que a los LLM a veces se les atragantan.

El desafío técnico: cómo domar a un LLM

El problema de los placeholders me lleva a una reflexión importante: los LLM no son programas deterministas en el sentido clásico, a menos que controles las semillas de generación aleatoria. Hice una prueba con el modelo Command R Plus de 107B parámetros. Le puse una semilla fija (la 100), le pregunté por el sentido de la vida, cerré el programa, lo volví a abrir con la misma semilla y el mismo prompt exacto, y me dio exactamente la misma respuesta. Son deterministas si los obligas a serlo.

He estado conversando con Gemini y con el creador del software de traducción sobre qué modelos usar. El desarrollador me recomendaba Gema para lenguas europeas, pero Gemini insiste en que QWEN es superior por su precisión y su capacidad para seguir el prompt a rajatabla. Por eso probé las versiones sin censura, que están menos «contaminadas» por el aprendizaje de refuerzo. Siguiendo esta línea, me he bajado el modelo Gema 4 de 31 mil millones de parámetros con cuantificación de 6 bits (Q6K).

Aquí una nota sobre hardware: creo que con 64 GB de RAM se pueden hacer cosas muy serias si dedicas el equipo en exclusiva a la IA. Con 96 GB vas sobrado, no hacen falta 128 GB. Mi equipo, con un modelo de 35B cargado, ha estado usando entre 70 y 80 GB de RAM. La regla de rendimiento es sencilla y aproximada: si reduces los bits a la mitad (de 8 a 4), duplicas la velocidad (tokens/segundo). Si duplicas los parámetros (de 15B a 30B), reduces la velocidad a la mitad. Es un juego de equilibrios constante.

Mi plan maestro para una traducción (casi) perfecta

Hablar con Gemini me ha dado una idea brillante para mi propio script de traducción, un proceso en varios pasos para mejorar drásticamente la coherencia. El primer paso sería preguntarle al LLM sus capacidades, como el número máximo de tokens que admite. Luego, en lugar de traducir directamente, le pasaría el libro por trozos para que genere un glosario: una lista de personajes con su género, nombres propios, naves, vehículos, etc.

Una vez generado este glosario por partes, se lo volvería a pasar al LLM para que lo unifique en un único documento de referencia. Y aquí viene la magia: empezaría la traducción, pero con una optimización clave. Antes de enviar cada bloque de texto a traducir, un script analizaría qué nombres del glosario aparecen en ese bloque específico y adjuntaría solo esa pequeña porción relevante del índice al prompt. Esto, quizás en formato JSON, sería mucho más eficiente y permitiría traducir bloques de texto más grandes manteniendo un contexto perfecto.

Crítica literaria improvisada: los agujeros de guion en la ciencia ficción

Por cierto, leer tanto me ha vuelto más crítico. El último cuento de Asimov’s que traduje, aunque bonito, tenía unos errores de lógica garrafales. La trama va de una adolescente que sobrevive a una catástrofe y una ola de calor. A los tres meses del desastre, el guion dice que las latas de comida están rancias y los zumos embotellados estropeados. ¡Vamos a ver! Una lata de conserva te dura años, y yo me he comido yogures caducados de tres meses y aquí sigo.

Pero lo más increíble es que la protagonista entierra a una persona en una sola tarde. Cualquiera que haya cavado un simple agujero en tierra blanda, como yo (aunque no para enterrar a nadie, claro), sabe que es un trabajo agotador. Para cavar un metro de profundidad sin que las paredes se derrumben, necesitas despejar un área de tres metros a la redonda. Son esos pequeños detalles los que a veces te sacan de una historia, por muy buena que sea.

El enfoque del desarrollador: pensar antes de programar

Todo este proceso me ha hecho pensar mucho en cómo construiría mi propia herramienta. Yo no soy un «coder» que tira líneas de código sin más; soy un «developer». Pienso en la arquitectura antes de empezar. Por ejemplo, para mi panel de control, crearía un componente visual reutilizable para todas las opciones de IA: selector de modelo online/offline, gestión de claves, proveedores, etc.

Además, toda la configuración debe ser externa, no estar «hardcodeada». Estoy barajando opciones para guardarla: un fichero .ini, un .plist de macOS, XML, JSON… La idea es tener una clase padre que gestione un objeto de configuración, encargándose de cargarlo y guardarlo de forma limpia y ordenada. Es este tipo de planificación lo que diferencia un proyecto robusto de un apaño rápido.

En fin, ya van 21 minutos de reflexión. Como siempre os digo, no olvidéis habitualizaros, sospechosos, ¡y que no os la pique un pollo belga! A demonio demoníaco.