新闻
📢 2024年3月2日 IMHI基准测试数据全面发布。
📢 2024年2月1日 我们的MentaLLaMA论文: "MentaLLaMA:使用大型语言模型对社交媒体进行可解释的心理健康分析"已被WWW 2024接收!
📢 2023年10月31日 我们发布了MentaLLaMA-33B-lora模型,这是基于Vicuna-33B和完整IMHI数据集的MentaLLaMA 33B版本,但由于计算资源限制,使用LoRA进行训练!
📢 2023年10月13日 我们发布了以下数据集的训练数据:DR、dreaddit、SAD、MultiWD和IRF。更多内容即将推出,敬请期待!
📢 2023年10月7日 我们的评估论文: "使用大型语言模型进行可解释的心理健康分析"已被EMNLP 2023主会议接收为长篇论文!
伦理考虑
本仓库及其内容仅供非临床研究使用。所有材料均不构成实际诊断或建议,寻求帮助者应从专业精神病学家或临床从业者处获得帮助。对于预测和解释的准确性、完整性或实用性,我们不提供任何明示或暗示的保证。作者和贡献者对使用本文信息而产生的任何错误、遗漏或后果不承担责任。用户在做出任何与临床相关的决定之前,应自行判断并咨询专业人士。使用本仓库中的软件和信息的风险完全由用户自行承担。
用于构建我们IMHI数据集的原始数据集来自Reddit和Twitter等公共社交媒体平台,我们严格遵守隐私协议和道德原则,以保护用户隐私,并确保所有与心理健康相关的文本均适当匿名化。此外,为了最大限度地减少滥用,我们论文中提供的所有示例都使用适度的伪装方案进行了改写和模糊处理。
此外,最近的研究表明,大型语言模型可能会引入一些潜在的偏见,如性别差距。同时,一些错误的预测结果、不恰当的解释和过度概括也说明了当前大型语言模型的潜在风险。因此,将模型应用于实际场景的心理健康监测系统仍面临诸多挑战。
使用或访问本仓库中的信息即表示您同意对作者、贡献者以及任何相关组织或个人因任何索赔或损害进行赔偿、辩护并使其免受损害。
简介
本项目展示了我们在使用大型语言模型(LLMs)进行可解释心理健康分析方面的努力。在早期工作中,我们全面评估了ChatGPT和GPT-4等最新LLMs在生成心理健康分析解释方面的零样本/少样本性能。基于这些发现,我们构建了包含105K指令样本的可解释心理健康指令(IMHI)数据集,这是第一个用于社交媒体可解释心理健康分析的多任务和多源指令调优数据集。基于IMHI数据集,我们提出了MentaLLaMA,这是第一个用于可解释心理健康分析的开源指令跟随LLM。MentaLLaMA可以对社交媒体数据进行心理健康分析,并为其预测生成高质量的解释。我们还引入了第一个全面的可解释心理健康分析评估基准,包含19K测试样本,涵盖8个任务和10个测试集。我们的贡献在以下两篇论文中呈现:
MentaLLaMA模型
我们提供了5个在MentaLLaMA论文中评估的模型检查点:
-
MentaLLaMA-33B-lora:这个模型基于Vicuna-33B基础模型和完整的IMHI指令调优数据进行微调。训练数据涵盖8个心理健康分析任务。该模型可以遵循指令进行准确的心理健康分析,并为预测生成高质量的解释。由于计算资源的限制,我们使用LoRA参数高效微调技术训练MentaLLaMA-33B模型,显著减少了内存使用。
-
MentaLLaMA-chat-13B:这个模型基于Meta LLaMA2-chat-13B基础模型和完整的IMHI指令调优数据进行微调。训练数据涵盖8个心理健康分析任务。该模型可以遵循指令进行准确的心理健康分析,并为预测生成高质量的解释。由于模型大小,推理速度相对较慢。
-
MentaLLaMA-chat-7B | MentaLLaMA-chat-7B-hf:这个模型基于Meta LLaMA2-chat-7B基础模型和完整的IMHI指令调优数据进行微调。训练数据涵盖8个心理健康分析任务。该模型可以遵循指令进行心理健康分析,并为预测生成解释。
-
MentalBART:这个模型基于BART-large基础模型和完整的IMHI-completion数据进行微调。训练数据涵盖8个心理健康分析任务。该模型不能遵循指令,但可以以补全的方式进行心理健康分析并生成解释。这个模型的较小尺寸允许更快的推理和更容易的部署。
-
MentalT5:这个模型基于T5-large基础模型和完整的IMHI-completion数据进行微调。该模型不能遵循指令,但可以以补全的方式进行心理健康分析并生成解释。这个模型的较小尺寸允许更快的推理和更容易的部署。
你可以使用Hugging Face Transformers库在你的Python项目中使用MentaLLaMA模型。以下是如何加载完全微调模型的简单示例:
from transformers import LlamaTokenizer, LlamaForCausalLM
tokenizer = LlamaTokenizer.from_pretrained(MODEL_PATH)
model = LlamaForCausalLM.from_pretrained(MODEL_PATH, device_map='auto')
在这个示例中,LlamaTokenizer用于加载分词器,LlamaForCausalLM用于加载模型。device_map='auto'
参数用于在GPU可用时自动使用GPU。MODEL_PATH
表示你的模型保存路径。
加载模型后,你可以生成响应。以下是一个示例:
prompt = 'Consider this post: "work, it has been a stressful week! hope it gets better." Question: What is the stress cause of this post?'
inputs = tokenizer(prompt, return_tensors="pt")
# Generate
generate_ids = model.generate(inputs.input_ids, max_length=2048)
tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
我们在MentaLLaMA-chat-13B上运行这些代码得到以下响应:
回答:这篇帖子显示的压力原因与工作有关。推理:帖子明确提到工作是压力源,并表达了希望情况好转的愿望。这表明发帖者正在经历与工作相关的压力,说明在这种情况下工作是他们压力的主要原因。
对于MentaLLaMA-33B-lora模型,由于我们的模型是基于Vicuna-33B基础模型的,你需要先在这里下载Vicuna-33B模型,并将其放在./vicuna-33B
目录下。然后下载MentaLLaMA-33B-lora权重并将其放在./MentaLLaMA-33B-lora
目录下。
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
peft_model = AutoPeftModelForCausalLM.from_pretrained("./MentaLLaMA-33B-lora")
tokenizer = AutoTokenizer.from_pretrained('./MentaLLaMA-33B-lora')
加载模型后,你可以生成响应。以下是一个示例:
input_data = ["考虑这个帖子:我终于内心死掉了,我不知道该如何感受恐惧、愤怒、悲伤...都消失了。我只感到麻木。问题:发帖人是否患有抑郁症?"]
inputs = tokenizer(input_data, return_tensors="pt", padding=True)
input_ids = inputs.input_ids
generate_ids = peft_model.generate(**inputs, max_length=2048)
truc_ids = generate_ids[0][len(input_ids[0]) :]
response = tokenizer.decode(truc_ids, skip_special_tokens=True, spaces_between_special_tokens=False)
我们在MentaLLaMA-33B-lora上运行这些代码得到以下响应:
推理:是的,发帖人患有抑郁症。推理:发帖人的陈述表达了一种情感麻木和缺乏情感反应的感觉。这是抑郁症的常见症状,因为患有抑郁症的个体通常会经历情感感受能力的减弱。发帖人还提到感觉内心死掉,这进一步表明缺乏情感联系和绝望感,这两者在抑郁症中都很常见。总的来说,使用的语言和对情感麻木的描述与抑郁症常见的症状相符。
IMHI数据集
我们从10个现有数据集中收集原始数据,涵盖8个心理健康分析任务,并将它们转换为可解释心理健康分析的测试数据。10个测试集的统计信息如下:
名称 | 任务 | 数据分割 | 数据来源 | 标注 | 是否发布 |
---|---|---|---|---|---|
DR | 抑郁检测 | 1,003/430/405 | 弱标签 | 是 | |
CLP | 抑郁检测 | 456/196/299 | 人工标注 | 尚未 | |
dreaddit | 压力检测 | 2,837/300/414 | 人工标注 | 是 | |
SWMH | 心理障碍检测 | 34,822/8,705/10,882 | 弱标签 | 尚未 | |
T-SID | 心理障碍检测 | 3,071/767/959 | 弱标签 | 尚未 | |
SAD | 压力原因检测 | 5,547/616/684 | SMS | 人工标注 | 是 |
CAMS | 抑郁/自杀原因检测 | 2,207/320/625 | 人工标注 | 尚未 | |
loneliness | 孤独检测 | 2,463/527/531 | 人工标注 | 尚未 | |
MultiWD | 健康维度检测 | 15,744/1,500/2,441 | 人工标注 | 是 | |
IRF | 人际风险因素检测 | 3,943/985/2,113 | 人工标注 | 是 |
训练数据
我们介绍了IMHI,这是第一个用于社交媒体上可解释心理健康分析的多任务和多源指令调优数据集。 我们目前发布了以下数据集的训练和评估数据:DR、dreaddit、SAD、MultiWD和IRF。指令数据位于
/train_data/instruction_data
这些项目很容易理解:query
行表示问题,gpt-3.5-turbo
行表示我们修改和评估的ChatGPT预测和解释。gpt-3.5-turbo
被用作评估的黄金响应。
为了便于在没有指令跟随能力的模型上进行训练,我们还发布了部分IMHI-completion的测试数据。数据位于
/train_data/complete_data
文件布局与指令调优数据相同。
评估基准
我们引入了第一个包含19K测试样本的全面可解释心理健康分析评估基准。所有测试数据都已发布。指令数据位于
/test_data/test_instruction
这些项目很容易理解:query
行表示问题,gpt-3.5-turbo
行表示我们修改和评估的ChatGPT预测和解释。gpt-3.5-turbo
被用作评估的黄金响应。
为了便于在没有指令跟随能力的模型上进行测试,我们还发布了部分IMHI-completion的测试数据。数据位于
/test_data/test_complete
文件布局与指令调优数据相同。
模型评估
响应生成
要在IMHI基准上评估你训练的模型,首先加载你的模型并为所有测试项生成响应。我们使用Hugging Face Transformers库加载模型。对于基于LLaMA的模型,你可以使用以下命令生成响应:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset IMHI --llama --cuda
MODEL_PATH
和OUTPUT_PATH
分别表示模型保存路径和生成响应的保存路径。所有生成的响应将被放在../model_output
下。一些生成的示例显示在
./examples/response_generation_examples
你也可以使用以下命令在IMHI-completion测试集上进行评估:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset IMHI-completion --llama --cuda
你也可以通过删除--llama
参数来加载不基于LLaMA的模型。
在生成的示例中,goldens
行表示参考解释,generated_text
行表示你的模型生成的响应。
正确性评估
我们IMHI基准的第一个评估指标是评估模型生成的分类正确性。如果你的模型能够生成非常规范的响应,基于规则的分类器可以很好地为每个响应分配一个标签。我们在IMHI.py
中提供了一个基于规则的分类器,你可以在响应生成过程中通过添加参数--rule_calculate
来使用它。分类器需要以下模板:
[标签] 推理: [解释]
然而,由于大多数LLM都经过训练以生成多样化的响应,基于规则的标签分类器是不切实际的。例如,MentaLLaMA对SAD查询可能会有以下响应:
这篇帖子表明,发帖人的姐姐被诊断出患有卵巢癌,全家人都非常沮丧。这表明在这种情况下压力的原因是健康问题,具体是姐姐被诊断出患有卵巢癌。帖子没有提到任何其他潜在的压力原因,因此在这种情况下,健康问题是最合适的标签。
为了解决这个问题,在我们的MentaLLaMA论文中,我们基于MentalBERT训练了10个神经网络分类器,每个收集的原始数据集对应一个。这些分类器被训练用于根据解释分配分类标签。我们发布这10个分类器以便于未来在IMHI基准上进行评估。
所有训练的模型在IMHI测试数据上都达到了95%以上的准确率。在分配标签之前,请确保你已将输出文件转换为/exmaples/response_generation_examples
的格式,并命名为DATASET.csv
。将所有你想要标记的输出文件放在同一个DATA_PATH目录下。然后从以下链接下载相应的分类器模型:
模型下载链接: CAMS, CLP, DR,
dreaddit, Irf, loneliness, MultiWD,
SAD, swmh, t-sid
将所有下载的模型放在MODEL_PATH目录下,并以其数据集命名每个模型。例如,DR数据集的模型应放在/MODEL_PATH/DR
下。现在你可以使用以下命令通过这些模型获取标签:
cd src
python label_inference.py --model_path MODEL_PATH --data_path DATA_PATH --data_output_path OUTPUT_PATH --cuda
其中MODEL_PATH
、DATA_PATH
表示你指定的模型和数据目录,OUTPUT_PATH
表示你的输出路径。处理后,输出文件的格式应与/examples/label_data_examples
中的示例相同。如果你希望计算权重F1分数和准确率等指标,请在上述命令中添加--calculate
参数。
解释质量评估
IMHI基准的第二个评估指标是评估生成解释的质量。我们评估论文中的结果显示,BART-score与人类在4个评估方面的注释有中等程度的相关性,并且优于其他自动评估指标。因此,我们使用BART-score来评估生成解释的质量。具体来说,你应首先使用IMHI.py
脚本生成响应,并获得如examples/response_generation_examples
中的响应目录。
首先,下载BART-score目录并将其放在/src
下,然后下载BART-score检查点。然后使用以下命令用BART-score对你的响应进行评分:
cd src
python score.py --gen_dir_name DIR_NAME --score_method bart_score --cuda
DIR_NAME
表示你生成的响应的目录名,应放在../model_output
下。我们还提供其他评分方法。你可以将--score_method
更改为'GPT3_score'、'bert_score'、'bleu'、'rouge'来使用这些指标。对于GPT-score,你需要先下载项目并将其放在/src
下。
人工注释
我们发布了对AI生成解释的人工注释,以促进未来对可解释心理健康分析自动评估工具的对齐研究。基于这些人工评估结果,我们测试了各种现有自动评估指标与人类偏好的相关性。我们评估论文中的结果显示,BART-score在所有4个方面与人工注释有中等程度的相关性。
质量评估
在我们的评估论文中,我们手动标注了DR数据集的AIGC结果子集,从4个方面进行评估:流畅性、完整性、可靠性和整体评价。注释发布在以下目录中:
/human_evaluation/DR_annotation
我们在这里标注了163个ChatGPT为抑郁检测数据集DR生成的解释。文件chatgpt_data.csv
包含121个ChatGPT正确分类的解释。chatgpt_false_data.csv
包含42个ChatGPT错误分类的解释。我们还在gpt3_data.csv
中包含了121个InstructionGPT-3正确分类的解释。
专家编写的黄金解释
在我们的MentaLLaMA论文中,我们邀请了一位量化心理学领域的专家为350个选定的帖子(每个原始数据集35个帖子)编写解释。这个黄金集用于准确评估LLM的解释生成能力。为促进未来研究,我们发布了以下数据集的专家编写解释:DR、dreaddit、SWMH、T-SID、SAD、CAMS、loneliness、MultiWD和IRF(每个35个样本)。数据发布在以下目录中:
/human_evaluation/test_instruction_expert
专家编写的解释经过处理,遵循与其他测试数据集相同的格式,以方便模型评估。你可以使用类似于响应生成的命令在专家编写的黄金解释上测试你的模型。例如,你可以按如下方式测试基于LLaMA的模型:
cd src
python IMHI.py --model_path MODEL_PATH --batch_size 8 --model_output_path OUTPUT_PATH --test_dataset expert --llama --cuda
引用
如果你使用了评估论文中的人工注释或分析,请引用:
@inproceedings{yang2023towards,
title={Towards interpretable mental health analysis with large language models},
author={Yang, Kailai and Ji, Shaoxiong and Zhang, Tianlin and Xie, Qianqian and Kuang, Ziyan and Ananiadou, Sophia},
booktitle={Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing},
pages={6056--6077},
year={2023}
}
如果你在工作中使用了MentaLLaMA,请引用:
@article{yang2023mentalllama,
title={MentalLLaMA: Interpretable Mental Health Analysis on Social Media with Large Language Models},
author={Yang, Kailai and Zhang, Tianlin and Kuang, Ziyan and Xie, Qianqian and Ananiadou, Sophia},
journal={arXiv preprint arXiv:2309.13567},
year={2023}
}
许可
MentaLLaMA采用[MIT]许可。请在MIT文件中查看更多详情。