基于深度学习的.rpy文件翻译脚本
此脚本最初设计用于LESSONS IN LOVE的中文翻译, 只会针对LIL进行优化
python库:
模型&权重:
chat_glm2_6b_prefix( GPU only )
ps: 微调模型为专为LIL训练的翻译模型
有python环境搭建经验的可跳过此步
pytorch = 2.0.0 #最好是gpu版本
dl_translate = 0.3.0
tqdm = 4.64.1
- PyCharm, Anaconda 安装
Anaconda下载 (不建议安装在C盘)
- 安装环境
设置镜像源, 在C:\Users\[用户名]下找到或创建文件.condarc, 以文本的形式打开编辑,替换为一下代码
channels:
- https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
- https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
- https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
- https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
report_errors: false
在开始->所有应用->Anaconda3(64bit)中找到并打开Anaconda Prompt
逐行运行以下指令:
pip install tqdm
pip install torch
pip install dl_translate
如果torch下载速度慢,或者卡住, 使用
ctrl+c强制中断
在pytorch离线安装文件列表中搜索cpu/torch-2.0.1%2Bcpu
找到对应python版本的win_amd64版的安装文件, 下载到电脑上(文件较大)
然后同样打开Anaconda Prompt,输入以下指令(替换文件路径)离线安装pytorch
pip install [whl文件的绝对路径]
安装完三个库后, 在Anaconda Prompt运行 pip list或conda list 检查是否存在torch, tqdm, dl-translate 三个库, 若都存在, 即安装成功
- 创建项目
打开Pycharm, 新建项目, 如图将Python解释器, 添加解释器->添加本地解释器->conda环境, 解释器项设为Anaconda根目录下的python.exe,然后点击创建
创建好后, 切换到先前配置的解释器,选择刚刚创建的conda环境, 再创建项目
打开项目, 下载example.py, rpy_file.py, rpy_translate_manager.py, translate_string.py四个文件到项目文件夹下.
在mBART50模型文件里下载指定的6个文件到一个文件夹里,并记住文件夹的路径
或者在MarianMT模型文件里下载微调模型
或者在chat_glm2模型文件中下载主模型
在存放chat_glm2模型文件的文件夹中新建名为prefix的文件夹并下载chat_glm2_prefix微调权重
以上就完成了运行脚本的准备工作
1.下载 Renpy-sdk
2.将游戏文件夹中game文件夹下的文件复制到sdk目录下tutorial/game文件夹里,如果game文件夹下没有.rpy文件只有.rpyc文件,请自行搜索.rpyc转.rpy方法
3.然后启动sdk的renpy.exe选择生成翻译, 语言:这一栏中填写chinese_dl , 勾选 为翻译生成空字串 然后点击生成翻译
4.生成成功后,tutorial/game/tl中会生成带空字符的rpy文件,这些文件将在后面用到
文件夹部分:创建三个文件夹folder_s,folder_t,folder_r, 也可自己命名
folder_s存放源.rpy文件, 旧版本翻译过的文件,用于翻译迁移folder_t存放目标.rpy文件, step0 生成的文件folder_r存放输出.rpy文件, 空文件夹, 翻译的结果会放在这里
代码部分:
rpy_file.py, rpy_translate_manager.py, translate_string.py 以及emample.py在同一目录下
替换4个[]为前文提到的4个文件夹的路径
from rpy_translate_manager import rpy_translate_manager
rm = rpy_translate_manager(model_or_path = r'[]', # 下载的模型所在的文件夹
replace_json_path = r'[]') # replace.json文件位置
rm.set_source_folder(r'[]]') # folder_s 源rpy文件的文件夹
rm.set_target_folder(r'[]]') # folder_t 目标rpy文件的文件夹
rm.set_result_folder(r'[]]') # folder_r 输出rpy文件的文件夹所有的操作都是在内存中进行, 不会影响folder_s, folder_t里的文件
按照自己的需求来运行脚本:
rm = rpy_translate_manager(self, model_or_path: str = '',
model_family: str = 'mbart50',
replace_json_path: str = './replace.json',
device: str = "auto")初始化, 指定模型所在文件夹, 模型名, 替换json位置
-
model_or_path即环境搭建时下载的文件所在的文件夹 -
model_family为对应模型的名字, 有mbart50,MarianMT,chat_glm2和三个选择 -
replace_json_path为替换json位置
rm.scan_files()扫描文件夹,必须为第一步
rm.transfer()迁移翻译, 只会在同名文件间迁移
rm.quick_translate(batch=64)快速翻译,翻译非翻译的文本,batch指定批量翻译, 默认64, 视显存容量可以增加
rm.translation_fix()通过replace.json对AI翻译中的特定词语进行替换
rm.write_translate_result()保存文件, 保存的文件在folder_r文件夹里, 一般为最后一步
前提:拥有8GB以上显存的英伟达显卡
- 检查cuda版本
在cmd输入指令nvidia-smi, 检查右上角CUDA版本
- 下载安装
whl库文件
然后打开pytorch离线安装文件列表, 网页中ctrl+F ,搜索cuXXX/torch-2.0.0
其中XXX是刚才的cuda版本号去除小数点, 比如图中11.7, 那就搜索cu117/torch-2.0.0, 如图
找到对应python版本的win_amd64版的安装文件, 下载到电脑上(文件较大)
然后同样打开Anaconda Prompt,输入以下指令(替换文件路径)离线安装pytorch
- 检查是否安装成功
使用
打开Anaconda Prompt, 依次执行以下指令, 并查看输出
若输出True, 则代表cuda版安装成功, 案例如图
安装成功后, 脚本会自动切换到cuda运行
python
import torch
torch.cuda.is_available()rm.translation_fix()会根据replace.json替换翻译
replace.json文件格式: (举例其中一部分)
{
"keep_translate": {
"Ayane": [
"艾安",
"艾安娜",
"艾安妮",
"阿安"
]
},
"key": [
"[noriko_love]",
"[makoto_lust]"
],
"replace_translate": {
"Character": {
"角色": [
"特征",
"字符"
]
},
"Dorm Wars": {
"宿舍大战": [
"宿舍战争",
"多姆大战"
]
}
}
}"keep_translate"为保持翻译的规则:
"Ayane", 代表原文出现了Ayane, 但是翻译错了, 希望将翻译错的词还原为Ayane
["艾安","艾安娜","艾安妮","阿安"], 代表Ayane可能翻译成的四种结果, 希望将这些词替换为Ayane所以, 原句中有
Ayane的, AI翻译中有艾安的,艾安将会被替换为Ayane
"key"翻译缺失的检查:
要求原文出现并且译文也出现的单词, 尤其各种renpy使用的替换标志,比如
[noriko_love]检测到缺失后会添加
@@键缺失@@标志
"replace_translate"为替换翻译的规则:
比如
Dorm Wars会翻译成宿舍战争或多姆大战但需要翻译为宿舍大战检测到后会替换为
宿舍大战, 此规则可用于规范常见翻译
想自行添加替换, 请按照上文指示, 并符合.json文件格式标准
为了方便人工后期润色和排错,在翻译文本中添加了两种标志
在文本中使用ctrl+F搜索标志
- 翻译来源标志
type:DL_translation: 标记此翻译为ai翻译
type:Human_translation: 标记此翻译为人工翻译在人工润色后, 请手动改写翻译来源标记
- 翻译错误标志
@@过长重复@@标记可能的连续重复内容
@@键缺失@@标记用于renpy使用的替换标志的缺失 例如[noriko_love]会添加到译文的前面
- 扫描时只识别台词与strings的文本,其余的均忽略, 所以会输出一些空文本
folder_s文件夹可以为空, 迁移翻译将失效- 翻译速度取决于pytorch是否是gpu版以及你的gpu型号, 作者使用移动版2070-mobile-8g
- chat_glm翻译不具有稳定性
- chat_glm微调版本只能在gpu环境下运行










