Views
No views yet
Qwen/Qwen3-8B 用 QLoRA 微调得到的 LoRA 适配器,从 Gemini 标注数据蒸馏而来,可在本地把一条 Bangumi 短评映射到一个二维坐标系并输出多项结构化指标。specificity、reasoning、emotional_intensity、identity_score、confidence,以及象限 quadrant 和一句话理由 short_reason。Qwen/Qwen3-8Bq_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj| 指标 | MAE |
|---|---|
| x | 0.13 |
| y | 0.15 |
| specificity | 0.08 |
| reasoning | 0.07 |
| emotional_intensity | 0.07 |
| identity_score | 0.08 |
| 象限一致率 | 83.3% |
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
3from peft import PeftModel
4
5BASE = "Qwen/Qwen3-8B"
6ADAPTER = "PhalSyta/AniCoord-Qwen3-8B-QLoRA-v1"
7
8# 4-bit 加载底座,再挂上 LoRA 适配器
9bnb = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4",
10 bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16)
11tok = AutoTokenizer.from_pretrained(ADAPTER)
12model = AutoModelForCausalLM.from_pretrained(BASE, quantization_config=bnb, device_map="auto")
13model = PeftModel.from_pretrained(model, ADAPTER).eval()
14
15# 完整 prompt 见代码仓库 src/annotation/prompt.py,这里仅示意
16msg = [{"role": "user", "content": "判断这条动画短评并输出 JSON:「作画神,分镜也讲究,就是节奏后半段崩了」"}]
17# enable_thinking=False 关闭 Qwen3 思考链,确保直接输出 JSON
18text = tok.apply_chat_template(msg, tokenize=False, add_generation_prompt=True, enable_thinking=False)
19inputs = tok(text, return_tensors="pt").to(model.device)
20out = model.generate(**inputs, max_new_tokens=128, do_sample=False) # 贪心解码,输出稳定
21# 只解码新生成的部分(切掉输入)
22print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))Qwen/Qwen3-8B 自身的许可协议。