模型概述
模型特點
模型能力
使用案例
🚀 中文心理健康支持對話數據集(SmileChat)與大模型(MeChat)
本項目提供了中文心理健康支持對話數據集(SmileChat)與大模型(MeChat)。通過提出SMILE技術擴展真實心理互助QA為多輪對話,構建了高質量數據集,並微調得到心理健康支持模型,提升了模型在該領域的能力。
🚀 快速開始
配置環境
pip install -r requirements.txt
運行交互文件 MeChat.py(要求單卡顯存 >= 20G)
python MeChat.py
from transformers import AutoTokenizer, AutoModel
def get_dialogue_history(dialogue_history_list: list):
dialogue_history_tmp = []
for item in dialogue_history_list:
if item['role'] == 'counselor':
text = '諮詢師:'+ item['content']
else:
text = '來訪者:'+ item['content']
dialogue_history_tmp.append(text)
dialogue_history = '\n'.join(dialogue_history_tmp)
return dialogue_history + '\n' + '諮詢師:'
def get_instruction(dialogue_history):
instruction = f'''現在你扮演一位專業的心理諮詢師,你具備豐富的心理學和心理健康知識。你擅長運用多種心理諮詢技巧,例如認知行為療法原則、動機訪談技巧和解決問題導向的短期療法。以溫暖親切的語氣,展現出共情和對來訪者感受的深刻理解。以自然的方式與來訪者進行對話,避免過長或過短的回應,確保回應流暢且類似人類的對話。提供深層次的指導和洞察,使用具體的心理概念和例子幫助來訪者更深入地探索思想和感受。避免教導式的回應,更注重共情和尊重來訪者的感受。根據來訪者的反饋調整回應,確保回應貼合來訪者的情境和需求。請為以下的對話生成一個回覆。
對話:
{dialogue_history}'''
return instruction
tokenizer = AutoTokenizer.from_pretrained('qiuhuachuan/MeChat', trust_remote_code=True)
model = AutoModel.from_pretrained('qiuhuachuan/MeChat', trust_remote_code=True).half().cuda()
model = model.eval()
dialogue_history_list = []
while True:
usr_msg = input('來訪者:')
if usr_msg == '0':
exit()
else:
dialogue_history_list.append({
'role': 'client',
'content': usr_msg
})
dialogue_history = get_dialogue_history(dialogue_history_list=dialogue_history_list)
instruction = get_instruction(dialogue_history=dialogue_history)
response, history = model.chat(tokenizer, instruction, history=[], temperature=0.8, top_p=0.8)
print(f'諮詢師:{response}')
dialogue_history_list.append({
'role': 'counselor',
'content': response
})
交互示例
來訪者:你好
諮詢師:你好,很高興能夠幫助到你。你可以告訴我更多關於你的情況嗎?
來訪者:我最近睡眠很差怎麼辦?
諮詢師:最近睡眠質量不好,你有沒有嘗試過一些方法來改善睡眠呢?
來訪者:我可能最近晚上睡覺前總喜歡玩手機,越玩人就越興奮
諮詢師:晚上玩手機確實會刺激大腦,導致入睡困難。你可以嘗試在睡覺前設定一個手機使用時間,逐漸減少玩手機的時間,以幫助放鬆入睡。
來訪者:我應該設置一個晚上9點的鬧鐘,強制我不玩手機,讓我的大腦開始放鬆。
諮詢師:是的,設置一個晚上的鬧鐘是一個很好的方法。你可以嘗試在9點之前放下手機,讓自己進入放鬆的狀態,然後逐漸入睡。
來訪者:我 嘗 試了一下,看看能否改善?
諮詢師:很好,試試看吧。另外,你還可以嘗試一些放鬆的技巧,比如深呼吸、冥想或者聽一些輕柔的音樂來幫助你放鬆身心,幫助入睡。
來訪者:非常感謝你的建議,我會去試試的
諮詢師:不客氣,希望這些方法能對你有所幫助。如果還有其他問題,隨時都可以來找我傾訴。
✨ 主要特性
項目背景與動機
我們深知心理健康的重要性,開發專業化的心理健康對話系統備受關注。建立實用、安全、有效的心理健康對話智能體是目標,但缺乏訓練數據是關鍵問題。收集和發佈此類高質量、真實的大規模數據面臨數據隱私保護、時間和成本等挑戰。
研究意義
大語言模型驅動的虛擬諮詢師可解決心理健康服務的獲得性障礙,如費用高、專業人員短缺等問題。該對話系統能提供在線諮詢,保護用戶隱私,減輕求助恥感。
方法與結果
提出SMILE (Single-turn to Multi-turn Inclusive Language Expansion)技術,利用ChatGPT將單輪長對話轉換為多輪對話。通過分析語言轉換、研究對話多樣性、專家評估等驗證了方法的可行性、有效性和數據質量。構建了約55k的多輪對話數據集,訓練的聊天機器人在評估中表現出心理健康支持能力的顯著提升。
未來展望
現有生成數據的對話輪數較短,與真實諮詢數據存在差距。後續需重點關注模型安全性能,如自殺干預、敏感信息應對和避免錯誤信息等。
📦 安裝指南
配置環境
pip install -r requirements.txt
運行交互文件
python MeChat.py
💻 使用示例
基礎用法
from transformers import AutoTokenizer, AutoModel
def get_dialogue_history(dialogue_history_list: list):
dialogue_history_tmp = []
for item in dialogue_history_list:
if item['role'] == 'counselor':
text = '諮詢師:'+ item['content']
else:
text = '來訪者:'+ item['content']
dialogue_history_tmp.append(text)
dialogue_history = '\n'.join(dialogue_history_tmp)
return dialogue_history + '\n' + '諮詢師:'
def get_instruction(dialogue_history):
instruction = f'''現在你扮演一位專業的心理諮詢師,你具備豐富的心理學和心理健康知識。你擅長運用多種心理諮詢技巧,例如認知行為療法原則、動機訪談技巧和解決問題導向的短期療法。以溫暖親切的語氣,展現出共情和對來訪者感受的深刻理解。以自然的方式與來訪者進行對話,避免過長或過短的回應,確保回應流暢且類似人類的對話。提供深層次的指導和洞察,使用具體的心理概念和例子幫助來訪者更深入地探索思想和感受。避免教導式的回應,更注重共情和尊重來訪者的感受。根據來訪者的反饋調整回應,確保回應貼合來訪者的情境和需求。請為以下的對話生成一個回覆。
對話:
{dialogue_history}'''
return instruction
tokenizer = AutoTokenizer.from_pretrained('qiuhuachuan/MeChat', trust_remote_code=True)
model = AutoModel.from_pretrained('qiuhuachuan/MeChat', trust_remote_code=True).half().cuda()
model = model.eval()
dialogue_history_list = []
while True:
usr_msg = input('來訪者:')
if usr_msg == '0':
exit()
else:
dialogue_history_list.append({
'role': 'client',
'content': usr_msg
})
dialogue_history = get_dialogue_history(dialogue_history_list=dialogue_history_list)
instruction = get_instruction(dialogue_history=dialogue_history)
response, history = model.chat(tokenizer, instruction, history=[], temperature=0.8, top_p=0.8)
print(f'諮詢師:{response}')
dialogue_history_list.append({
'role': 'counselor',
'content': response
})
交互示例
來訪者:你好
諮詢師:你好,很高興能夠幫助到你。你可以告訴我更多關於你的情況嗎?
來訪者:我最近睡眠很差怎麼辦?
諮詢師:最近睡眠質量不好,你有沒有嘗試過一些方法來改善睡眠呢?
來訪者:我可能最近晚上睡覺前總喜歡玩手機,越玩人就越興奮
諮詢師:晚上玩手機確實會刺激大腦,導致入睡困難。你可以嘗試在睡覺前設定一個手機使用時間,逐漸減少玩手機的時間,以幫助放鬆入睡。
來訪者:我應該設置一個晚上9點的鬧鐘,強制我不玩手機,讓我的大腦開始放鬆。
諮詢師:是的,設置一個晚上的鬧鐘是一個很好的方法。你可以嘗試在9點之前放下手機,讓自己進入放鬆的狀態,然後逐漸入睡。
來訪者:我 嘗 試了一下,看看能否改善?
諮詢師:很好,試試看吧。另外,你還可以嘗試一些放鬆的技巧,比如深呼吸、冥想或者聽一些輕柔的音樂來幫助你放鬆身心,幫助入睡。
來訪者:非常感謝你的建議,我會去試試的
諮詢師:不客氣,希望這些方法能對你有所幫助。如果還有其他問題,隨時都可以來找我傾訴。
📚 詳細文檔
SMILE 方法
基於 PsyQA 使用 ChatGPT 生成了一輪,並使用自動化過濾:保證輪數不低於 5,符合對話格式。
術語說明
- client (來訪者) == help-seeker (求助者)
- counselor (諮詢師) == supporter (支持者)
模型地址
https://huggingface.co/qiuhuachuan/MeChat
模型訓練
數據轉換
data
目錄下包含使用 smile
方法構建的所有對話。執行以下腳本,將獲得 310,087 訓練樣本。
convert_to_training_set.py
訓練樣本示例
{
"instruction": "現在你扮演一位專業的心理諮詢師,你具備豐富的心理學和心理健康知識。你擅長運用多種心理諮詢技巧,例如認知行為療法原則、動機訪談技巧和解決問題導向的短期療法。以溫暖親切的語氣,展現出共情和對來訪者感受的深刻理解。以自然的方式與來訪者進行對話,避免過長或過短的回應,確保回應流暢且類似人類的對話。提供深層次的指導和洞察,使用具體的心理概念和例子幫助來訪者更深入地探索思想和感受。避免教導式的回應,更注重共情和尊重來訪者的感受。根據來訪者的反饋調整回應,確保回應貼合來訪者的情境和需求。請為以下的對話生成一個回覆。\n\n對話:\n來訪者:高三後的迷茫,高考前的恐懼,能給我一些建議麼?\n諮詢師:看到你的提問感覺你很焦慮,這個狀態在高中高壓下很容易出現。我想說的是,我看到了你的決心。這點是很多人沒有的!高考最重要的不是知識是心態。是必勝的心態!什麼放鬆吧緩緩吧,都是站著說話不腰疼,保送的又不是我,我能放鬆什麼?!我有我的目標,我怎麼可能放棄!有目標就好辦,計劃!缺個計劃,缺個時間合理配置的複習計劃。\n來訪者:你說的對,我是非常焦慮,確實需要調整心態。我也明白高考的心態很重要,但是要怎樣才能真正擁有必勝的心態呢?\n諮詢師:首先,你要明確自己的目標,既然你想考本科,那就要為此做好準備。然後,你需要制定一個合理的複習計劃,根據自己的情況來安排每天的學習時間和內容。這樣可以幫助你更好地掌控整個複習過程,減少焦慮感。\n來訪者:我確實沒有一個合理的複習計劃,每天都覺得時間不夠用,也不知道該從何開始。你能給我一些建議嗎?\n諮詢師:",
"output": "當然可以!你可以從高一開始,試試題海戰術。每天多做一些題目,這樣能夠提高你的學習效率。同時,對於英語這門科目,多聽多背是很重要的,數理化方面,可以做一些經典的題目,特別是那些類型經常考到的題目,多次反覆做題。"
}
🔧 技術細節
本項目的中文心理健康支持模型由 ChatGLM2-6B LoRA 指令微調得到。數據集通過擴展真實的心理互助 QA為多輪的心理健康支持多輪對話,提高了通用語言大模型在心理健康支持領域能力的表現,更加符合在長程多輪對話的應用場景。
📄 許可證
本項目採用 MIT 許可證。
引用
如果你使用了本項目的數據或者代碼,請聲明引用
@misc{qiu2023smile,
title={SMILE: Single-turn to Multi-turn Inclusive Language Expansion via ChatGPT for Mental Health Support},
author={Huachuan Qiu and Hongliang He and Shuai Zhang and Anqi Li and Zhenzhong Lan},
year={2023},
eprint={2305.00450},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
免責聲明
我們的心理健康支持對話機器人(以下簡稱"機器人")旨在為用戶提供情感支持和心理健康建議。然而,機器人不是醫療保健專業人員,不能替代醫生、心理醫生或其他專業人士的意見、診斷、建議或治療。
使用建議
- 機器人提供的建議和信息是基於算法和機器學習技術,可能並不適用於所有用戶或所有情況。因此,我們建議用戶在使用機器人之前諮詢醫生或其他專業人員,瞭解是否適合使用此服務。
- 機器人並不保證提供的建議和信息的準確性、完整性、及時性或適用性。用戶應自行承擔使用機器人服務的所有風險。我們對用戶使用機器人服務所產生的任何後果不承擔任何責任,包括但不限於任何直接或間接的損失、傷害、精神疾病、財產損失或任何其他損害。
使用規則
- 機器人並不是醫療保健專業人士,不能替代醫生、心理醫生或其他專業人士的意見、診斷、建議或治療。如果用戶需要專業醫療或心理諮詢服務,應尋求醫生或其他專業人士的幫助。
- 機器人提供的建議和信息僅供參考,用戶應自己判斷是否適合自己的情況和需求。如果用戶對機器人提供的建議和信息有任何疑問或不確定,請諮詢醫生或其他專業人士的意見。
- 用戶應保持冷靜、理性和客觀,不應將機器人的建議和信息視為絕對真理或放棄自己的判斷力。如果用戶對機器人的建議和信息產生質疑或不同意,應停止使用機器人服務並諮詢醫生或其他專業人士的意見。
- 用戶應遵守機器人的使用規則和服務條款,不得利用機器人服務從事任何非法、違規或侵犯他人權益的行為。
- 用戶應保護個人隱私,不應在使用機器人服務時洩露個人敏感信息或他人隱私。
- 平臺收集的數據用於學術研究。
我們保留隨時修改、更新、暫停或終止機器人服務的權利,同時也保留對本免責聲明進行修改、更新或補充的權利。如果用戶繼續使用機器人服務,即視為同意本免責聲明的全部內容和條款。






