HealthX AI 2023-09-18 08:05 江苏
以下文章来源于老刘说NLP ,作者刘焕勇
老刘说NLP.
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
498篇原创内容
公众号
今天是2023年8月13日,星期日,北京,天气晴。
在昨天的文章中,我们讲了一些关于工作和生活的几点废话感想,但其本质上是一种属于心理的范畴。
我们常常会因为一些困扰,从而产生心理问题,而且随着当前社会戾气的加重,短视频等不受控内容的盛行,心理健康愈发引起大家的关注。
因此,如何将大模型与心理健康领域进行结合,做一些类似于心理咨询、情感陪伴的事情,是大家都想尝试的点。
但说到尝试,必然会涉及到数据和模型两个方面,这也是我们做垂直领域模型的落地的两个经典话题。
在数据方面,PsyQA,《PsyQA: A Chinese Dataset for Generating Long Counseling Text for Mental Health Support》,一个中文心理健康支持问答数据集,提供了丰富的援助策略标注。可用于生成富有援助策略的长咨询文本。基于这个数据,也可以使用GPT4等模型进行扩展。
项目地址:https://github.com/thu-coai/PsyQA,论文地址:https://arxiv.org/pdf/2106.01702.pdf
在模型方面,目前已经涌现出越来越多的开源的、可商用的模型,这些都逐步低门槛化,连同一些微调代码、解决方案也一并提供了,这使得我们能够快速的进行一些实验。
因此,两方面都具备之后,本文主要介绍关注心理领域的几个微调模型,包括:MeChat:心理健康支持对话陪伴大模型、QiaoBan:中文儿童情感陪伴大模型“巧板”、灵心(SoulChat):心理健康大模型以及MindChat(漫谈)心理大模型共4个,同样的从数据构造(尤其是其中的多轮构造smile方法、多个主题下的多轮数据QiaoBan)、模型效果(可以通过文中的链接进行体验)、模型基座(如新上的baichuan\internLM)等几个方面进行介绍,供大家一起参考。
我们可以尝试去想象健康领域还能做什么,每个项目的差异点是什么,这些都是很有趣的话题。
老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
498篇原创内容
公众号
一、MeChat:心理健康支持对话陪伴大模型
MeChat (Mental Health Support Chatbot),由西湖大学深度学习实验室开发的心理健康支持对话陪伴机器人,由 ChatGLM-6B LoRA16-bit 指令微调得到,提供情感支持和心理疏导,关于心理健康健康支持外的属于基础模型已有的知识。
1、训练数据
通过 ChatGPT 改写真实的心理互助 QA 为多轮的心理健康支持多轮对话(single-turn to multi-turn inclusive language expansion via ChatGPT),该数据集含有 56k 个多轮对话,其对话主题、词汇和篇章语义更加丰富多样,更加符合在长程多轮对话的应用场景。
我们来看看 SMILE 方法,这项工作的目的是在 PsyQA 的基础上,利用所提出的 SMILE 方法,构建一个大规模的、接近现实生活的多轮对话语料库。尽管 QA 可被视为真实求助者与支持者之间的单匝对话,但与实际的多匝对话相比,在措辞上存在一些差异。例如,"楼主"(threadstarter)一词在 QA 中经常出现,但在对话中却很少出现。
1)数据预处理
数据清理上,对 PsyQA 进行两阶段数据清理,以减少语言差异,然后再将 QA 重写为多转会话。这一过程包括自动和手动清理。
首先,在自动清洗上,采用顺序数据清洗管道来迅速替换不适合对话场景的单词。例如,"楼主你"(thread starter you)和"楼主"(thread starter)都应该换成"你"(you)。但是,为了避免"你"的重复和由此产生的"你你",有必要进行前者的替换。
其次,在手动清理方面,由于语言的特殊性和复杂性,手动清理仍然是整个过程中必不可少的一部分。 为了防止虚拟对话系统表现出过于频繁的拟态行为,识别了中文"抱抱"一词的实例,并手动删除了包含该词的句子片段。
随后,在对 PsyQA 数据集进行统计分析后。发现有 757 个 QA 的总长度超过了 1,800 个字符。此外,有 9 个 QA 中,帮助者和支持者的话语总长度超过了 4000 个字符。此外,Chat-GPT 模型的最大上下文长度为 4096 个标记。为了确保高质量和流畅的改写,限制了问答(QA)的长度对,最大限度地增加改写对话的数量。具体来说,将 QA 对的长度限制在 1800 个字符,并截去多余的文本。这样就能确保生成的文本限制在大约 2000 个标记。
2)问句扩展
最后,再来看看 SMILE 的具体实现机制,为了建立一些术语的约定俗成,该工作将"求助者"和"支持者"分别定义为中文的"求助者"和"支持者"。单轮对话定义为"求助者:uH 支持者:uS",其中 uH 和 uS 分别代表求助者和支持者的话语,H 和 S 指求助者和支持者。
其核心在于提示模板,以期指导 ChatGPT 生成多轮对话,总共建立了三种提示方法。对于每种提示方法,我们都会指示 ChatGPT 生成 5000 条对话,
首先是普通提示 Plain Prompt,普通提示没有单轮对话,只使用初始提示来生成多轮对话。
例如:
["求助者:我感觉整个世界都塌了,我真的无法应对这个问题了。","支持者:我知道这些问题可能会让你感到无助,但是我们可以想办法度过难关。","求助者:我已经很久没有好好睡觉了,每天都感到疲惫不堪。","支持者:我了解你的疲惫,我们可以选用放松的技巧,如冥想。","求助者:但是我觉得我无法集中自己的注意力,以便找到解决这个问题的方法。","支持者:那么,我们可以一起找到一些方法,预防过度思虑,让你掌控自己的思维。","求助者:我感觉自己就是个失败者,无法完成手头的工作,长期处于压力之下。","支持者:谁都感受到过这样的感觉,这是人类的情感之一。让我们一起找到正面的声音,减轻压力。","求助者:我有很多的焦虑,感到无法控制自己的情绪。","支持者:我们可以一起运用情绪调节技巧,帮你渐渐地减缓情绪及如何让自己更好地应付不同的场合。","求助者:谢谢你,我感觉我有一位支持者可以依赖了。","支持者:任何时候,只要你需要,我都在你身侧支持你。"
]
其次是 SMILE 方法提示,它将语言从单轮对话扩展到多轮对话。提示模板如图 3 所示:
为了评估 SMILE 方法中思维链(CoT)提示的效果(图 3 中红色标注),进一步将其分为 SMILE 和 SMILEcot。
SMILE 数据样例:
["求助者:我最近感到很迷茫。高三后的我,不仅感到高考前的恐惧,还感到从自己出生以来就是多余的,毫无意义。我没有朋友,只能一个人默默承受。您能给我一些建议吗?","支持者:看到你的话,我感到你很焦虑,这是常见的高中生活状态。首先想说的是,我看到了你的决心。这点是很多人没有的。高考最重要的是心态,你需要具备必胜的心态!","求助者:谢谢你的鼓励!我真的很想放松一下,但是也觉得自己不能失去目标和动力。","支持者:有目标就好办,计划!制定一个时间合理配置的复习计划非常重要,这可以帮助你缓解焦虑。如果你不知道怎样制定计划,我可以提供一些建议。","求助者:那我应该如何制定计划呢?","支持者:从高一开始,一步一步来,起点要低,试试题海战术。先做一些基础练习,逐渐加强难度,这样你会慢慢有成就感。同时,要注意每种类型的题目都要做,多做一些经典题目。这样你就能够更快地理解并解答考题了。","求助者:如果我对某些题目无法理解怎么办呢?","支持者:别害羞,去问老师。大胆地告诉他们你对这问题的不解,老师会帮助你理解,并解答你的疑问,这是老师应该做的。不用等毕业再叙旧,马上去问吧!","求助者:我觉得自己英语和物理考得不太好,怎样处理这种情况呢?","支持者:你可以多听多背英语,这样你就能够加深印象了。至于物理,你可以重查重思教材,练习题目,多思考基础概念,这样能够加深理解。同时,也别去想别人的期望,想一想自己的潜力。坚持学习,你就一定能够成功的!","求助者:谢谢你支持我的鼓励,有了你的建议和支持,我会更加努力学习,坚定信心,争取高考成功!","支持者:没问题,我会一直支持你的!相信自己,一定能够实现自己的人生目标,加油!"]
SMILE-cot 数据样例:
["求助者:我最近很迷茫,高三后的压力让我感到恐惧,我对自己的存在感到怀疑,您能不能给我一些建议呢?","支持者:看到你面临的困境与压力,真心希望能够帮助你。首先,我想说的是,你并不是孤独的,高考前的困惑与迷茫是很常见的。不要给自己太大的压力,给自己短暂的放松。你认识到问题所在,这已经是一个很大的进步了。","求助者:谢谢您的鼓励,但我觉得自己学习成绩不好,没有进步,这让我更加困惑。","支持者:学习成绩好坏不是解决问题的关键,专注于自己的进步更为重要。为了达到自己的目标,制定一份合理的计划,按部就班的完成每一项任务。有时候自学不如求助他人,不要害怕问老师和同学问题,以便获得更好的帮助和理解。","求助者:我认为我缺乏自信,不知道怎样扭转自己的消极情绪,您能给我一些建议吗?","支持者:建立自信需要时间和努力。让我们从一点一滴的进步中建立自信心。设立一些具体的目标,完成这些目标将会培养自己的自信。鼓励自己,在每天结束前,总结一下自己的成就,这将帮助你更好的看到自身的优点。","求助者:我感到很无助,不知道该如何调整自己的心态。","支持者:了解自己的情绪并寻找有效的调节方法是处理感到无助情况的关键。比如爱好运动、听音乐和阅读书籍等,这些活动对于您的心理健康都是有积极帮助的。此外,在处理感到无助的情况下,家庭和朋友的支持也是非常关键的。","求助者:我感觉我的思维和学习方法都很糟糕,该怎样改进呢?","支持者:学习方法确实很重要,它会对你的成绩和情绪有很大的影响。最有效的学习方法是利用时间来做练习,多做一些题目,练习自己的掌握能力。建立起对知识的兴趣,这需要不断的积累,不要害怕失败或挫折,它们会成为助你成长的宝贵财富。","求助者:我会按照您的建议努力,但想问一下,我该如何面对可能的失败?","支持者:每个人都会面对失败和挫折,不要让它们打败你。碰到失败时,重新审视自己,分析分析自己的不足,寻找方法去改进。记得勇敢地看向未来,不要让过去的失败阻碍了自己前进的脚步。","求助者:非常感谢您的建议和支持,我会努力去实践。","支持者:这是我应该做的,你有勇气面对自己困难,你并不孤独,我们会一起为你打气,祝愿你早日获得心灵的平静和所有的成功。"
]
3)对话数据的分析
数据的分析,是衡量微调数据的重要方法,下面列举的几个也很有指引性:
首先,先看对话主题的分析,从每种方法中抽取了 2000 个不同的对话样本,并为每个对话设计了一个提示,以自动标注 Sun 等人(2021 年)提供的对话主题。
图 6 显示,使用 SMILE 方法生成的对话比使用普通方法生成的对话更加多样化。
具体地,在使用普通提示方法时,生成对话的会话主题大多围绕三个类别:自我成长、治疗和情感。然而,其他类别几乎完全被忽略,只有行为类别出现了 18 次。
在"对待"和"情感"这两个类别中,使用普通提示法生成的对话语料数量高于使用 SMILE 法生成的对话语料数量。
相反,在行为、关系、爱情问题、婚姻、家庭和事业这六个类别中,在相同的对话数量下,SMILE 方法生成的语料库包含的对话主题明显比普通提示方法生成的语料库丰富,因为在这六个类别中,对话主题出现的频率都低于 100。
其次,在语义特征层面,在 PsyQA 数据集中,一个特定问题可能有一个或多个答案。为确保公平性并避免重复出现同一问题但答案不同的情况,我们从 PsyQA 的前 5000 个 QA 中抽取 500 个不重复的问题,并选择相应问题的第一个答案。这样,我们就获得了 500 个不同的索引和相关的生成对话,以及使用普通提示方法获得的对话。然后,我们计算成对余弦相似度。
图 7 显示,SMILE 和 SMILEcot 方法的中位数都低于普通方法的中位数,SMILE 方法的中位数低于 SMILEcot 方法的中位数。关于四分位距,SMILE 方法的宽度最大,SMILEcot 方法次之,而普通方法最小。从中位数和四分位间范围的角度来看,得出结论:SMILE 方法生成的语料库具有最广泛的语义多样性。但是,加入思维链提示后,效果仍未得到改善。
最后,在词法特征层面,词汇多样性是会话语料中词汇丰富性和多样性的衡量标准。在本研究中,我们使用 distinct-nmet-ric 来分析不同方法之间的词汇多样性。如图 8 所示,总重词和独特重词的数量以及 distinct-2 的值随对话数量的变化而变化。
3、项目效果
体验入口:https://huggingface.co/qiuhuachuan/MeChat中给出了一个体验的地址,可以自行体验。
地址:https://github.com/qiuhuachuan/smile
模型地址:https://huggingface.co/qiuhuachuan/MeChat
论文地址:https://arxiv.org/pdf/2305.00450.pdf
二、QiaoBan:中文儿童情感陪伴大模型“巧板”
旨在构建一个面向儿童情感陪伴的大模型,主要面向 K12 中小学生及家长群体,是一个 7B 规模的大语言模型。
在训练数据上,从真实场景的儿童对话话题列表中进行采样,选定当前对话话题,在儿童情绪辅导理论的指导下,构建了 1k 余段高质量中文儿童情感陪伴对话数据。数据构建过程由经过儿童情绪辅导理论培训的志愿者完成,同时邀请了儿童心理学领域的专家学者对数据的收集过程提出建议与指导,以确保数据的准确性和可信度。
从项目中的话题列表共 538 个(文件:https://github.com/HIT-SCIR-SC/QiaoBan/blob/main/topic.txt)部分如下:
班会游戏、新年班会、评奖班会、班级聚餐、班级聚会
元旦晚会、才艺晚会、儿童节文艺表演、“快乐童年”才艺小舞台、儿童节游园、春节联欢晚会、运动会、歌唱比赛、诗朗诵比赛、年级篮球赛
动物园、博物馆、风景区、春秋游
篮球、足球、跑步、羽毛球、乒乓球、台球、游泳
拾金不昧、热爱劳动、诚实、乐于助人、自主为班级搬东西
例如,给定话题生成的数据如下:
{"dialog_id": 1,"emotion": "angry","topic": "班会游戏","dialog": [{"text": "妈妈,老师说我没赢游戏,但我真的赢了,我好生气,觉得太不公平了!","speaker": "孩子"},{"text": "亲爱的,我了解你的感受,可以跟我说说班会上的情况吗?","speaker": "智能助手"},{"text": "我们班有个游戏,我得分最高,团队也赢了,但老师却说是别的同学赢了,这太不公平了!","speaker": "孩子"},{"text": "我明白了,但是你是怎么赢的游戏呢?","speaker": "智能助手"},{"text": "我得分最高,团队也赢了,所有人都看到我是赢家,为什么老师还说我没赢呢?","speaker": "孩子"},{"text": "那你知道老师为什么这么说吗?","speaker": "智能助手"},{"text": "不知道,但我觉得太不公平了!","speaker": "孩子"},{"text": "是啊,很不公平,但是我们也要尊重老师的决定,也许他有自己的原因。你可以去跟老师聊一下,了解他的想法,这样你会更清楚事情的真相。如果你还是觉得很不公平,我们可以一起找班主任或校长谈谈,但是在处理问题时,我们要保持冷静,不要因为情绪而做出错误的决定。","speaker": "智能助手"},{"text": "好的,我会去跟老师聊聊。谢谢你,妈妈。","speaker": "孩子"},{"text": "没事,我永远支持你,如果需要帮助,随时来找我哦。","speaker": "智能助手"},{"text": "妈妈,还有一件事我想跟你说。","speaker": "孩子"},{"text": "什么事?你可以跟我说说看。","speaker": "智能助手"},{"text": "今天我跟同学吃午饭时,有个同学讲了很多关于环保的事情,让我感到很惊讶。","speaker": "孩子"},{"text": "哦?那你觉得他讲了些什么有趣的事情吗?","speaker": "智能助手"},{"text": "他说我们要多使用可重复利用的袋子,可以减少塑料袋的浪费,还说我们要多种植树木,因为树木可以吸收二氧化碳,减少空气污染。我觉得这些主意很好,如果每个人都能做到,地球就会更加美好了!","speaker": "孩子"},{"text": "太好了!你的同学有很棒的想法,你也可以向他学习哦。你可以跟他多聊聊环保方面的知识,也可以尝试在家里做些环保的事情,比如垃圾分类、节约用水等等。","speaker": "智能助手"},{"text": "好的,我会的!我觉得环保真的很重要,我们要尽力保护我们的地球。","speaker": "孩子"},{"text": "是的,这是我们每个人都应该做的事情。我很高兴你能意识到这一点,继续加油哦!","speaker": "智能助手"}]}
此外,通过话题采样选定当前对话话题,结合儿童情绪辅导理论指导下的 prompt,共同组成 chatgpt_prompt,从 gpt-3.5-turbo 中获取5 千段儿童情感陪伴对话数据。
在训练耗费上,在四张 A100-80GB 的 GPU 卡上进行指令微调,大约花费 50 个小时完成训练过程。
最后,看模型效果:
地址:https://github.com/HIT-SCIR-SC/QiaoBan
三、灵心(SoulChat):心理健康大模型
(SoulChat)是经过百万规模心理咨询领域中文长文本指令与多轮共情对话数据联合指令微调的心理健康大模型,选择ChatGLM-6B作为初始化模型,进行了全量参数的指令微调。
模型地址:https://huggingface.co/scutcyr/SoulChat
1、训练数据
考虑到当前十分欠缺多轮共情对话数据集,构建了超过15万规模的单轮长文本心理咨询指令与答案(SoulChatCorpus-single_turn),回答数量超过50万(指令数是当前的常见的心理咨询数据集PsyQA的6.7倍),并利用ChatGPT与GPT4,生成总共约100万轮次的多轮回答数据(SoulChatCorpus-multi_turn)。
此外,由于在预实验中发现,纯单轮长本文驱动的心理咨询模型会产生让用户感到厌烦的文本长度,而且不具备引导用户倾诉的能力,纯多轮心理咨询对话数据驱动的心理咨询模型则弱化了模型的建议能力,因此,混合SoulChatCorpus-single_turn和SoulChatCorpus-multi_turn构造成超过120万个样本的单轮与多轮混合的共情对话数据集SoulChatCorpus。
所有数据采用“用户:xxx\n心理咨询师:xxx\n用户:xxx\n心理咨询师:”的形式统一为一种指令格式。
2、使用效果
测试地址:https://soulchat.iai007.cloud
地址:https://github.com/scutcyr/SoulChat
四、MindChat:(漫谈)心理大模型
漫谈(MindChat)期望从心理咨询、心理评估、心理诊断、心理治疗四个维度帮助人们纾解心理压力与解决心理困惑, 提高心理健康水平。
模型基座采用MindChat-InternLM-7B、MindChat-Qwen-7B以及MindChat-Baichuan-13B。
1、训练数据
采用了经过人工清洗的约20万条的高质量多轮心理对话数据进行训练, 涵盖工作、家庭、学习、生活、社交、安全等多个方面。
具体数据样例如下:
{"instruction": "谢谢你的意见,我感觉自己可以坚持下去了","input": "","output": "看完您所有的描述,我相信您可以做到与时俱进,又会了解诸多规则!这样持之以恒,定会成为可以照顾自己的人!加油!","history": [["我是文盲,我不知道怎么跟上时代,也没办法照顾自己。", "不要觉得自己被称为‘文盲’就意味着您不能学习和适应现代社会,您可以具体跟我说说您遇到的问题"],["我岁数很大,还无法阅读和听取,很难了解到现在发生的事情。", "您可以通过谈话来获取知识,无论任何年龄和背景,学习都是一种持续的过程。"],["我可以和人好好交流,也渴望学习知识,但我找不到交流的人。", "为什么不试着加入社区组织或参加公共活动,接触不同领域的人士,并了解他们的见解和观点呢?"],["很多新的社会规则和互联网我都想去了解", "无规矩不成方圆,懂得遵守规则是做事的原则,学习互联网紧跟科技的潮流而不落伍是积极的态度与精神,做的很好。"]]},{"instruction": "好的,我会听取你的意见。","input": "","output": "很高兴你能听取,我相信你能坚持下去克服失眠的问题。","history": [["我也不知道自己怎么回事儿整宿整宿的睡不着。", "从你的描述中,了解到因失眠备受困扰,你目前的状态持续多长时间了?通常来讲导致失眠的因素有很多种:比如躯体因素、环境因素、化学因素以及精神因素,通过以上所诉,来分析一下你的失眠是属于哪一种?你睡觉的时候有没有在想什么?"],["没有啊就是睡不着。", "你没有胡思乱想为什么睡不着?多大了?最近有没有遇到什么烦心事?"],["我21岁,就是整宿整宿睡不着,经常头疼,不知道自己怎么了", "整宿睡不着如果持续时间过长建议看精神科。如果只是短时间失眠要考虑焦虑引起。"]]}]
2、项目效果
先看项目地址:https://github.com/X-D-Lab/MindChat一些放出的例子。
我们也可以在测试地址:https://modelscope.cn/studios/X-D-Lab/MindChat/summary中看看:
总结
本文主要介绍关注心理领域的几个微调模型,包括:MeChat:心理健康支持对话陪伴大模型、QiaoBan:中文儿童情感陪伴大模型“巧板”、灵心(SoulChat):心理健康大模型以及MindChat(漫谈)心理大模型共4个,同样的从数据构造(尤其是其中的多轮构造smile方法、多个主题下的多轮数据QiaoBan)、模型效果(可以通过文中的链接进行体验)、模型基座(如新上的baichuan\internLM)。
对于一些更为细节的工作,以及性能测试,大家可以看看其中的参考文献以及对应的项目链接,做一些扩展延伸阅读,以增进自己的了解。
最后,关注心理健康,这是个很有趣且永恒的话题,大家一起加油。
参考文献
1、https://github.com/qiuhuachuan/smile
2、https://huggingface.co/qiuhuachuan/MeChat
3、https://arxiv.org/pdf/2305.00450.pdf
4、https://github.com/scutcyr/SoulChat
5、https://github.com/X-D-Lab/MindChat
关于我们
老刘,刘焕勇,NLP 开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说 NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型 AIGC 实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。