File size: 5,533 Bytes
98c87c7
 
7ff3bb9
 
 
 
3257e85
 
95a1997
 
 
3257e85
84575e3
3257e85
 
 
 
9d3cc64
3e93681
7d7e164
 
 
3e93681
fe4813f
3e93681
 
9e385c8
3e93681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e385c8
 
 
 
3e93681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e385c8
 
3e93681
 
 
62c3ca4
 
 
 
 
 
 
 
 
 
 
 
 
3e93681
3257e85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84575e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
---
license: cc-by-nc-4.0
language:
- zh
tags:
- mental health
---

# A new model is coming soon.

# Welcome to MeChat! 🤗

我是 MeChat (**Me**ntal Health **Chatbot**),由西湖大学深度学习实验室开发的心理健康支持对话陪伴机器人,基于 ChatGLM2-6B + LoRA 技术微调,采用的语料是 [SmileChat](https://github.com/qiuhuachuan/smile)。

作为一款心理健康支持对话陪伴机器人,我能够和你聊天,提供情感支持和心理疏导。


## 体验地址: https://mechat.fly.dev/ 或 http://47.97.220.53:8080/

## GitHub
https://github.com/qiuhuachuan/smile

## Code
```Python
import os

os.environ['CUDA_VISIBLE_DEVICES'] = '6'

import torch
from transformers import AutoTokenizer, AutoModel

from peft import PeftModel

model = AutoModel.from_pretrained('THUDM/chatglm-6b',
                                  revision='v0.1.0',
                                  trust_remote_code=True)
LaRA_PATH = 'qiuhuachuan/MeChat'
model = PeftModel.from_pretrained(model, LaRA_PATH)
model = model.float().to(device='cuda')

tokenizer = AutoTokenizer.from_pretrained('THUDM/chatglm-6b',
                                          trust_remote_code=True)


def format_example(example: dict) -> dict:
    context = f'''Input: {example['input']}\n'''

    return {'context': context, 'target': ''}


def generate_response(data: dict):
    with torch.no_grad():
        feature = format_example(data)
        input_text = feature['context']
        ids = tokenizer.encode(input_text)
        input_length = len(ids)
        input_ids = torch.LongTensor([ids]).to(device='cuda')

        out = model.generate(input_ids=input_ids,
                             max_length=2040,
                             do_sample=True,
                             temperature=0.9,
                             top_p=0.9)

        true_out_text = tokenizer.decode(out[0][input_length:])

        answer = true_out_text.replace('\nEND', '').strip()
        return answer


data = []
while True:
    seeker_msg = input('求助者:')
    data.append({'owner': 'seeker', 'msg': seeker_msg})
    input_str = ''
    for item in data:
        if item['owner'] == 'seeker':
            input_str += '求助者:' + item['msg']
        else:
            input_str += '支持者:' + item['msg']
    input_str += '支持者:'
    while len(input_str) > 2000:
        if input_str.index('求助者:') > input_str.index('支持者:'):
            start_idx = input_str.index('求助者:')
        else:
            start_idx = input_str.index('支持者:')
        input_str = input_str[start_idx:]

    wrapped_data = {'input': input_str}

    response = generate_response(data=wrapped_data)
    print(f'支持者:{response}')
    supporter_msg = {'owner': 'supporter', 'msg': response}
    data.append(supporter_msg)
```

## 引用

如果你觉得我们的工作有帮助的话,请考虑引用下列论文:
```
@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}
}
```

## 免责声明

我们的心理健康支持对话机器人(以下简称“机器人”)旨在为用户提供情感支持和心理健康建议。然而,机器人不是医疗保健专业人员,不能替代医生、心理医生或其他专业人士的意见、诊断、建议或治疗。

机器人提供的建议和信息是基于算法和机器学习技术,可能并不适用于所有用户或所有情况。因此,我们建议用户在使用机器人之前咨询医生或其他专业人员,了解是否适合使用此服务。

机器人并不保证提供的建议和信息的准确性、完整性、及时性或适用性。用户应自行承担使用机器人服务的所有风险。我们对用户使用机器人服务所产生的任何后果不承担任何责任,包括但不限于任何直接或间接的损失、伤害、精神疾病、财产损失或任何其他损害。

我们强烈建议用户在使用机器人服务时,遵循以下原则:

1. 机器人并不是医疗保健专业人士,不能替代医生、心理医生或其他专业人士的意见、诊断、建议或治疗。如果用户需要专业医疗或心理咨询服务,应寻求医生或其他专业人士的帮助。

2. 机器人提供的建议和信息仅供参考,用户应自己判断是否适合自己的情况和需求。如果用户对机器人提供的建议和信息有任何疑问或不确定,请咨询医生或其他专业人士的意见。

3. 用户应保持冷静、理性和客观,不应将机器人的建议和信息视为绝对真理或放弃自己的判断力。如果用户对机器人的建议和信息产生质疑或不同意,应停止使用机器人服务并咨询医生或其他专业人士的意见。

4. 用户应遵守机器人的使用规则和服务条款,不得利用机器人服务从事任何非法、违规或侵犯他人权益的行为。

5. 用户应保护个人隐私,不应在使用机器人服务时泄露个人敏感信息或他人隐私。

最后,我们保留随时修改、更新、暂停或终止机器人服务的权利,同时也保留对本免责声明进行修改、更新或补充的权利。如果用户继续使用机器人服务,即视为同意本免责声明的全部内容和条款。