Skip to content

v0.3.4:添加Sakura V1.0、GalTransl V2.6支持#21

Merged
fkiliver merged 4 commits intofkiliver:masterfrom
Tabing010102:master
Oct 15, 2024
Merged

v0.3.4:添加Sakura V1.0、GalTransl V2.6支持#21
fkiliver merged 4 commits intofkiliver:masterfrom
Tabing010102:master

Conversation

@Tabing010102
Copy link
Copy Markdown
Collaborator

@Tabing010102 Tabing010102 commented Oct 15, 2024

完整配置示例

[Sakura]
Endpoint=http://192.168.199.55:5000/v1/chat/completions
ModelName=Sakura
ModelVersion=1.0
MaxConcurrency=2
UseDict=True
DictMode=Full
Dict={"アイリス":["艾莉斯","女"]}

支持的模型及对应关系

将原ApiType拆成ModelNameModelVersion,对应关系如下表,其中*表示没有匹配时的默认值

ModelName ModelVersion TranslationModel
Sakura 0.8 Sakura 0.8
Sakura 0.9 Sakura/Sakura32B 0.9*
Sakura 0.10 Sakura 0.10pre1
Sakura 1.0 Sakura 1.0
Sakura * Sakura 1.0 (默认)
Sakura32B 0.10 Sakura32B 0.10
Sakura32B * Sakura32B 0.10 (默认)
GalTransl 2.6 GalTransl 2.6
GalTransl * GalTransl 2.6 (默认)
* * Sakura 1.0 (默认)

删除了top_k参数,修改了拼写错误um_beamsmax_tokens修改为512
模型相关默认值设置为Sakura 1.0,注意Sakura32B 0.9*需将ModelName设置为Sakura

字典

字典配置项

  • UseDict默认为False,设置为True才会启用字典功能
  • DictMode默认为Full,为Full时传递整个字典,为Partial或其他时,传递当前翻译句子包含的字典部分
  • Dict默认为空字符串

字典配置(Dict)

  • 必须为空或合法的Json格式,解析失败将会视为空
  • 字典格式{"src":["dst","info"]},发给sakura的字典为src->dst #info
  • 其中info没有可以写成{"src":["dst"]}或者{"src":"dst"},此时发给sakura的字典为src->dst
  • 示例:{"たちばな":"橘","橘":["橘"],"あやの":["绫乃","女"],"綾乃":["绫乃","女"]}

存疑

  • frequency_penalty目前设置为0.2,暂时没有加入退化检测
  • 我在写DeekSeek翻译插件时,发现用ReadToEnd读取responseStream时可能会导致游戏卡顿(即读取HttpWebRequest时,asyncResult.IsCompleted为真时,读取仍有可能阻塞,其中DeekSeek API的流式传输已关闭),我个人后续丢到线程池解决了,llama.cpp的服务端暂时没发现有问题
  • Id和生成插件名称可考虑改为SakuraTranslate,官方插件均以Translate结尾

@fkiliver fkiliver merged commit 8968c5c into fkiliver:master Oct 15, 2024
@fkiliver
Copy link
Copy Markdown
Owner

v1.0正式版发布了?

@Tabing010102
Copy link
Copy Markdown
Collaborator Author

模型:Sakura-14B-Qwen2.5-v1.0-GGUF
好像还是叫v1.0pre1,但我感觉prompt格式啥的应该不会大改了

@fkiliver
Copy link
Copy Markdown
Owner

我研究下sakura现在prompt,把退化检测和上下文写了,然后把id改一下

@fkiliver
Copy link
Copy Markdown
Owner

模型:Sakura-14B-Qwen2.5-v1.0-GGUF 好像还是叫v1.0pre1,但我感觉prompt格式啥的应该不会大改了

GalTrans写了“为视觉小说翻译任务专项优化。对视觉小说脚本中的行内换行、控制符、ruby注音等符号具有较好的保留能力”,我考虑可以停止对sakura轻小说版本的的支持了,格式控制部分代码也可以删除了

@fkiliver
Copy link
Copy Markdown
Owner

模型:Sakura-14B-Qwen2.5-v1.0-GGUF 好像还是叫v1.0pre1,但我感觉prompt格式啥的应该不会大改了

考虑了下,对于adv类,可以继续用sakura。对于slg,rpg类可以用galtrans代替了。在翻译器这里做分割和处理控制符兼容太差了,不同游戏出不一样的锅

@Tabing010102
Copy link
Copy Markdown
Collaborator Author

模型:Sakura-14B-Qwen2.5-v1.0-GGUF 好像还是叫v1.0pre1,但我感觉prompt格式啥的应该不会大改了

考虑了下,对于adv类,可以继续用sakura。对于slg,rpg类可以用galtrans代替了。在翻译器这里做分割和处理控制符兼容太差了,不同游戏出不一样的锅

GalTransl的控制符保留确实要略好一些,但我个人的体感,7B模型的能力还是要比14B/32B差一些
还有LLM本身的限制,我自己写的SLG/RPG游戏的文本翻译脚本中,也是有很多特判,但也没办法覆盖全部情况,这里的问题GalTranslAiNiee可能做了一部分处理,但好像规则是比较复杂
对于换行符的话,我看有部分游戏好像是用的\r\n,有些又是\n,StringBuilder的AppendLine后,也不一定能还原换行符,确实不好处理

@fkiliver
Copy link
Copy Markdown
Owner

模型:Sakura-14B-Qwen2.5-v1.0-GGUF 好像还是叫v1.0pre1,但我感觉prompt格式啥的应该不会大改了

考虑了下,对于adv类,可以继续用sakura。对于slg,rpg类可以用galtrans代替了。在翻译器这里做分割和处理控制符兼容太差了,不同游戏出不一样的锅

GalTransl的控制符保留确实要略好一些,但我个人的体感,7B模型的能力还是要比14B/32B差一些 还有LLM本身的限制,我自己写的SLG/RPG游戏的文本翻译脚本中,也是有很多特判,但也没办法覆盖全部情况,这里的问题GalTranslAiNiee可能做了一部分处理,但好像规则是比较复杂 对于换行符的话,我看有部分游戏好像是用的\r\n,有些又是\n,StringBuilder的AppendLine后,也不一定能还原换行符,确实不好处理

无敌了,写上下文时碰到个这样处理文本的游戏:
image

@Tabing010102
Copy link
Copy Markdown
Collaborator Author

这游戏是这样的,全都给切碎了翻译,属于是只能凑合凑合了

@Tabing010102
Copy link
Copy Markdown
Collaborator Author

Tabing010102 commented Oct 16, 2024

@fkiliver
大致上看了一下后面的修改

  • Translate函数中189-196行内容:属于是Sakura的老问题了,喜欢给翻译后加句号,可以考虑保留去除句号逻辑,已知在Sakura 1.0中也存在(测试环境llama.cpp b3917,Sakura v1.0 iq4xs,P102-100 GPU),不太确定GalTransl有没有这个问题
    2b1351d6cc8deac508a54e40b1015a35
  • MakeSakuraPromptV1_0函数中,开头的376-391行已经实现了判断_useDict==false的逻辑,可以和后面的判断中保留一种
  • MakeGalTranslPromptV2_6函数中,我不太确定在术语表为空时,能不能直接构建翻译指令。在GalTransl中我貌似没找到术语表为空时更换trans_prompt的逻辑
  • Endpoint默认值可考虑修改为http://127.0.0.1:8080/v1/chat/completions

@fkiliver
Copy link
Copy Markdown
Owner

@fkiliver 大致上看了一下后面的修改

  • Translate函数中189-196行内容:属于是Sakura的老问题了,喜欢给翻译后加句号,可以考虑保留去除句号逻辑,已知在Sakura 1.0中也存在(测试环境llama.cpp b3917,Sakura v1.0 iq4xs,P102-100 GPU),不太确定GalTransl有没有这个问题
    2b1351d6cc8deac508a54e40b1015a35
  • MakeSakuraPromptV1_0函数中,开头的376-391行已经实现了判断_useDict==false的逻辑,可以和后面的判断中保留一种
  • MakeGalTranslPromptV2_6函数中,我不太确定在术语表为空时,能不能直接构建翻译指令。在GalTransl中我貌似没找到术语表为空时更换trans_prompt的逻辑
  • Endpoint默认值可考虑修改为http://127.0.0.1:8080/v1/chat/completions

参考sakura readme,在术语表为空时推荐更换prompt
image

@Tabing010102
Copy link
Copy Markdown
Collaborator Author

Tabing010102 commented Oct 19, 2024

sakura v1.0中更换prompt没有问题
sakura v0.10在术语表为空时没有更换prompt,更换prompt是v1.0加入的
galtransl应该是基于sakura v0.10的模型,所以我感觉按照v1.0的规则更换prompt可能会导致效果变差

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants