Light Novel Translator

目的

目前现有的翻译软件 (google translator) 在日中翻译时使用英语进行“桥接”,这种先将日文翻译成英语再由英语翻译成中文的方法效果非常差,特别时翻译小说的时候。当然这是由于缺乏大量中日对应语料的无奈之举。

针对有对应语料的商用翻译软件 (百度,小牛),由于使用的大量训练数据是类似于联合国正式文件,合同之类的语料,在翻译轻小说的时候对于一些简写,轻小说特有的缩写,以及涉及奇幻,情色要素的情节翻译效果不好。

我们希望训练一个针对于日本 web novel 专门优化的 Neural Machine Translator.

数据集的获取和处理

数据的获取

使用轻国流出的5g轻小说数据库:5G 的 epub 文件大约可以获得 400m 的 txt 中文文本。但是这个数据有个很大的问题,找不到对应的日文 txt 文本。由于日本对于盗版控制比较严格,比如《学生会的一存》,《物语》这类非 web novel 的轻小说,很难找到对应的 txt 文本,汉化组手里更多的也是 png 扫图,所以找不到对应日文文本。这方法不是很可行。

使用 galgame 文本:针对已汉化的 galgame 可以通过解包获得日文文本和对应中文翻译。这是天然标注好的中日对应数据集,不过由于 galgame 特殊性,这类数据中绝大多数的数据都是对话,这跟我们的目的(轻小说翻译器)有很大的 gap 。可行性也不是很高,不过以后将模型移植到 galgame 上时可以用这些数据。

使用网友翻译web novel 数据:就在我以为找不到对应数据时,我发现了轻小说家吧的网友整理的大约 350m 网友们翻译的 web novel 数据。这些中文翻译对应的日文原文绝大多数都可以在 syosetu 上免费获得。而且他们也与我们想要使用的语境完全相同。仅有的缺点是:只有 book level 的对应,具体细分还需要大量人工。

数据的处理

首先爬取 syosetu 上对应的日文数据。(代码完成了一半)

针对上文描述的对应问题,如果想要得到可用的数据集,我们需要更加细化的对应。

目前构想的做法:针对每一本书,根据章节名称,章节数字对中日语料分别进行章节分割,这样我们就分别得到了中日两个章节list。首先针对这两个list进行match,这里我们采用 dp, 每两个章节间的 对应指数 定义为日文章节中中文字符在中文章节中出现的数量,也可以定义为将日文章节先翻译用现有翻译软件译成中文后,对应章节中match的字符数。

得到章节间的 match 后,我们考虑更细粒度的 match:段落与段落的匹配,与章节匹配类似,我们使用 dp 处理这个部分。得到段落匹配后,由于 web novel 的特殊性,我们暂时不考虑更细粒度的match (sentence level alignment),因为web novel 的段落相对较短,很多时候一句就是一段。再者,很多时候我们在翻译时有可能中文一句对应日语两句或者翻过来的情况,因此我们暂时只考虑到 paragraph level 的 alignment。

还有编码方式需要统一成 UTF-8。

以上部分还没有实现,我猜可能需要大量的时间。

模型的构建

我们的模型主要基于 Transformer。Google 17年的 paper Attention is all you need 介绍了这种结构,并且在 Universal Transformers 中将其扩展成不对长度敏感的模型。

可能用到的文章:

还需要考虑的问题:

  • 要不要考虑中文,日文的分词以及pos-tagging?
  • 如何处理轻小说中大量出现的【~】,【💗】之类字符?