17 2 months ago

WSAI-Heart-Pro-Exp 是 WSAI-Heart-Pro 的实验版本,基于 Qwen3.5-2B-Base 进行全精度 LoRA 微调。相比0.8B,这次升级到了 2B 参数,共情表达与对话质量均有明显提升,且仍然可以端侧部署。

vision
ollama run wangshen/wsai-heart-pro-exp

Models

View all →

Readme

WSAI-Heart-Pro-Exp

基于 Qwen3.5-2B-Base 全精度 LoRA 微调的心理支持对话模型(Pro 实验版)

ModelScope


关于这个项目

WSAI-Heart-Pro-Exp 是 WSAI-Heart-Pro 的实验版本。相比原版,Pro 版本使用了更大的基座模型、更多的 LoRA 训练层数,在共情能力和对话质量上有显著提升。

Exp 标记说明:本版本为实验性质,后续将发布 WSAI-Heart-Pro 正式版。

与 WSAI-Heart 的对比

对比项 WSAI-Heart WSAI-Heart-Pro-Exp
基座模型 Qwen3.5-0.8B Qwen3.5-2B-Base
参数量 ~0.8B ~2B
LoRA 训练层数 2 层 16 层
模型文件大小 ~1.6GB ~4.2GB

模型信息

项目 详情
基座模型 Qwen3.5-2B-Base
模型架构 Qwen3.5 (Hybrid Linear + Full Attention)
参数量 ~2B
精度 bfloat16
微调方式 全精度 LoRA
LoRA 训练层数 16 层
训练时长 约 5 天多
训练数据集 心理类对话数据集

主要用途

  • 心理支持对话:提供情感陪伴、情绪疏导和心理安慰
  • 通用对话:日常聊天与问答(心理数据增强了模型的共情能力)
  • 多模态能力:模型保留了基座模型的视觉理解能力(微调时冻结了VLM能力)

训练细节

本次微调使用 LlamaFactory 框架完成,采用全精度 LoRA 对 Qwen3.5-2B-Base 进行微调。LoRA 训练覆盖 16 层,耗时约 5 天多。相比 WSAI-Heart 的 2 层 LoRA,训练覆盖面大幅提升,数据拟合更加充分。

训练 Loss 曲线

Loss

局限性

  • 实验性质:本版本为实验版本,可能存在不稳定的表现
  • 非专业替代:本模型 不能替代专业心理咨询或医疗建议,仅供参考
  • 可能产生不当内容:模型存在幻觉问题,可能给出不恰当的建议

亮点

  • 能力大幅提升:基座模型从 0.8B 升级到 2B,LoRA 训练层数从 2 层增加到 16 层,共情能力和对话质量显著增强
  • 更充分的数据拟合:16 层 LoRA 训练使模型能够更好地捕捉心理类对话中的细微模式
  • 端侧可部署:~4.2GB 的模型文件仍然可以在普通个人设备上运行
  • 隐私安全:完全本地运行,对话数据零上传
  • 多模态能力:保留了基座模型 Qwen3.5 的视觉理解能力,支持图像输入分析
  • 共情能力增强:基于心理类对话数据集微调,相比原始基座模型在情感理解和倾听方面有明显提升
  • 免费开源:CC BY-NC-SA 4.0 许可证,免费使用、修改和分享

快速开始

Ollama 一键部署(推荐)

ollama pull wangshen/wsai-heart-pro-exp
ollama run wangshen/wsai-heart-pro-exp

使用 Transformers 运行

from transformers import AutoModelForCausalLM, AutoTokenizer

model_path = "./"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype="auto", device_map="auto")

messages = [
    {"role": "system", "content": "你是一个温暖、有共情能力的心理支持助手。"},
    {"role": "user", "content": "我最近心情不太好,感觉压力很大。"}
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512)
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)

致谢

许可证

本项目采用 CC BY-NC-SA 4.0 许可证。

  • 署名:使用时请注明原作者
  • 非商用:本模型及其衍生作品不得用于商业用途
  • 相同方式共享:基于本作品的衍生作品须采用相同的许可证

⚠️ 请注意:作为 Qwen3.5 的衍生模型,使用时还需遵守 Qwen 原始模型的相关许可协议。