You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何加速批量文本翻译?12.6万样本翻译预估耗时超96小时求优化方案

翻译流程优化方案

你当前方案的核心瓶颈是单线程串行发送请求+单字段单次请求,网络IO等待时间占比极高,可从以下几个方向优化:

1. 降低请求频次,减少无效开销

  • 复用GoogleTranslator实例:你当前每次调用translate()函数都会新建翻译实例,重复初始化浪费资源,全局仅初始化1个实例即可。
  • 批量提交文本:谷歌翻译单请求支持最高5000字符的内容,你可以用不会在语料中出现的特殊分隔符(比如|||)把多个待翻译字段拼接后一次性提交,返回后再拆分,直接将请求量降低到原来的1/N。
  • 去重预翻译:提前把所有待翻译的3个字段内容去重,相同文本仅翻译1次,存储映射表,后续重复内容直接查表取值,如果样本中存在大量重复的问题、答案,能节省海量重复请求时间。
    示例优化代码片段:
import pickle
from deep_translator import GoogleTranslator
from tqdm import tqdm

# 全局复用翻译实例,避免重复初始化
translator = GoogleTranslator(source='english', target='portuguese')
MAX_BATCH_CHAR = 4800 # 预留200字符余量,避免触碰5000字符上限
SEP = " ||| "

def perform_tasks():
    with open("resource/dataset/aug.pkl", "rb") as samples_file:
        samples = pickle.load(samples_file)
    
    # 第一步:收集所有待翻译文本去重
    all_texts = set()
    for sample in samples:
        all_texts.add(sample["qs1"])
        all_texts.add(sample["qs2"])
        all_texts.add(sample["ans"])
    
    # 第二步:批量翻译,构建原文-译文映射表
    trans_map = {}
    batch = []
    batch_char_len = 0
    for text in tqdm(all_texts, desc="预处理待翻译文本"):
        text_len = len(text) + len(SEP)
        if batch_char_len + text_len > MAX_BATCH_CHAR:
            # 提交当前批次翻译
            combined_text = SEP.join(batch)
            translated_combined = translator.translate(combined_text)
            translated_batch = translated_combined.split(SEP)
            for ori, trans in zip(batch, translated_batch):
                trans_map[ori] = trans
            # 清空批次缓存
            batch = []
            batch_char_len = 0
        batch.append(text)
        batch_char_len += text_len
    # 处理最后一批剩余文本
    if batch:
        combined_text = SEP.join(batch)
        translated_combined = translator.translate(combined_text)
        translated_batch = translated_combined.split(SEP)
        for ori, trans in zip(batch, translated_batch):
            trans_map[ori] = trans
    
    # 第三步:批量替换样本译文
    translated_samples = []
    for sample in samples:
        translated_samples.append({
            "idx": sample["idx"],
            "qs1": trans_map[sample["qs1"]],
            "qs2": trans_map[sample["qs2"]],
            "ans": trans_map[sample["ans"]],
            "cls": sample["cls"]
        })
    
    with open("resource/dataset/aug_pt_br.pkl", "wb") as samples_file:
        pickle.dump(translated_samples, samples_file)

if __name__ == '__main__':
    perform_tasks()

2. 并发请求,压缩IO等待时间

翻译属于IO密集型任务,大部分时间都在等待网络请求返回,你可以用多线程/协程同时发送多个请求,充分利用带宽,建议控制并发数在10~20之间,避免触发谷歌翻译的限流规则,速度可直接提升10倍以上。

3. 本地部署翻译模型,脱离API限制

如果有长期批量翻译需求,可以直接本地部署开源的英葡翻译模型(比如Helsinki-NLP的预训练翻译模型),不需要走公网API,本地GPU推理每秒可处理上千字符,12.6万样本仅需几小时就能跑完,完全没有限流、网络波动的问题。

4. 新增容错与断点续传逻辑

  • 每处理完一批样本就写入一次中间结果,不要等全部处理完再存储,避免网络中断、程序报错导致任务从头开始。
  • 给翻译请求增加超时重试机制,单次请求失败自动重试2~3次,异常样本单独记录,不会因为单个请求失败中断整个任务。

内容的提问来源于stack exchange,提问作者Celso França

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:36:00