--- license: apache-2.0 tags: - unsloth - trl - sft datasets: - Congliu/Chinese-DeepSeek-R1-Distill-data-110k - Kedreamix/psychology-10k-Deepseek-R1-zh --- # Model Card for DeepSeek-R1-Psychology-COT ## Model Description Xinjing-LM 是一个专注于心理健康领域的智能助手,基于 Qwen 模型进行微调和优化,旨在理解复杂的心理学知识、生成高质量文本并支持多轮对话。通过数据蒸馏、指令微调和多轮对话构建等技术,Xinjing-LM 在心理健康场景中表现出色,能够为用户提供准确、流畅且逻辑严谨的心理学相关建议。 ## 项目亮点 - **多源数据融合**:结合开源数据集与 AI 合成数据,确保模型在多样性和专业性上的平衡。 - **多轮对话构建**:通过情感类型和生活场景的组合生成对话数据,提升模型在实际应用中的交互能力。 - **高效微调策略**:采用全参数微调与 LoRA 技术相结合的方式,在保证性能的同时降低计算资源消耗。 - **数据蒸馏优化**:利用 DeepSeek R1 生成的高质量数据,进一步提升模型的推理效率和准确性。 ## 数据集 我们使用了以下数据集进行模型训练和优化: - **Chinese-Data-Distill-From-R1**:开源中文蒸馏数据集,涵盖数学、考试、STEM 和通用类型数据。 - **psychology-10k-sft**:包含 10,000 条心理学相关指令微调数据。 - **psychology-10k-sft-zh**:将 psychology-10k-sft 的英文数据翻译为中文。 - **心理健康-R1蒸馏中文数据集-10k**:利用 DeepSeek R1 生成的心理健康相关推理数据。 - **多轮对话数据集**:通过情感类型和生活场景组合生成的多轮对话数据。 ## 模型选择与微调 1. 先用**Congliu/Chinese-DeepSeek-R1-Distill-data-110k**对 **Qwen2.5-7B-Instruct** 进行SFT,全量微调,使得模型具备强大的中文推理能力,**Mingsmilet/Qwen2.5-7B-R1-SFT**已经训练好模型。 2. 再对SFT后的模型使用**LoRA** 技术进行优化。微调后的模型在心理健康领域的表现显著提升,能够处理复杂的心理学场景和多轮对话。 ## Usage ### Fine-tuning Code Example Below is the code to fine-tune the model using the `unsloth` and `trl` libraries: ```python # Modules for inference import unsloth from unsloth import FastLanguageModel import torch # Import PyTorch from trl import SFTTrainer # Trainer for supervised fine-tuning (SFT) from unsloth import is_bfloat16_supported # Checks if the hardware supports bfloat16 precision # Hugging Face modules from transformers import TrainingArguments # Defines training hyperparameters from datasets import load_dataset # Lets you load fine-tuning datasets model_id = "cvGod/DeepSeek-R1-Psychology-COT" model, tokenizer = FastLanguageModel.from_pretrained( model_name=model_id, max_seq_length=4096, dtype=None, load_in_4bit=True, ) prompt_style = """以下是一项任务说明,并附带了更详细的背景信息。 请撰写一个满足完成请求的回复。 在回答之前,请仔细考虑问题,并创建一个逐步的思考链,以确保逻辑和准确的回答。 ### Instruction: 你是一个专业的心里专家专家,请你根据以下问题回答。 ### Question: {} ### Response: {}""" EOS_TOKEN = tokenizer.eos_token question = """我晚上难以入睡,我认为这是因为我对工作感到压力""" # Load the inference model using FastLanguageModel (Unsloth optimizes for speed) FastLanguageModel.for_inference(model) # Unsloth has 2x faster inference! # Tokenize the input question with a specific prompt format and move it to the GPU inputs = tokenizer([prompt_style.format(question, "")], return_tensors="pt").to("cuda") # Generate a response using LoRA fine-tuned model with specific parameters outputs = model.generate( input_ids=inputs.input_ids, # Tokenized input IDs attention_mask=inputs.attention_mask, # Attention mask for padding handling max_new_tokens=4096, # Maximum length for generated response use_cache=True, # Enable cache for efficient generation ) # Decode the generated response from tokenized format to readable text response = tokenizer.batch_decode(outputs) # Extract and print only the model's response part after "### Response:" print(response[0].split("### Response:")[1])