dolas-zh-finetuned

dolas-zh-finetuned 是一个面向中文文本自然化改写的 Qwen3 4B 微调模型。模型接收带有明显生成式 AI 风格的中文文本,在尽量完整保留事实、语气、名称、数字、日期、单位和引文的前提下,将其改写成更自然的人类中文。

本项目参考 bingbangboom/dolus-v3-ep1-instruct-GGUF 的反向蒸馏思路,以 unsloth/Qwen3-4B-Instruct-2507 为基础模型进行中文 QLoRA SFT。模型不会自动翻译文本;建议仅用于中文改写任务。

1. 数据来源和清洗步骤

1.1 人类原文来源

训练数据的目标文本来自以下公开中文数据集中的人类原文或人类回答:

数据源 原始候选数 清洗后候选数 采用领域
CASIA-LM/ChineseWebText2.0 300,000 123,385 general、encyclopedia、technology、education、book
Hello-SimpleAI/HC3-Chinese 12,853 5,893 open_qa、baike、psychology
合计 312,853 129,278 8 个领域

清洗后人类原文池共 129,278 条,文本长度为 120–1,500 个字符,平均约 484.7 个字符,中位数为 424 个字符。

1.2 确定性清洗

人类原文首先经过不调用语言模型的规则清洗:

  1. 使用 NFKC 进行 Unicode 规范化,解码 HTML 实体。
  2. 删除 scriptstyle、HTML 标签、URL、邮箱、零宽字符和控制字符。
  3. 统一空白字符和换行,清除网页版权、责任编辑、来源、二维码、备案信息等尾部模板。
  4. 按领域白名单筛选;对 ChineseWebText2.0 要求质量分不低于 0.92,并过滤有毒内容。
  5. 删除广告推广、平台套话、电话号码、联系方式和可能包含个人联系信息的文本。
  6. 过滤过短、过长、中文比例低于 0.55、包含替换字符或连续重复字符的文本。
  7. 对规范化文本计算指纹并进行精确去重。

1.3 反向蒸馏与质量控制

从清洗后的人类原文池中抽取 20,100 条唯一文本,通过 API 将人类原文合成为含有常见生成式 AI 文风的中文文本。训练方向与合成方向相反:

输入:合成的 AI 风格中文
目标:对应的人类原文

合成结果经过两级质量控制:

  • 确定性检查:非空、中文比例、无提示词泄漏、数字完整保留、长度比例合理。
  • 模型质检:检查事实保留、语义一致性、AI 文风强度及其他明显问题。

最终接受 11,921 条样本,拒绝 8,179 条,接受率为 59.31%。主要拒绝原因包括数字未完整保留、事实或语义变化、AI 文风不明显,以及长度不符合要求。

训练样本固定为三轮消息格式:

system: 将给定的 AI 生成中文改写成自然、熟练的人类中文。完整保留原意、语气和全部关键信息;不得遗漏、添加、虚构或推断原文没有的内容。姓名、标题、组织、数字、统计、日期、单位和引文必须保持不变。只输出改写后的正文。
user: [AI 生成文本]:{待改写文本}
assistant: {自然的人类中文}

2. 微调超参数

模型使用 Unsloth 在单张 32 GB GPU 上进行 4-bit QLoRA SFT,仅对 assistant 回复计算损失。

参数
基础模型 unsloth/Qwen3-4B-Instruct-2507
对话模板 Qwen3 Instruct / ChatML
最大序列长度 4,096
训练样本数 11,921
Epoch 1
Optimizer steps 373
单卡 batch size 32
梯度累积 1
有效 batch size 32
学习率 2e-4
学习率调度 cosine
Warmup steps 39
优化器 AdamW 8-bit
Weight decay 0.01
LoRA rank 32
LoRA alpha 64
LoRA dropout 0.05
LoRA bias none
LoRA 目标层 q_projk_projv_projo_projgate_projup_projdown_proj
Gradient checkpointing Unsloth
Packing false
Loss assistant only
Seed 3407

训练完成后先合并 LoRA 与基础模型,再转换为 F16 GGUF,并导出以下量化版本:

文件 量化 约占空间 SHA-256
dolas-zh-f16.gguf F16 7.5 GB 7838aaade9141a8d54d1b57610b2f67bfd2e5d98c580ff675498d6781fb19dcc
dolas-zh-q4_k_m.gguf Q4_K_M 2.4 GB a60901aa0b7ebbe5baca672ce6712fade67862136c39cacabb623f167c9d7769
dolas-zh-q8_0.gguf Q8_0 4.0 GB ebb0b77dd2e9f87f800cb1f932d00817777ee8bd4f5b9b41a82ce199a061d04f

3. 模型加载

3.1 Transformers 加载合并模型

以下方式适用于包含 config.json、tokenizer 文件及合并后 Safetensors 权重的 Hugging Face 格式目录。请将 YOUR_USERNAME 替换为实际的 Hugging Face 用户名或组织名。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "YOUR_USERNAME/dolas-zh-finetuned"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    dtype=torch.bfloat16,
    device_map="auto",
)

messages = [
    {
        "role": "system",
        "content": (
            "将给定的 AI 生成中文改写成自然、熟练的人类中文。"
            "完整保留原意、语气和全部关键信息;不得遗漏、添加、虚构或推断原文没有的内容。"
            "姓名、标题、组织、数字、统计、日期、单位和引文必须保持不变。只输出改写后的正文。"
        ),
    },
    {
        "role": "user",
        "content": "[AI 生成文本]:在此填写需要自然化改写的中文文本。",
    },
]

prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.inference_mode():
    output = model.generate(
        **inputs,
        max_new_tokens=512,
        do_sample=True,
        temperature=0.45,
        top_p=0.90,
        top_k=40,
        repetition_penalty=1.15,
        pad_token_id=tokenizer.eos_token_id,
    )

generated = output[0, inputs["input_ids"].shape[1] :]
print(tokenizer.decode(generated, skip_special_tokens=True).strip())

3.2 llama.cpp 加载 GGUF

推荐日常使用 Q4_K_M,需要更高保真度时可使用 Q8_0

./llama-cli \
  -m ./dolas-zh-q4_k_m.gguf \
  -sys '将给定的 AI 生成中文改写成自然、熟练的人类中文。完整保留原意、语气和全部关键信息;不得遗漏、添加、虚构或推断原文没有的内容。姓名、标题、组织、数字、统计、日期、单位和引文必须保持不变。只输出改写后的正文。' \
  -p '[AI 生成文本]:在此填写需要自然化改写的中文文本。' \
  --single-turn \
  --predict 512 \
  --temp 0.45 \
  --top-p 0.90 \
  --top-k 40 \
  --repeat-penalty 1.15

若使用支持 GGUF 的图形界面(例如 LM Studio),应保留同一 system prompt 和 [AI 生成文本]: 输入前缀。当前模型在较高温度下偶尔会增加套话或产生半角中文标点,建议从 temperature=0.35–0.55 开始测试,并在事实敏感场景中人工核对改写结果。

Downloads last month
-
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ChisatoY/dolas-zh-finetuned

Adapter
(438)
this model