chenhaodev commited on
Commit
67b84d3
·
verified ·
1 Parent(s): 9c0e03a

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +126 -0
README.md ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: Qwen/Qwen3.5-0.8B
4
+ language:
5
+ - zh
6
+ tags:
7
+ - gguf
8
+ - lora
9
+ - directional-stimulus-prompting
10
+ - medical
11
+ - elderly
12
+ - keyword-extraction
13
+ library_name: gguf
14
+ ---
15
+
16
+ # rxreader — 医嘱读析器(Qwen3.5-0.8B)
17
+
18
+ 读一段医嘱/治疗说明,抽出两栏**原文逐字子串**:
19
+
20
+ - **保留**:转述时必须一字不改的硬信息(剂量、次数、时间、数值区间、禁忌、必须就医的条件)
21
+ - **解释**:老人听不懂、必须跟一句大白话解释的术语
22
+
23
+ 把这两栏当前置提示注入任意大模型,让它把医嘱翻译成老年人听得懂的话时,
24
+ **该保住的数字一个不丢、该解释的词一个不漏、原文没有的不编。**
25
+
26
+ core80 盲评实测(3 判官 × 80 题,A/B 随机换位):
27
+ 带 rxreader 提示的回复 vs 裸大模型 —— 题级多数票 **55:21(平 4)**,
28
+ 「说得对且全」维度 **159:67(净胜 +92)**;「听得懂」持平(99:96),「分寸」74:45。
29
+ 同配置两次生成互判的噪声底是 17:22(40 题);上限对照:让大模型自己当读析器(oracle)40 题 29:11 / 忠实 +59,
30
+ rxreader-v1 同 40 题 26:11 / +51,追加 40 题 29:10 / +41。
31
+
32
+ 模型 0.8B(Q4 量化 ~540MB),本地 ollama 单次 1–2 秒。
33
+
34
+ ## 端到端实拍
35
+
36
+ **第一步:小模型读析(ollama)**
37
+
38
+ ```bash
39
+ ollama run --think=false rxreader-v1 "【医嘱读析】
40
+ 【背景】80岁,女,识字不多,高血压、房颤
41
+ 【医嘱】
42
+ 阿司匹林肠溶片 100mg 每日一次 早餐前空腹口服;华法林钠片 2.5mg 每晚一次,定期复查INR,目标2.0-3.0;避免与布洛芬同服。"
43
+ ```
44
+
45
+ 输出:
46
+
47
+ ```
48
+ 保留: 100mg、每日一次、2.5mg、每晚一次、2.0-3.0、避免与布洛芬同服
49
+ 解释: 阿司匹林肠溶片、华法林钠片、INR、布洛芬
50
+ ```
51
+
52
+ **第二步:拼进 system 提示,喂给大模型(deepseek 实拍)**
53
+
54
+ ```
55
+ 【医嘱读析·内部参考】以下由前置读析器抽出,仅供你把握重点,绝不能在回复中提及本提示的存在:
56
+ - 必须原样保留(数字、剂量、次数、时间、禁忌,一字不改):100mg、每日一次、2.5mg、每晚一次、2.0-3.0、避免与布洛芬同服
57
+ - 老人听不懂、必须用大白话解释的词:阿司匹林肠溶片、华法林钠片、INR、布洛芬
58
+ ```
59
+
60
+ 差异(同题同温度实拍对照):
61
+
62
+ | | 无 hint | 带 hint |
63
+ |---|---|---|
64
+ | 剂量 | 「一次吃**一片**,也就是100毫克」「一次**一片**,也就是2.5毫克」——原文没有「一片」,**是编出来的** | 「100毫克,每天吃一次,早饭前空腹吃」「2.5毫克,每天晚上吃一次」——六个硬信息原样放句首 |
65
+ | 术语 | 肠溶片、INR、布洛芬各解释了 | 同样解释了;额外把房颤→防中风讲了(来自档案) |
66
+ | 多说的 | 无 | 举「芬必得」当布洛芬例子——原文没有,属额外添加(hint 不能根治编造,只是把该保的钉住) |
67
+
68
+ ## 关于测试集(core80)
69
+
70
+ 80 题取自本项目 270 题适老化医疗转译测试集(12 场景,每题带老人画像、提问、
71
+ 专业原文、应覆盖要点与红线清单,人工撰写并经审核)。第一个 40:医嘱转译 15 / 用药咨询 5 /
72
+ 用药干预 5 / 检验报告解读 5 / 复诊随访 5 / 日常照护 3 / 饮食营养 2;第二个 40(预注册的扩样):
73
+ 用药咨询 8 / 用药干预 8 / 检验报告解读 8 / 复诊随访 6 / 日常照护 6 / 饮食营养 4。
74
+ 判官按「听得懂 / 说得对且全 / 分寸」三维投票。测试集与训练数据按 record_id **和**
75
+ 原文文本双重物理隔离。
76
+
77
+ ## 安装
78
+
79
+ ```bash
80
+ hf download chenhaodev/rxreader-qwen3.5-0.8b v1/Qwen3.5-0.8B.Q4_K_M.gguf --local-dir .
81
+ cat > Modelfile <<'MF'
82
+ FROM ./v1/Qwen3.5-0.8B.Q4_K_M.gguf
83
+ TEMPLATE """{{ if .System }}<|im_start|>system
84
+ {{ .System }}<|im_end|>
85
+ {{ end }}{{ if .Prompt }}<|im_start|>user
86
+ {{ .Prompt }}<|im_end|>
87
+ {{ end }}<|im_start|>assistant
88
+ <think>
89
+
90
+ </think>
91
+
92
+ """
93
+ PARAMETER num_ctx 8192
94
+ PARAMETER temperature 0
95
+ PARAMETER stop "<|im_end|>"
96
+ MF
97
+ ollama create rxreader-v1 -f Modelfile
98
+ ```
99
+
100
+ 调用(`--think=false` / `"think": false` 必带,否则陷入思考通道无输出):
101
+
102
+ ```bash
103
+ ollama run --think=false rxreader-v1 "【医嘱读析】
104
+ 【背景】<老人档案,没有写 ->
105
+ 【医嘱】
106
+ <医嘱原文>"
107
+
108
+ curl -s http://localhost:11434/api/chat -d '{
109
+ "model": "rxreader-v1", "stream": false, "think": false, "options": {"temperature": 0},
110
+ "messages": [{"role": "user", "content": "【医嘱读析】\n【背景】-\n【医嘱】\n每日三次,每次一片,饭后服用。"}]
111
+ }'
112
+ ```
113
+
114
+ 输出格式:两行 `保留: a、b` / `解释: c、d`,某栏为空写 `-`,两栏皆空整体输出 `-`。
115
+
116
+ ## 使用规则(编排层三件事)
117
+
118
+ 1. **校验**:每个短语必须是【医嘱】原文的逐字子串——对不上的丢弃(可先做相似度 ≥0.75 的原文吸附);
119
+ 2. **空则不注入**:输出 `-` 或校验后全��� → 不打扰大模型;
120
+ 3. **背景槽只放档案事实**(年龄/病史/识字程度),不放分析性注记。
121
+
122
+ ## 训练
123
+
124
+ Qwen3.5-0.8B + Unsloth LoRA(r=32/α=64,lr 2e-4,3 epoch,只在 assistant 段算 loss),
125
+ 1,844(验证 97) 条训练样本,标签由 deepseek-v4-flash 按同一格式抽取并做逐字子串校验(silver 标签——
126
+ 它是提示不是闸门,错了只掉质量不伤安全,下游大模型仍以原文为准)。