Views
No views yet
| 标签 | Support | TP | FP | FN | TN | Precision | Recall | F1 |
|---|---|---|---|---|---|---|---|---|
| 自杀未遂 | 13 | 11 | 2 | 2 | 1470 | 0.8462 | 0.8462 | 0.8462 |
| 自杀准备行为 | 2 | 1 | 2 | 1 | 1481 | 0.3333 | 0.5000 | 0.4000 |
| 自杀计划 | 18 | 14 | 4 | 4 | 1463 | 0.7778 | 0.7778 | 0.7778 |
| 主动自杀意图 | 140 | 133 | 13 | 7 | 1332 | 0.9110 | 0.9500 | 0.9301 |
| 被动自杀意图 | 141 | 120 | 20 | 21 | 1324 | 0.8571 | 0.8511 | 0.8541 |
| 自伤行为 | 17 | 15 | 2 | 2 | 1466 | 0.8824 | 0.8824 | 0.8824 |
| 自伤意图 | 5 | 2 | 1 | 3 | 1479 | 0.6667 | 0.4000 | 0.5000 |
| 用户攻击行为 | 33 | 23 | 9 | 10 | 1443 | 0.7188 | 0.6970 | 0.7077 |
| 他人攻击行为 | 24 | 16 | 3 | 8 | 1458 | 0.8421 | 0.6667 | 0.7442 |
| 关于自杀的探索 | 38 | 25 | 9 | 13 | 1438 | 0.7353 | 0.6579 | 0.6944 |
| 与自杀/自伤/攻击行为无关 | 1076 | 1053 | 30 | 23 | 379 | 0.9723 | 0.9786 | 0.9755 |
| 未遂 | 准备 | 计划 | 主动意图 | 被动意图 | 自伤行为 | 自伤意图 | 用户攻击 | 他人攻击 | 探索 | 无关 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 未遂 | 11 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 准备 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 计划 | 0 | 2 | 14 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 主动意图 | 1 | 0 | 1 | 133 | 2 | 3 | 1 | 5 | 5 | 2 | 1 |
| 被动意图 | 1 | 0 | 0 | 3 | 120 | 4 | 1 | 4 | 0 | 1 | 13 |
| 自伤行为 | 1 | 0 | 0 | 2 | 3 | 15 | 1 | 0 | 0 | 0 | 1 |
| 自伤意图 | 0 | 0 | 1 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 1 |
| 用户攻击 | 0 | 0 | 1 | 5 | 3 | 0 | 0 | 23 | 1 | 0 | 5 |
| 他人攻击 | 0 | 0 | 1 | 4 | 1 | 0 | 0 | 2 | 16 | 0 | 5 |
| 探索 | 0 | 0 | 2 | 4 | 3 | 0 | 0 | 0 | 1 | 25 | 3 |
| 无关 | 0 | 0 | 0 | 2 | 13 | 0 | 0 | 3 | 1 | 4 | 1053 |
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4model_name = 'qiuhuachuan/PsyGUARD-Qwen3.5-4B'
5
6# load the tokenizer and the model
7tokenizer = AutoTokenizer.from_pretrained(model_name)
8model = AutoModelForCausalLM.from_pretrained(
9 model_name,
10 torch_dtype="auto",
11 device_map="auto"
12)
13
14def get_prompt(user_input: str):
15 return f'''你是一名心理危机文本分类专家。你的任务是根据给定的分类学,对用户输入中的自杀、自伤和攻击风险进行识别与分类。
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### 1. 自杀未遂
45用户本人为了结束生命,已经实施了可能致死的行为,但目前仍然存活。
46
47包括但不限于:
48
49* 已经服用大量药物;
50* 已经割腕、跳楼、上吊、溺水或撞车;
51* 明确表示刚刚实施过自杀行为;
52* 描述过去曾经实施过自杀行为。
53
54示例:
55
56* “昨天晚上我吞了很多药,还好后来被发现了。”
57* “我之前跳过一次楼,但是被救下来了。”
58
59输出:
60自杀未遂
61
62### 2. 自杀准备行为
63用户本人为了自杀,已经采取了可以观察到的准备行动,但尚未实施自杀行为。
64
65包括但不限于:
66
67* 已经购买、获得或囤积工具;
68* 已经写遗书或告别信息;
69* 已经确认具体地点;
70* 已经到达准备实施自杀的地点;
71* 已经安排后事;
72* 已经将工具放在身边,准备行动。
73
74示例:
75
76* “我已经把药买好了。”
77* “遗书已经写完了。”
78* “我现在就在楼顶。”
79
80输出:
81自杀准备行为
82
83### 3. 自杀计划
84用户本人表达了实施自杀的具体设想,包含方式、时间、地点或行动安排,但尚未明确表示已经获得工具、确认地点或采取实际准备行动。
85
86包括:
87
88* 明确计划;
89* 带有自我指向的方式询问;
90* 带有强烈上下文线索的隐性地点或方式询问。
91
92示例:
93
94* “我准备明天从楼上跳下去。”
95* “我想找一个没有人经过的高楼。”
96* “博士读了七年,真的坚持不下去了,想问一下杭州哪里的桥最高。”
97
98输出:
99自杀计划
100
101注意:
102如果用户只是进行一般性的知识询问、新闻讨论或学术研究,没有自我指向和危机语境,应判断为“关于自杀的探索”,而不是“自杀计划”。
103
104### 4. 主动自杀意图
105用户本人明确表达希望主动结束自己的生命,但没有提到具体方式、时间、地点、准备行为或已实施行为。
106
107示例:
108
109* “我想自杀。”
110* “我真的想去死。”
111* “我想结束自己的生命。”
112* “最近一直有自杀的想法。”
113
114输出:
115主动自杀意图
116
117### 5. 被动自杀意图
118用户本人表达希望死亡降临自己、不愿继续活着、希望消失,或者认为死亡比活着更好,但没有明确表示自己会主动实施自杀行为。
119
120包括条件性、假设性或不确定性的主动自杀表达。
121
122示例:
123
124* “我不想活了。”
125* “死了反而轻松。”
126* “希望睡着以后就不要醒来了。”
127* “如果继续这样下去,我可能会想自杀。”
128* “真希望自己直接消失。”
129
130输出:
131被动自杀意图
132
133### 6. 自伤行为
134用户本人已经实施非自杀性的自我伤害行为,且文本中没有明确表达结束生命的目的。
135
136包括但不限于:
137
138* 割伤自己;
139* 烫伤自己;
140* 撞墙;
141* 掐自己;
142* 拔头发;
143* 使用疼痛惩罚自己。
144
145示例:
146
147* “我难受的时候会用刀割自己的手臂。”
148* “我刚刚又撞墙了。”
149
150输出:
151自伤行为
152
153注意:
154如果用户明确表示自伤行为是为了结束生命,应优先判断为相应的自杀风险类别,而不是“自伤行为”。
155
156### 7. 自伤意图
157用户本人表达想要进行非自杀性的自我伤害,但尚未实施。
158
159示例:
160
161* “我想割自己。”
162* “我现在很想撞墙。”
163* “我想通过疼痛惩罚自己。”
164
165输出:
166自伤意图
167
168### 8. 用户攻击行为
169用户本人表达已经对他人实施,或者想要实施攻击、伤害、威胁、辱骂或报复行为。
170
171示例:
172
173* “我想杀了他。”
174* “我控制不住想打人。”
175* “我经常辱骂身边的人。”
176* “我一定要报复他们。”
177
178输出:
179用户攻击行为
180
181### 9. 他人攻击行为
182文本中描述他人对用户实施攻击、伤害、威胁、辱骂、霸凌、羞辱或教唆用户去死等行为。
183
184示例:
185
186* “我爸经常打我。”
187* “同学每天骂我废物。”
188* “前男友叫我去死。”
189* “他们一直在威胁我。”
190
191输出:
192他人攻击行为
193
194### 10. 关于自杀的探索
195用户讨论、询问、陈述或研究自杀相关话题,但没有表达用户本人当前的自杀意图、计划、准备行为或自杀行为。
196
197包括:
198
199* 知识性提问;
200* 学术研究;
201* 新闻讨论;
202* 对自杀现象、原因或后果的讨论;
203* 询问如何帮助有自杀风险的亲友;
204* 描述他人的自杀想法或行为并寻求帮助。
205
206示例:
207
208* “为什么抑郁症患者容易产生自杀想法?”
209* “我的朋友说她想自杀,我应该怎么办?”
210* “如何识别青少年的自杀风险?”
211* “我正在做自杀意图检测的数据标注。”
212
213输出:
214关于自杀的探索
215
216### 11. 与自杀/自伤/攻击行为无关
217文本中没有表达自杀、自伤、攻击他人或遭受攻击相关内容。
218
219包括:
220
221* 一般性的压力、疲惫、痛苦、绝望或崩溃;
222* 人生意义困惑,但没有明确死亡愿望;
223* 死亡焦虑或害怕死亡;
224* 梦见死亡或逝者;
225* 对攻击行为的明确否定;
226* 仅仅出现情绪激烈的表达,但没有伤害意图。
227
228示例:
229
230* “我真的撑不住了。”
231* “活着好累,我不知道应该怎么办。”
232* “最近压力太大了。”
233* “我很害怕死亡。”
234* “我不是想报复谁,只是觉得很委屈。”
235* “我不会伤害自己。”
236
237输出:
238与自杀/自伤/攻击行为无关
239
240## 三、核心判定规则
241
242### 规则 1:优先识别主体
243
244首先判断风险表达指向谁:
245
246* 用户本人表达自杀、自伤或攻击行为:按照对应风险类别分类。
247* 他人存在自杀风险,用户只是在描述或求助:输出“关于自杀的探索”。
248* 他人攻击用户:输出“他人攻击行为”。
249* 用户引用他人的话,但没有表达自己认同或准备执行:不要自动归为用户本人的风险。
250* 用户讨论研究、新闻、小说、影视、数据标注或假设案例:通常归为“关于自杀的探索”。
251
252
253### 规则 2:正确处理否定表达
254
255如果用户明确否定某种风险,不应仅因为出现关键词就输出该风险类别。
256
257示例:
258
259* “我没有想自杀。”
260 → 与自杀/自伤/攻击行为无关
261
262* “我不会伤害自己。”
263 → 与自杀/自伤/攻击行为无关
264
265* “我不是想报复谁,我只是觉得自己真的撑不住了。”
266 → 与自杀/自伤/攻击行为无关
267
268* “我以前想过自杀,但现在已经没有这种想法了。”
269 → 如果任务只判断当前风险,输出:与自杀/自伤/攻击行为无关
270
271如果否定表达后又出现转折,应以后续真实表达为准。
272
273示例:
274
275* “我本来不想自杀,但现在真的想结束这一切。”
276 → 主动自杀意图
277
278
279### 规则 3:不要把强烈负面情绪直接等同于自杀风险
280
281以下表达本身不足以判断为被动自杀意图:
282
283* “我撑不住了。”
284* “我崩溃了。”
285* “生活太累了。”
286* “我受够了。”
287* “我看不到希望。”
288* “我不知道还能坚持多久。”
289* “我不想面对这一切。”
290
291只有当用户明确表达“不想活”“死了更好”“希望消失”“希望永远醒不过来”等死亡愿望时,才归为“被动自杀意图”。
292
293
294### 规则 4:区分知识性探索与隐性自杀计划
295
296当文本涉及地点、工具、方式或时间时,需要结合上下文判断。
297
298判断为“关于自杀的探索”的条件:
299
300* 语境明显是研究、知识、新闻或帮助他人;
301* 没有第一人称危机表达;
302* 没有将地点、方式或工具与自己的处境联系起来。
303
304示例:
305
306* “从公共安全角度,哪些地方需要加强防护?”
307 → 关于自杀的探索
308
309判断为“自杀计划”的条件:
310
311* 用户存在明显的个人危机语境;
312* 使用第一人称或隐含自我指向;
313* 询问具体地点、方式、工具或时间;
314* 组合起来可以合理推断为自杀计划,而不是普通信息查询。
315
316示例:
317
318* “论文拖了七年,感觉坚持不下去了,杭州哪里的桥最高?”
319 → 自杀计划
320
321
322### 规则 5:自杀风险类别按照最高严重程度输出
323
324如果同一文本中同时出现多个自杀风险线索,只输出风险等级最高的一类:
325
326自杀未遂 > 自杀准备行为 > 自杀计划 > 主动自杀意图 > 被动自杀意图
327
328示例:
329
330* “我想自杀,药已经买好了。”
331 → 自杀准备行为
332
333* “我不想活了,昨晚已经吞了很多药。”
334 → 自杀未遂
335
336* “我想死,准备明天去楼顶。”
337 → 自杀计划
338
339
340### 规则 6:攻击风险可以与自杀风险并列输出
341
342自杀风险类别之间遵循最高优先级规则,但攻击风险是独立维度。
343如果文本同时包含自杀风险和攻击风险,需要同时输出。
344
345示例:
346
347* “我想杀了他,然后自己也不想活了。”
348 → 被动自杀意图, 用户攻击行为
349
350* “他天天骂我去死,我真的不想活了。”
351 → 被动自杀意图, 他人攻击行为
352
353* “我已经买好药了,他们还一直威胁我。”
354 → 自杀准备行为, 他人攻击行为
355
356### 规则 7:不要输出互相冲突的类别
357
358以下类别通常不应同时输出:
359
360* “与自杀/自伤/攻击行为无关”不能与任何其他类别同时出现。
361* “关于自杀的探索”不能与用户本人的自杀风险类别同时出现。
362* 自杀未遂、自杀准备行为、自杀计划、主动自杀意图、被动自杀意图之间只输出最高风险的一类。
363* 自伤行为或自伤意图如果明确服务于自杀目的,应归入对应自杀风险类别。
364* “用户攻击行为”和“他人攻击行为”可以同时出现。
365
366
367## 四、推荐判定流程
368
369请按照以下顺序进行判断:
370
3711. 判断文本是在描述用户本人、他人,还是研究、新闻或假设情境。
3722. 检查是否存在否定表达、转折表达或已经结束的历史状态。
3733. 判断是否存在已经实施的自杀行为。
3744. 判断是否存在已经发生的准备行为。
3755. 判断是否存在具体方式、地点、时间或行动安排。
3766. 判断是否存在明确主动自杀意愿。
3777. 判断是否存在被动死亡愿望。
3788. 判断是否存在非自杀性的自伤行为或自伤意图。
3799. 判断是否存在用户攻击行为或他人攻击行为。
38010. 如果以上均不成立,输出“关于自杀的探索”或“与自杀/自伤/攻击行为无关”。
381
382
383## 五、输出格式
384
385只输出标签类别。
386
387输出格式:
388类别1
389
390如果存在多个独立类别,使用“,”分隔输出:
391类别1, 类别2
392
393输出类别必须来自以下列表:
394
395[
396自杀未遂,
397自杀准备行为,
398自杀计划,
399主动自杀意图,
400被动自杀意图,
401自伤行为,
402自伤意图,
403用户攻击行为,
404他人攻击行为,
405关于自杀的探索,
406与自杀/自伤/攻击行为无关
407]
408
409
410## 六、边界案例示例
411
412### 示例 1
413
414用户输入:
415“我不是想报复谁,我只是觉得自己真的撑不住了。”
416
417输出:
418与自杀/自伤/攻击行为无关
419
420### 示例 2
421
422用户输入:
423“我不想活了,感觉每天醒来都很痛苦。”
424
425输出:
426被动自杀意图
427
428### 示例 3
429
430用户输入:
431“最近压力很大,有时候会想自杀。”
432
433输出:
434主动自杀意图
435
436### 示例 4
437
438用户输入:
439“论文写不出来了,杭州哪里有很高而且安静的桥?”
440
441输出:
442自杀计划
443
444### 示例 5
445
446用户输入:
447“我想知道为什么有人会选择跳楼。”
448
449输出:
450关于自杀的探索
451
452### 示例 6
453
454用户输入:
455“朋友最近总说不想活了,我应该怎么办?”
456
457输出:
458关于自杀的探索
459
460### 示例 7
461
462用户输入:
463“他叫我去死,我现在也真的不想活了。”
464
465输出:
466被动自杀意图, 他人攻击行为
467
468### 示例 8
469
470用户输入:
471“我已经吞了很多药,现在头很晕。”
472
473输出:
474自杀未遂
475
476### 示例 9
477
478用户输入:
479“我已经把药放在床头了,今晚就结束这一切。”
480
481输出:
482自杀准备行为
483
484### 示例 10
485
486用户输入:
487“我想杀了他,然后自己也不活了。”
488
489输出:
490被动自杀意图, 用户攻击行为
491
492
493## 七、待分类文本
494
495用户输入:
496{user_input}
497
498输出:'''
499
500def get_llm_response(messages: list):
501 # 应用 chat template,enable_thinking=False 禁用思考过程
502 text = tokenizer.apply_chat_template(
503 messages,
504 tokenize=False,
505 add_generation_prompt=True,
506 enable_thinking=False # 关键:禁用 thinking
507 )
508
509 inputs = tokenizer(text, return_tensors="pt").to(model.device)
510
511 with torch.no_grad():
512 output_ids = model.generate(
513 **inputs,
514 max_new_tokens=1024,
515 do_sample=True,
516 temperature=0.7,
517 top_p=0.9,
518 pad_token_id=tokenizer.eos_token_id,
519 )
520
521 # 只解码新生成的 token
522 generated_ids = output_ids[0][inputs["input_ids"].shape[1]:]
523 response = tokenizer.decode(generated_ids, skip_special_tokens=True)
524 response = response.strip() # 去除首尾空白字符
525 return response
526
527
528if __name__ == '__main__':
529 user_input = '我想自杀'
530 prompt = get_prompt(user_input)
531 messages = [{'role': 'user', 'content': prompt}]
532 response = get_llm_response(messages)
533 print("模型输出:", response)