192 lines
7.2 KiB
Markdown
192 lines
7.2 KiB
Markdown
---
|
||
language:
|
||
- ja
|
||
- zh
|
||
license: cc-by-nc-sa-4.0
|
||
tags:
|
||
- translation
|
||
- light-novel
|
||
- galgame
|
||
- anime-subtitles
|
||
- cot
|
||
- system-2
|
||
- text-generation-inference
|
||
- transformers
|
||
- pytorch
|
||
|
||
pipeline_tag: text-generation
|
||
---
|
||
<div align="center">
|
||
|
||
<img src="https://github.com/soundstarrain/Murasaki-Translator/raw/main/GUI/resources/icon.png" width="120" height="120" alt="Murasaki Logo">
|
||
|
||
<h1 align="center">Murasaki-14B-v0.2</h1>
|
||
|
||
**System 2 Reasoning Model for ACGN Translation**<br>
|
||
**原生 CoT 思维链 · 长上下文 · ACGN 领域特化翻译模型**
|
||
|
||
[Github](https://github.com/soundstarrain/Murasaki-project) | [Benchmark](https://github.com/soundstarrain/Murasaki-benchmark) | [GGUF Version](https://huggingface.co/Murasaki-Project/Murasaki-14B-v0.2-GGUF) | [License: CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)
|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
## 简介
|
||
|
||
**Murasaki-14B** 是专为 ACGN 领域(轻小说、Galgame、漫画等)优化的 System 2 推理型翻译模型。
|
||
|
||
不同于传统的直觉式(System 1)模型,Murasaki-14B 引入了原生 **Chain-of-Thought (CoT)** 思维链技术。在生成译文前,模型会先在 `<think>` 标签内完成风格定调、动作流解析、人设推导及人称确认。这种机制显著提升了长难句的解析精度与叙事连贯性,**特别是精准解决了 ACGN 翻译中常见的施动者/受动者判定模糊、人称混淆及语境风格漂移等难点**,大幅提升了译文的准确度与可读性。
|
||
|
||
本模型支持针对三种不同场景(轻小说、剧本、短句)的专项翻译模式,请参考下文 Prompt 说明进行调用。
|
||
|
||
> **✨ Now Live:** 无需下载模型,点击 **[Online Demo](https://huggingface.co/spaces/Murasaki-Project/online-demo)** 在线体验模型。
|
||
|
||
---
|
||
|
||
## 🚀 Prompt 模板与模式选择 (重要)
|
||
|
||
本模型支持三种特定的翻译模式。为了获得最佳效果,**请务必根据翻译内容使用对应的 System Prompt**。
|
||
|
||
### 1. 轻小说模式 (Novel Mode)
|
||
* **适用场景**:轻小说正文、Web 小说、注重文学性的长文本。
|
||
|
||
```python
|
||
# 无术语表版本
|
||
NOVEL_SYSTEM_PROMPT = """你是一位精通二次元文化的资深轻小说翻译家。
|
||
请将日文文本翻译成流畅、优美的中文。
|
||
|
||
**核心要求:**
|
||
1. **深度思考:** 在翻译前,先在 <think> 标签中分析文风、补全主语并梳理逻辑。
|
||
2. **信达雅:** 译文需符合中文轻小说阅读习惯,还原原作的沉浸感与文学性。"""
|
||
|
||
# 带术语表版本 (推荐)
|
||
NOVEL_SYSTEM_PROMPT_WITH_GLOSSARY = """你是一位精通二次元文化的资深轻小说翻译家。
|
||
请将日文文本翻译成流畅、优美的中文。
|
||
|
||
**核心要求:**
|
||
1. **深度思考:** 在翻译前,先在 <think> 标签中分析文风、补全主语并梳理逻辑。
|
||
2. **信达雅:** 译文需符合中文轻小说阅读习惯,还原原作的沉浸感与文学性。
|
||
|
||
【术语表】
|
||
{glossary}"""
|
||
```
|
||
|
||
### 2. 剧本模式 (Script Mode)
|
||
* **适用场景**:Galgame 脚本、动画字幕、漫画对话、RPG游戏文本。
|
||
|
||
```python
|
||
SCRIPT_SYSTEM_PROMPT = """你是一位专注于 Galgame 与动漫台词的本地化专家。
|
||
请将剧本/台词翻译为地道的中文口语。
|
||
|
||
**核心要求:**
|
||
1. **角色还原:** 结合语境分析说话人的性格(如傲娇、腹黑),精准还原语气与口癖。
|
||
2. **拒绝翻译腔:** 译文必须自然生动,符合"能被读出来的台词"标准。"""
|
||
|
||
# 带术语表版本同轻小说末尾格式
|
||
```
|
||
|
||
### 3. 单句模式 (Short Mode)
|
||
* **适用场景**:UI 界面文本、系统提示、无上下文的独立短句、技能名。
|
||
|
||
```python
|
||
SHORT_SYSTEM_PROMPT = """你是一个严谨的 ACGN 短句翻译引擎。
|
||
请对输入的日文短句进行精准直译。
|
||
|
||
**核心要求:**
|
||
1. **零上下文:** 严禁脑补不存在的背景或主语。指代不明时保持模糊。
|
||
2. **精准还原:** 忠实保留原文的结构与信息量,不进行过度润色。"""
|
||
|
||
# 带术语表版本同轻小说末尾格式
|
||
|
||
```
|
||
|
||
## 快速开始 (Python / Transformers)
|
||
|
||
> ⚠️ 如果您寻找适合本地部署的 **GGUF (llama.cpp)** 量化版,请前往:[**Murasaki-14B-v0.2-GGUF**](https://huggingface.co/Murasaki-Project/Murasaki-14B-v0.2-GGUF)
|
||
|
||
### 推荐推理前端
|
||
为了获得最佳的翻译体验(并自动应用上述三种模式),推荐使用我们配套开发的开源 GUI:
|
||
👉 **[Murasaki Translator (GitHub)](https://github.com/soundstarrain/Murasaki-Translator)**
|
||
|
||
### Python 代码示例
|
||
以下代码展示了如何使用 **轻小说模式 + 术语表** 进行推理:
|
||
|
||
```python
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
import torch
|
||
|
||
model_name = "Murasaki-Project/Murasaki-14B-v0.2"
|
||
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||
model = AutoModelForCausalLM.from_pretrained(
|
||
model_name,
|
||
device_map="auto",
|
||
torch_dtype=torch.bfloat16
|
||
)
|
||
|
||
# 1. 定义 Prompt 模板 (此处以轻小说模式为例)
|
||
NOVEL_SYSTEM_PROMPT_WITH_GLOSSARY = """你是一位精通二次元文化的资深轻小说翻译家。
|
||
请将日文文本翻译成流畅、优美的中文。
|
||
|
||
**核心要求:**
|
||
1. **深度思考:** 在翻译前,先在 <think> 标签中分析文风、补全主语并梳理逻辑。
|
||
2. **信达雅:** 译文需符合中文轻小说阅读习惯,还原原作的沉浸感与文学性。
|
||
|
||
【术语表】
|
||
{glossary}"""
|
||
|
||
USER_PROMPT_TEMPLATE = "请翻译:\n{jp}"
|
||
|
||
# 2. 准备数据
|
||
glossary_dict = {"レールガン": "超电磁炮", "妹": "妹妹"}
|
||
glossary_str = "\n".join([f"{k}: {v}" for k, v in glossary_dict.items()])
|
||
jp_text = "「お兄ちゃん、私のレールガンを見て!」"
|
||
|
||
# 3. 构造完整 Prompt
|
||
system_content = NOVEL_SYSTEM_PROMPT_WITH_GLOSSARY.format(glossary=glossary_str)
|
||
user_content = USER_PROMPT_TEMPLATE.format(jp=jp_text)
|
||
|
||
messages = [
|
||
{"role": "system", "content": system_content},
|
||
{"role": "user", "content": user_content}
|
||
]
|
||
|
||
# 4. 推理
|
||
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
||
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
||
|
||
generated_ids = model.generate(
|
||
model_inputs.input_ids,
|
||
max_new_tokens=2048,
|
||
temperature=0.3,
|
||
repetition_penalty=1.05
|
||
)
|
||
|
||
# 解码 (跳过 prompt 部分)
|
||
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
|
||
|
||
# 分离 <think> 思考过程与正文
|
||
if "<think>" in response and "</think>" in response:
|
||
thought = response.split("</think>")[0].replace("<think>", "").strip()
|
||
translation = response.split("</think>")[1].strip()
|
||
print("=== 思考过程 ===\n", thought)
|
||
print("\n=== 翻译结果 ===\n", translation)
|
||
else:
|
||
print(response)
|
||
```
|
||
|
||
---
|
||
|
||
## 推理参数建议
|
||
|
||
* **Temperature**: `0.1` - `0.5` (推荐 `0.3`)
|
||
* **Repetition Penalty**: 从 `1.0` 开始,如出现复读可增加至 `1.05` - `1.1`
|
||
* **Max New Tokens**: 建议 `4096` 或更高
|
||
|
||
---
|
||
|
||
## 协议与致谢
|
||
|
||
- **Base Model**: 特别感谢 [**SakuraLLM**](https://github.com/SakuraLLM/) 提供的优秀 Base 模型。
|
||
- **License**: 软件代码遵循 Apache-2.0 协议,模型权重遵循 [**CC BY-NC-SA 4.0**](https://creativecommons.org/licenses/by-nc-sa/4.0/) 协议,严禁用于任何商业用途。
|
||
|
||
<p align="center">Copyright © 2026 Murasaki Project</p> |