Algunos cambios para adaptar a TranslationConfig

This commit is contained in:
Miguel 2024-10-12 14:51:41 +02:00
parent 97de43cba7
commit 8fbffef047
1 changed files with 30 additions and 59 deletions

View File

@ -106,13 +106,13 @@ def translate_batch_openai(texts_dict, source_lang, target_lang):
return dict(zip(texts_dict.keys(), translations))
def affinity_batch_openai(tipo_PLC, texts_dict):
def affinity_batch_openai(codigo_tipo_PLC, texts_dict):
system_prompt = (
"Evaluate the semantic similarity between the following table of pairs of texts in json format on a scale from 0 to 1. "
"Return the similarity scores for every row in JSON format as a list of numbers, without any additional text or formatting."
)
original_list = [
fc.compactar_celda_traducida(tipo_PLC, key) for key in texts_dict.keys()
fc.compactar_celda_traducida(codigo_tipo_PLC, key) for key in texts_dict.keys()
]
re_translated_list = list(texts_dict.values())
@ -204,6 +204,7 @@ def calcular_afinidad(tipo_PLC, texto1, texto2):
def main(config: TranslationConfig):
global logger
df = fc.read_dataframe_with_cleanup_retries(config.get_translate_path())
source_col = config.codigo_columna_maestra
@ -255,7 +256,6 @@ def main(config: TranslationConfig):
print(f"Número total de textos a traducir: {num_texts}")
# Traducciones
# Hacer las traducciones via LLM en batch
translations = {}
for start_idx in range(0, num_texts, batch_size):
end_idx = min(start_idx + batch_size, num_texts)
@ -263,101 +263,73 @@ def main(config: TranslationConfig):
logger.info(f"Traduciendo: celdas desde {start_idx} a {end_idx}.")
print(f"Traduciendo : celdas desde: {start_idx} a :{end_idx}.")
retries = 4 # Número de intentos totales (1 inicial + 1 reintento)
retries = 4
for attempt in range(retries):
try:
batch_translations = translate_batch_openai(
batch_texts,
fc.idiomas_idiomafromcode(codigo_columna_maestra),
target_lang,
fc.idiomas_idiomafromcode(config.codigo_columna_maestra),
fc.idiomas_idiomafromcode(config.codigo_idioma_seleccionado)
)
translations.update(batch_translations)
break # Si la traducción es exitosa, salimos del bucle de reintentos
break
except Exception as e:
if attempt < retries - 1: # Si no es el último intento
logger.warning(
f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
)
print(
f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
)
if attempt < retries - 1:
logger.warning(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
print(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
time.sleep(3)
else: # Si es el último intento
logger.error(
f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}"
)
print(
f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}"
)
else:
logger.error(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}")
print(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}")
logger.info(f"Número total de traducciones recibidas: {len(translations)}")
# Traduccion inversa
# Actualizar el DataFrame con las traducciones y hacemos la Traduccion inversa
for index, row in tqdm(
df.iterrows(), total=df.shape[0], desc="Procesando traducciones"
):
for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Procesando traducciones"):
celda_clave = str(row[source_col])
if celda_clave in translations:
df.at[index, target_col] = translations[celda_clave]
# Realizar la traducción de verificación con Google Translate
try:
google_translation = google_translate(
translations[celda_clave],
fc.idiomas_shortcodefromcode(codigo_columna_maestra),
fc.idiomas_shortcodefromcode(config.codigo_columna_maestra)
)
df.at[index, check_translate_col] = google_translation
except Exception as e:
logger.error(
f"Error en la traducción de Google para el texto '{celda_clave}': {e}"
)
logger.error(f"Error en la traducción de Google para el texto '{celda_clave}': {e}")
df.at[index, check_translate_col] = "Error en la traducción"
df.at[index, affinity_col] = 0.0
# Afinidades
# Se calculan las Afinidades
affinities = {}
for start_idx in range(0, num_texts, batch_size): # num_text
for start_idx in range(0, num_texts, batch_size):
end_idx = min(start_idx + batch_size, num_texts)
batch_texts = dict(list(texts_to_translate.items())[start_idx:end_idx])
logger.info(f"Afinidad: celdas desde {start_idx} a {end_idx}.")
print(f"Afinidad: celdas desde: {start_idx} a :{end_idx}.")
retries = 2 # Número de intentos totales (1 inicial + 1 reintento)
retries = 2
for attempt in range(retries):
try:
batch_affinities = affinity_batch_openai(tipo_PLC, batch_texts)
batch_affinities = affinity_batch_openai(config.codigo_tipo_PLC, batch_texts)
affinities.update(batch_affinities)
break # Si la llamada es exitosa, salimos del bucle de reintentos
break
except Exception as e:
if attempt < retries - 1: # Si no es el último intento
logger.warning(
f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
)
print(
f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
)
if attempt < retries - 1:
logger.warning(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
print(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
time.sleep(3)
else: # Si es el último intento
logger.error(
f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}"
)
print(
f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}"
)
# Intentar individualmente si falla en batch
else:
logger.error(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}")
print(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}")
for key, value in batch_texts.items():
try:
score = calcular_afinidad(tipo_PLC, key, value)
score = calcular_afinidad(config.codigo_tipo_PLC, key, value)
affinities[key] = score
except Exception as ind_e:
affinities[key] = "0"
logger.error(
f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}"
)
print(
f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}"
)
logger.error(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}")
print(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}")
# Actualizar el DataFrame con las Afinidades
for index, row in df.iterrows():
@ -370,7 +342,6 @@ def main(config: TranslationConfig):
logger.info(f"Archivo traducido guardado en: {output_path}")
print(f"Archivo traducido guardado en: {output_path}")
def run(config: TranslationConfig):
global logger
logger = fc.configurar_logger(config.work_dir)