--- license: apache-2.0 language: - ja - zh base_model: - 3tic/Orion-Qwen3-1.7B-CPT-v2603 pipeline_tag: text-generation tags: - lightnovel --- # Orion-Qwen3-1.7B-SFT-v2603 基于 [Orion-Qwen3-1.7B-CPT-v2603](https://huggingface.co/3tic/Orion-Qwen3-1.7B-CPT-v2603) 在轻小说、游戏、动漫文本数据上训练的翻译模型,支持术语表。 * 本版模型优化了术语表使用和上下文关系处理 ## Prompt 结构 ``` [上文] ← 可选,每 chunk 不同 [术语表] ← 可选,同文档共享,仅包含当前 chunk 命中的术语 [提示词] ← 根据有无上文/术语表选择措辞 [JSONL 内容] ← 待翻译文本 ``` --- ## 模板 1: plain(无术语表,无上文) ### user ``` 将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果,不要额外解释: {"1":"原文1"} {"2":"原文2"} ``` ### assistant ``` {"1":"译文1"} {"2":"译文2"} ``` ### 示例 **user:** ``` 将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果,不要额外解释: {"1":"まだなにか、話すべきことがあっただろうか。"} ``` **assistant:** ``` {"1":"还有什么,需要说的事情吗。"} ``` --- ## 模板 2: glossary(有术语表,无上文) ### user ``` 术语表: 実体A→译名A 実体B→译名B 参考术语表中的译法,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"原文1"} {"2":"原文2"} ``` ### assistant ``` {"1":"译文1"} {"2":"译文2"} ``` ### 示例 **user:** ``` 术语表: クトゥリフ→库托莉芙 サーフェちゃん→莎妃 ライム→莉姆 参考术语表中的译法,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"「思い出話をしましょう、と言っているのよ。私もグレンとは話せないし」"} {"2":"うにょん! と楕円形に広がっていたライムが、あっという間に人の形に戻った。"} {"3":"「いいんデスか! サーフェちゃん」"} ``` --- ## 模板 3: context(无术语表,有上文) ### user ``` 上文行1 上文行2 上文行3 参考上文信息,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"原文1"} {"2":"原文2"} ``` ### assistant ``` {"1":"译文1"} {"2":"译文2"} ``` ### 示例 **user:** ``` 「え……だっテ、グレンくんは教室でも浮いてましたシ……みんなと仲良くなれるきっかけになればと思ったんデス……」 サーフェとしては。 ライムがやったことは、サーフェの考えと似てはいても、もう少し先を見ていた。 参考上文信息,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"「医学部学生ではあるけど、身体の悩みを聞きます……というのは評判になりましたね」"} {"2":"「エヘヘ! 噂を流した甲斐がありましター!」"} {"3":"「それも貴女の仕業だったのね」"} ``` --- ## 模板 4: glossary_context(有术语表,有上文) ### user ``` 上文行1 上文行2 上文行3 术语表: 実体A→译名A 実体B→译名B 参考上文和术语表,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"原文1"} {"2":"原文2"} ``` ### assistant ``` {"1":"译文1"} {"2":"译文2"} ``` ### 示例 **user:** ``` アカデミーは多数の学部に分かれ、大陸各地から有能な学者が招聘された。 ある日、アカデミーに一人の少年が留学した。 新入生の名はグレン・リトバイト。 术语表: クトゥリフ→库托莉芙 グレン・リトバイト→格伦·利特贝特 ネメア→涅米亚 ネメア・アカデミー→涅米亚·学院 参考上文和术语表,将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果: {"1":"ネメア・アカデミー。"} {"2":"魔族領首都ネメア。その大都市が誇る、最大の教育機関。"} {"3":"名前はグレン。"} {"4":"手にしているのは、教授であるクトゥリフからの通知である。"} ``` --- ## Transformers 推理示例 ```python import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_path = "3tic/Orion-Qwen3-1.7B-CPT-v2603" tokenizer = AutoTokenizer.from_pretrained( model_path, trust_remote_code=True, padding_side="left", ) if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( model_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto", ) prompt = ( "将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果,不要额外解释:\n" '{"1": "おはようございます"}\n' ) text = tokenizer.apply_chat_template( [{"role": "user", "content": prompt}], tokenize=False, add_generation_prompt=True, ) inputs = tokenizer(text, return_tensors="pt").to(model.device) outputs = model.generate( **inputs, max_new_tokens=128, do_sample=False, temperature=1.0, pad_token_id=tokenizer.pad_token_id, ) generated_ids = outputs[0][inputs["input_ids"].shape[-1]:] response = tokenizer.decode(generated_ids, skip_special_tokens=True) print(response) ``` ## vLLM 推理示例 ```python from vllm import LLM, SamplingParams model_path = "3tic/Orion-Qwen3-1.7B-CPT-v2603" llm = LLM(model=model_path, tensor_parallel_size=1, max_model_len=1024) prompt = ( "将以下文本翻译为简体中文,使用JSONLINE格式输出翻译结果,只需输出翻译结果,不要额外解释:\n" '{"1": "おはようございます"}\n' ) outputs = llm.chat( messages=[[{"role": "user", "content": prompt}]], sampling_params=SamplingParams(max_tokens=128, temperature=0.0), ) print(outputs[0].outputs[0].text) ```