logo

Subtitle Translator CLI

Nov 1, 2024 · 5min

项目介绍

这是一个使用AI解决字幕翻译问题的CLI工具,通过调用AI接口,将字幕文件进行翻译,生成新的字幕文件。

项目地址:Subtitle Translator CLI

灵感来源

  1. 在寻找国外电影时,一般字幕都为英文,而有些小众的电影或者比较新的电影国内还没有翻译。
  2. 即使在一些字幕网站上可以找到翻译成中文的字幕,但很大概率是直接机翻的,质量不高。
  3. 市面上一些翻译工具都是基于GUI,且也是机翻,即使有使用AI翻译,在长文本翻译上仍会出现一些幻觉。

项目解决的问题

市面上大部分字幕翻译工具都是基于机器翻译,但是机器翻译的质量不高;使用AI进行翻译的工具会由于大模型的幻觉问题导致翻译效果不好。

相比机器翻译

  1. 解决机器翻译质量不高的问题
  2. 解决机器翻译无法多行翻译的问题

相比AI翻译

  1. 解决Tokens限制问题
  2. 解决字幕格式保持问题
  3. 解决翻译质量问题

项目实现

提取字幕信息

为了使AI可以精准地处理信息,我们需要分离SRT文件中的各部分信息,只让AI处理文本部分。这样又节省了Tokens,也能使字幕格式不被破坏。

  • 对输入的原始字幕文本进行解析。
  • 将字幕信息分类为三部分:时间信息、序号信息和文本信息。
  • 只保留文本信息用于后续的 AI 翻译。

切分文本

为了进一步优化翻译过程,需要将提取出的文本信息重新组织。这一步的目的是将文本分割成适合 LLM 处理的大小,同时保持上下文的连贯性。

  • 将文本按照每 40 句为一组进行切分。这个数字是经过多次测试后得出的平衡点,既能保证翻译质量,又不会超出 LLM 的处理能力。
  • 使用 标签分割每句文本。这种标记方法便于后续的重新组装,同时也为 AI 模型提供了清晰的句子边界。
  • 使用<nl>标签替换每组文本中的换行符,以实现多行翻译。

格式化原文本

在这一步,我们构建了最终输入给 LLM 的原文本。这个步骤的关键在于如何在控制 tokens 数量的同时,为 AI 提供足够的上下文信息。

  • 传入所有文本作为背景上下文。这确保 AI 能理解整段对话的语境。
  • 使用<TRANSLATE_THIS>标签明确指出当前需要翻译的片段。这种方法既能控制 AI 的输出范围,又不会丢失整体语境。

LLM翻译

这是整个过程中最关键的一步。我们利用 LLM 的强大能力来实现高质量翻译,使用CoT的思维链提高AI的翻译质量。

这个过程包括以下几个阶段:

  • 第一轮直译:要求 AI 严格按照 标签逐句翻译,保证准确性。
  • 第二轮意译:允许 AI 自主发挥,对第一轮的结果进行修改和优化。
  • 第三轮反思:AI 对自己的翻译进行评价,从多个角度提出改进建议。
  • 最后一轮修改:根据反思阶段的建议,AI 对翻译进行最后的调整和优化。

这种多轮翻译和反思的方法显著提高了翻译质量。它不仅能捕捉原文的准确含义,还能使翻译更加流畅自然。

整合字幕

完成翻译后,我们需要将所有信息重新组合成完整的字幕文件。这一步骤包括:

  • 整合之前分离的序号信息和时间信息。
  • 将翻译好的文本与原文本对应。
  • 使用代码执行模块自动完成组装过程。

并发处理

为了快速处理整个长字幕文件,我们使用并发处理的方法。这种方法可以大大提高处理速度,同时也能保证翻译质量。

  • 将字幕文本切分为多个Group。
  • 使用多线程同时处理多个Group,并用key记录Group的序号。
  • 完成任务后根据key进行排序。
> share with
>
CC BY-NC-SA 4.0 2024-PRESENT © Chen Tao