最近看到一本很想看的小说刚出版,网上肯定没有翻译版,只有 epub 格式的原版书。下载下来尝试用 calibre 的一个翻译插件翻译一下,结果发现它的 LLM 翻译方法是提取出所有文本,单独翻译
。
这种方式是经典的传统机器翻译软件翻译长文本的思路,LLM 最大的优势就在于它能理解上下文并暂时记住(别管是怎么理解怎么记住的)。所以我想了一下正确地利用 LLM 对长篇(指超过 context 长度的文本)小说进行翻译的方法。
# 思路
# Step1: 定调
一本书的内容应该是由大量生活中有的 / 没有的要素组成的。这些要素可能包括人物、时间、地点,主要动作等。
在翻译之前,首先应该确定这些要素并且提供给 LLM 作为基本信息,这样能最大程度地减轻 LLM 生成内容的随机性。这些要素被提取后也可以人工进行确认,修改不合适的内容。
类比成人类读书的步骤,LLM 读取一章的内容后应该总结其中的主要内容,提取出这些要素作为翻译时的线索,然后基于这些线索对内容进行翻译。
# Step2: 初翻
有了这些要素之后,LLM 就能实现初步翻译了。翻译后的文本肯定是不能直接使用的,需要被进一步审计。
# Step3: 校对
这里的校对并不是人工审阅的意思,审阅这个步骤也能够被自动化实现:
LLM1 对生成的翻译后文本进行总结,产生出如上的基本要素。
LLM2 对翻译前后的要素进行对比,产生一个置信度,若置信度较高则可以被视作一次成功翻译(这属于一种 GAN 吗)。
如果成功翻译,就可以将生成的文本替换进 epub 的 html 文件,如果不成功翻译,就要重新生成这一章的要素并再次初翻
# Step4: 更新
由 LLM 携带上一章的要素读取下一章的内容,进行总结后对要素进行更新,保留上一章中不变概念的同时对产生变化的要素进行更新。
通过这四步循环进行,基本可以实现对一本长篇内容的可用翻译。
# 缺点
这个方法是序列强相关的,也就是说,如果从中间开始取任意一章开始翻译,效果显然不会很好。类比到人也是类似的 你从中间开始看一本书,当然不能知道每个人的背景信息与他们之前做了什么。
# 实现
https://github.com/Tritium0041/epubTranslatorWithLLM/
没实现校对的那一步 效果已经不错了 懒得再搞了