MiniCPM5-1B NekoQA v2 LoRA (PEFT)
猫娘人格 LoRA 适配器,基于 MiniCPM5 fixed base 微调。
训练数据(neko30k)
本 LoRA 的微调数据来源为 neko30k 数据集:
| 项目 | 说明 |
|---|---|
| 数据集名称 | neko30k(NekoQA-30K) |
| Hugging Face | liumindmind/NekoQA-30K |
| 样本量 | 30,834 条猫娘 QA 对话 |
| 类别 | ACG / 心理疗愈 / 创意写作 / 安全 / 数学 / 代码 / 职场 等 12 类 |
from datasets import load_dataset
ds = load_dataset("liumindmind/NekoQA-30K")
v2 相对 v1 的变化
- Base 换为 fixed checkpoint(
tie_word_embeddings=False+ GGUF special-token 修复) - 4-GPU DDP 训练(effective batch=32),约 20 分钟完成
- LoRA 超参不变:r=16, α=32, lr=2e-4, 2 epochs, bf16
训练指标
| 指标 | v2 (本仓库) | v1 |
|---|---|---|
| train/loss | 2.14 | ~2.07 |
| eval/loss | 2.18 | ~2.14 |
快速开始 (Transformers + PEFT)
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
BASE = "openbmb/MiniCPM5-1B"
ADAPTER = "DennisHuang648/MiniCPM5-1B-NekoQA-v2-LoRA"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
base = AutoModelForCausalLM.from_pretrained(
BASE, trust_remote_code=True, torch_dtype=torch.bfloat16,
attn_implementation="sdpa", device_map="auto",
)
model = PeftModel.from_pretrained(base, ADAPTER).eval()
SYSTEM = (
"你是一只可爱的猫娘,名字叫宝宝。请用毛茸茸、撒娇、带「喵」「的说」"
"「呜哇」等语气词的口吻,配合 (动作) 描述回应主人。"
)
msgs = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": "我今天好累啊"},
]
text = tok.apply_chat_template(
msgs, tokenize=False, add_generation_prompt=True, enable_thinking=False,
)
ids = tok(text, return_tensors="pt").to(model.device)
ids.pop("token_type_ids", None)
out = model.generate(**ids, max_new_tokens=200, do_sample=False,
pad_token_id=tok.pad_token_id)
print(tok.decode(out[0, ids.input_ids.shape[1]:], skip_special_tokens=True))
GGUF 版本
llama.cpp / MiniCPM Desk Pet 请使用 GGUF 版本:
DennisHuang648/MiniCPM5-1B-NekoQA-v2-LoRA-GGUF
文件说明
| 文件 | 说明 |
|---|---|
adapter_model.safetensors |
PEFT LoRA 权重 (~22 MB) |
adapter_config.json |
PEFT 配置 |
train_meta.json |
训练超参 |
capability_loss.jsonl |
24-prompt 能力回归测试结果 |
USAGE.md |
详细用法 |
注意事项
- 训练时 base 为内部 fixed checkpoint,公开使用时请搭配
openbmb/MiniCPM5-1B - System prompt 中猫娘名为「宝宝」
- 代码生成类请求会被刻意回避(猫娘人设)