--- language: - zh - en license: apache-2.0 base_model: Qwen/Qwen3-8B library_name: peft pipeline_tag: text-generation tags: - clinical-psychology - cognitive-therapy - psychotherapy - qwen3 - lora - sft - rag --- # Qwen3-8B 临床心理学知识蒸馏 LoRA 基于 **Qwen/Qwen3-8B** 通过 LoRA SFT 微调的小模型,将英文临床心理学教材《Clinical Psychology: Science, Practice, and Diversity》(Andrew M. Pomerantz) 的知识蒸馏为**中文问答能力**,并额外训练了**"从日常对话中识别隐含心理困扰并温和开导"**的功能(例如老人说"不用做太多饭,反正我也没啥用了" → 识别出背后可能的无价值感/孤独/抑郁信号并共情引导)。 ## 能力 - 临床心理学知识问答(评估、诊断、各大心理治疗流派:精神动力学、人本主义、行为、认知/正念、团体与家庭治疗等) - **难言之隐检测与开导**:对拐弯抹角/自我贬低/回避性表达,反映隐含感受、温和点出认知歪曲、传递陪伴与希望 - 支撑 RAG:答案术语与检索 chunk 对齐 ## 数据增强策略(对应"避免遗忘 + 支撑 RAG") 1. **RAG 对齐**:问答对严格基于按章节切分的 chunk 生成,QA 与 RAG 文档使用同一文本单元,保证学到的知识与检索命中的内容一致。 2. **RAG 上下文样本**:约 1/6 医学样本把检索片段前缀"【检索资料】"放进 user 输入,教会模型在推理时配合 RAG 片段作答。 3. **难言之隐专项样本**:36 类"隐晦表达→隐含信号→共情回复",并同时加入 RAG 文档作为可检索的场景条目。 4. **防遗忘**:混入约 13% 通用领域问答,避免小模型在细粒度微调中丢失底座通用能力。 ## 训练方法 - 基座:Qwen/Qwen3-8B,4bit QLoRA,r=16,`use_rslora=True` - 3 epochs,lr 2e-4 cosine,bf16,有效 batch 8 - 训练集 2565 条(医学 2206 + 难言之隐 70 + 通用 289),eval 135 ## 加载与推理 ```python from unsloth import FastLanguageModel import torch model, tokenizer = FastLanguageModel.from_pretrained("Qwen/Qwen3-8B", max_seq_length=1536, load_in_4bit=True) model.load_adapter("checkpoints/qwen3-8b-clinpsych-final/final") text = tokenizer.apply_chat_template( [{"role":"user","content":"帮助我开导一下这个人。他/她说:“不用做太多饭,反正我也没啥用了”"}], tokenize=False, add_generation_prompt=True, enable_thinking=False) enc = tokenizer(text, return_tensors="pt").to("cuda") out = model.generate(enc.input_ids, attention_mask=enc.attention_mask, max_new_tokens=200) print(tokenizer.decode(out[0][enc.input_ids.shape[1]:], skip_special_tokens=True)) ``` ## RAG 随仓库提供 `output/rag/`(FAISS `index.faiss` + `docs.json` + `meta.json`,检索模型 `BAAI/bge-small-zh-v1.5`,703 条文档:667 章节 chunk + 36 难言之隐场景)。 ## 免责声明 / 版权说明 - **专业免责**:本模型为教学/辅助用途,不能替代持证临床心理学家、精神科医师或心理咨询师的专业评估与诊疗。 - **版权**:本仓库仅分发 *LoRA 权重*、训练脚本与模型卡,**不包含**衍生自已出版教材原文的训练数据(尊重原书版权)。 ## 脚本 见本仓库 `scripts/`:提取(`extract_pdf.py`)、分块(`make_chunks.py`)、QA 蒸馏(`gen_qa.py`)、难言之隐(`gen_readbetween.py`)、数据集(`prep_train_final.py`)、训练(`train_lora_final.py`)、RAG(`build_rag.py`/`search_rag.py`)、推理(`infer_readbetween.py`)。 ## 评测说明 无留出集评测,训练 loss 不代表效果。