Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

MindPal 情绪诊疗心灵陪伴AI

项目简介

MindPal 是一个基于开源项目 minimind 构建的、具有情绪诊疗和心灵陪伴功能的 AI 助手。本项目旨在通过 LoRA 微调技术,训练出一个专注于心理健康领域的对话模型。

该模型能够针对用户不同的情绪状态提供:

  • 简要的原因分析
  • 共情与安抚
  • 具体的解决方案建议

MindPal 致力于帮助用户了解心理状态的来源成因,并在聊天中通过引导和建议帮助他们改善情绪问题,提供温暖、专业的心理陪伴。

项目文件概览

修改的文件

  • trainer/train_lora_modified.py: 基于 train_lora.py 修改,支持双数据集 LoRA 训练策略。
  • eval_model.py: 增强了评测功能,用于评估心理陪伴模型的性能。
  • scripts/web_demo.py: 改进了 Web 界面,支持加载 LoRA 模型并优化了用户交互体验。

新增的文件

  • extract_first_conversation.py: 数据预处理工具,从多轮对话数据中提取第一轮对话。
  • dataset/lora_identity.jsonl: 自我认知数据集(MindPal 身份设定)。
  • dataset/lora_mindpal.jsonl: 心理陪伴功能数据集(提取自 SoulChatCorpus)。

模型权重

  • 心理陪伴模型 LoRA 权重: out\lora\lora_mindpal4_512.pth

数据集

本项目采用了双数据集策略,以平衡模型的“自我认知”与“专业能力”。

1. 认知数据集 (dataset/lora_identity.jsonl)

  • 来源: 团队自制。
  • 内容: 包含身份介绍(如“我是 MindPal,由 Soulmates 创造”)、功能说明和简单问候。
  • 大小: 约 14.7KB,72 条单轮对话。
  • 目的: 确立模型身份,防止幻觉,使其明确自己是“心理陪伴师”。

2. 心理场景数据集 (dataset/lora_mindpal.jsonl)

  • 来源: 心理健康-灵心大模型微调数据集
  • 处理: 使用 extract_first_conversation.py 从原始 865MB 的多轮对话中提取第一轮对话(User-Assistant 对)。
  • 内容: 涵盖情绪支持、心理困扰倾诉等场景。
  • 大小: 处理后约 30MB,45,861 条单轮对话。
  • 目的: 训练模型的情绪理解、共情表达和心理辅导能力。

3. 数据处理工具 (extract_first_conversation.py)

用于从大型多轮对话语料库中提取高质量的单轮对话。 使用方式:

python extract_first_conversation.py
# 需在代码中修改 INPUT_FILE, TARGET_SIZE_MB, OUTPUT_FILE 等参数

理论解析

1. Tokenizer 原理解析

Tokenizer 的核心功能是将自然语言文本转换为模型可识别的 ID 序列。本项目主要涉及以下步骤:

  1. 文本拆分: 将文本转换为字节序列。
  2. BPE 分词: 使用 Byte-Pair Encoding 算法,统计高频字符对并合并,生成子词(Subword)。最终词汇表大小为 6400。
  3. 特殊 Token: 引入 <|im_start|><|im_end|> 等特殊 Token 标识对话边界。
  4. 序列预处理: 对齐长度、添加 Padding 等。

处理流程: 文本 -> 字节序列 -> BPE 合并 -> Token ID 映射 -> 模型输入

2. 损失函数计算

模型训练的核心是通过最小化损失函数来优化参数。

  • 前向传播: 模型输出预测的 logits(对数概率分布)。
  • 交叉熵损失 (Cross Entropy): 计算预测分布与真实标签之间的差异。
    loss_per_token = -log(P(correct_token))
    
  • Mask 机制: 使用 loss_mask 过滤掉 Padding 部分的损失,只计算有效 Token 的误差。
  • 平均损失: 将所有有效位置的损失求和并取平均,作为最终的优化目标。

模型训练

训练策略

我们在 train_lora_modified.py 中实现了以下改进:

  1. 双数据集混合训练: 同时加载认知数据集和心理陪伴数据集。
  2. 差异化学习率: 身份数据集采用 1.5 倍学习率倍数 (identity_lr_multiplier),强化角色认知。
  3. 重复训练机制: 身份数据集在每个 Epoch 中重复训练 5 次 (identity_repeat_times),确保模型不遗忘身份。
  4. 优化保存策略: 每个 Epoch 结束自动保存模型。

启动训练

python train_lora_modified.py \
    --identity_data_path "../dataset/lora_identity.jsonl" \
    --mindpal_data_path "../dataset/lora_mindpal.jsonl" \
    --identity_repeat_times 5 \
    --identity_lr_multiplier 1.5 \
    --epochs 20 \
    --batch_size 32 \
    --learning_rate 1e-4 \
    --lora_name "lora_mindpal4" \
    --use_wandb \
    --wandb_project "lora_mindpal"

训练日志: alt text

模型评估

使用 eval_model.py 对训练好的模型进行性能评估。我们扩展了测试问题集,涵盖了情感支持、自我认知等维度。

运行评估:

python eval_model.py \
    --model_mode 1 \
    --hidden_size 512 \
    --load 0 \
    --lora_name lora_mindpal4

示例: alt text

使用说明

本项目提供了基于 Streamlit 的 Web 交互界面,支持实时加载训练好的 LoRA 模型。启动 WebUI方式如下。

远程服务器运行: 这里以服务器运行在8500端口为例,先自行进行端口转发,然后运行:

cd scripts
streamlit run web_demo.py --server.address 0.0.0.0 --server.port 8500

本地运行:

cd scripts
streamlit run web_demo.py

示例: alt text

结论与展望

MindPal 模型成功实现了基本的心理陪伴功能,具备良好的自我认知和共情能力。

  • 优点: 角色定位清晰,回复温暖专业,建议具有实用性(如推荐深呼吸、冥想等)。
  • 不足: 回复有时略显模板化,缺乏深度引导能力。
  • 未来计划: 引入多轮对话训练,尝试强化学习以优化回复质量,并支持更多样的情绪场景。

参考文献

  1. Minimind Project
  2. SoulChat: 中文领域心理健康对话大模型

About

基于开源项目minimind 构建的具有情绪诊疗和心灵陪伴功能的 AI 助手。

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages