项目介绍 #
这是一个使用AI解决字幕翻译问题的CLI工具,通过调用AI接口,将字幕文件进行翻译,生成新的字幕文件。
灵感来源 #
- 在寻找国外电影时,一般字幕都为英文,而有些小众的电影或者比较新的电影国内还没有翻译。
- 即使在一些字幕网站上可以找到翻译成中文的字幕,但很大概率是直接机翻的,质量不高。
- 市面上一些翻译工具都是基于GUI,且也是机翻,即使有使用AI翻译,在长文本翻译上仍会出现一些幻觉。
项目解决的问题 #
市面上大部分字幕翻译工具都是基于机器翻译,但是机器翻译的质量不高;使用AI进行翻译的工具会由于大模型的幻觉问题导致翻译效果不好。
相比机器翻译 #
- 解决机器翻译质量不高的问题
- 解决机器翻译无法多行翻译的问题
相比AI翻译 #
- 解决Tokens限制问题
- 解决字幕格式保持问题
- 解决翻译质量问题
项目实现 #
提取字幕信息 #
为了使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进行排序。