GradientGuru
commited on
Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,382 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
language:
|
3 |
+
- en
|
4 |
+
- zh
|
5 |
+
---
|
6 |
+
<div align="center">
|
7 |
+
<h1>
|
8 |
+
Baichuan-M1-14B
|
9 |
+
</h1>
|
10 |
+
</div>
|
11 |
+
|
12 |
+
<p align="center">
|
13 |
+
🤗 <a href="https://huggingface.co/baichuan-inc/Baichuan-M1-14B-Base" target="_blank">Baichuan-M1-14B-Base</a> • 🤗 <a href="https://huggingface.co/baichuan-inc/Baichuan-M1-14B-Instruct" target="_blank">Baichuan-M1-14B-Instruct</a> • 💬 <a href="https://y41.8if.cn/JQCj6n" target="_blank">微信</a>
|
14 |
+
</p>
|
15 |
+
|
16 |
+
---
|
17 |
+
|
18 |
+
# 📖 目录
|
19 |
+
|
20 |
+
- [🏁 模型介绍](#intro)
|
21 |
+
- [🔬 数据收集与处理](#data)
|
22 |
+
- [🧠 新模型结构](#structure)
|
23 |
+
- [⚙️ 训练方法](#training)
|
24 |
+
- [📊 Benchmark 结果](#benchmark)
|
25 |
+
- [🚀 快速开始](#quick)
|
26 |
+
- [📜 声明](#declare)
|
27 |
+
|
28 |
+
---
|
29 |
+
<a name="intro"></a>
|
30 |
+
# 🏁 模型介绍
|
31 |
+
|
32 |
+
**Baichuan-14B-M1** 是由百川智能开发的业界首款从零开始专为医疗场景优化的开源大语言模型。在拥有卓越通用能力的同时,在医疗领域方面有着强大的性能。在大部分通用榜单评测中达到了同尺寸模型的效果,而在医疗场景中达到了5倍甚至更大的模型的效果。以下是模型的核心特点:
|
33 |
+
|
34 |
+
- 从零开始基于 **20万亿 token** 的高质量医疗与通用数据训练。
|
35 |
+
- 针对 **200+ 医疗科室** 细粒度医疗专业建模。
|
36 |
+
- 引入 **创新模型结构**,显著提升上下文理解和长序列任务表现。
|
37 |
+
- 提供 **[🤗 Base 模型](https://huggingface.co/baichuan-inc/Baichuan-M1-14B-Base)** 和 **[🤗 Instruct 模型](https://huggingface.co/baichuan-inc/Baichuan-M1-14B-Instruct)**。
|
38 |
+
|
39 |
+
|
40 |
+
---
|
41 |
+
<a name="data"></a>
|
42 |
+
# 🔬 数据收集与处理
|
43 |
+
|
44 |
+
## 医疗数据收集
|
45 |
+
|
46 |
+
我们针对医疗领域进行了细致的数据收集与合成,包括:
|
47 |
+
|
48 |
+
- **千万级专业医疗数据**:中/英文专业论文、医疗病例、医疗教材、知识库等。
|
49 |
+
- **亿级医疗问答与临床数据**:涵盖复杂医疗推理与实际临床案例。
|
50 |
+
- **全面的数据分类与评估**:按医疗科室、内容和价值进行分类,确保数据分布均衡,筛选出真正具有医疗价值的数据。
|
51 |
+
|
52 |
+
## 数据合成与优化
|
53 |
+
|
54 |
+
- **合成数据设计**:结合知识图谱、病例与教材,生成多样化的高质量医疗推理数据。
|
55 |
+
- **自我反思机制与奖励模型**:不断提升合成数据质量,最终生成 **近万亿 token** 的推理数据,覆盖长尾知识与复杂场景。
|
56 |
+
|
57 |
+
|
58 |
+
## 通用数据收集
|
59 |
+
|
60 |
+
- **20T 多语言通用数据集**:包括 14T 英文数据、4T 中文数据、2T 涵盖 30 种主流语言的数据。
|
61 |
+
- **去重与上采样策略**:针对高质量数据进行适度上采样,显著提升模型性能。
|
62 |
+
- **27 类全球知识分类**:基于小模型实验优化数据配比,确保通用能力与领域能力的平衡。
|
63 |
+
|
64 |
+
---
|
65 |
+
<a name="structure"></a>
|
66 |
+
# 🧠 新模型结构
|
67 |
+
|
68 |
+
## 短卷积注意力机制
|
69 |
+
|
70 |
+
- 通过在**计算Key和Value时引入轻量化的短卷积操作**,显著降低了标准Transformer模型对induction heads机制学习的依赖。传统Transformer依赖induction heads来捕捉序列中的重复模式和上下文依赖,这需要一定的模型宽度和深度,而短卷积将Key序列和Value序列在时间序列上进行轻度解耦,提升了上下文学习能力。我们从toy model到十多B参数的模型上进行了广泛实验,结果表明,短卷积注意力机制语言建模任务中表现出色,尤其是对一些对上下文信息依赖性比较强的任务。
|
71 |
+
|
72 |
+
|
73 |
+
## 滑动窗口注意力机制
|
74 |
+
|
75 |
+
- 在部分层中采用滑动窗口注意力机制,减少 KV Cache 内存占用。
|
76 |
+
- **优化点**:在计算效率和性能之间取得平衡,特别适用于长序列任务。
|
77 |
+
|
78 |
+
## 优化位置编码震荡
|
79 |
+
|
80 |
+
- 通过增大部分注意力头的维度,降低 RoPE 曲线震荡。
|
81 |
+
- **结果**:在长序列任务中表现更稳定,同时保持模型的多样化特征捕捉能力。
|
82 |
+
|
83 |
+
## 大峰值学习率策略
|
84 |
+
|
85 |
+
- 采用 **WSD 学习率调度策略**,使用高峰值学习率促进模型泛化能力。
|
86 |
+
- **对比结果**:显著提升 benchmark 上的任务表现。
|
87 |
+
|
88 |
+
## 自适应梯度更新
|
89 |
+
|
90 |
+
- **动态梯度剪裁**:当梯度过大时跳过更新,减少因特殊样本或陡峭损失空间导致的不稳定。
|
91 |
+
|
92 |
+
---
|
93 |
+
<a name="training"></a>
|
94 |
+
# ⚙️ 训练方法
|
95 |
+
|
96 |
+
我们创新性地采用了 **多阶段课程学习与对齐优化** 方法,以系统化的流程全面提升模型能力,具体包括以下两部分:
|
97 |
+
|
98 |
+
## 1. 多阶段课程学习
|
99 |
+
|
100 |
+
训练分为三个阶段,逐步优化模型的通用能力与医疗领域能力:
|
101 |
+
|
102 |
+
1. **通识能力提升阶段**:以通用语言建模为目标,提升基础语言能力和常识。
|
103 |
+
2. **医疗基础知识提升阶段**:引入高质量医疗数据,重点提升推理、数学及医学知识能力。
|
104 |
+
3. **医疗进阶知识提升阶段**:进一步优化数据质量,聚焦复杂医疗推理、病症判断和长尾知识。
|
105 |
+
|
106 |
+
## 2. 对齐优化
|
107 |
+
|
108 |
+
通过强化学习和偏序对数据的优化,提升模型生成质量、逻辑推理能力和用户偏好贴合度:
|
109 |
+
|
110 |
+
1. **偏序对数据**:覆盖多轮对话、指令跟随、数学与代码、推理任务等场景,数据来源包括人类标注和多模型生成。
|
111 |
+
2. **优化流程**:
|
112 |
+
- **ELO**:基于最大似然优化多样化高质量的思维链生成。
|
113 |
+
- **TDPO**:使用偏序对数据优化生成模型,使其更贴合用户偏好。
|
114 |
+
- **PPO**:通过策略优化进一步增强生成逻辑与任务表现。
|
115 |
+
|
116 |
+
|
117 |
+
这种多阶段与对齐优化相结合的方法,使模型在通用能力和医疗领域能力上均达到了卓越的水平。
|
118 |
+
|
119 |
+
---
|
120 |
+
<a name="benchmark"></a>
|
121 |
+
# 📊 Benchmark 结果
|
122 |
+
|
123 |
+
我们的评测覆盖了所有主流评测集,在开源与闭源评测中均取得了优异的指标,展现了卓越的医疗场景的能力,同时具备强大的通用表现。
|
124 |
+
|
125 |
+
<table style="border: 1px solid #000; border-collapse: collapse; width: 100%; text-align: center;">
|
126 |
+
<thead>
|
127 |
+
<tr>
|
128 |
+
<th>分类</th>
|
129 |
+
<th>Benchmark</th>
|
130 |
+
<th style="font-size:15px;">Baichuan-M1-14B-Instruct</th>
|
131 |
+
<th style="font-size:15px;">Qwen2.5-14B-Instruct</th>
|
132 |
+
<th style="font-size:15px;">Qwen2.5-72B-Instruct</th>
|
133 |
+
<th style="font-size:15px;">claude-3.5-sonnet-20241022</th>
|
134 |
+
<th style="font-size:15px;">gpt-4o-2024-05-13</th>
|
135 |
+
</tr>
|
136 |
+
</thead>
|
137 |
+
<tbody>
|
138 |
+
<tr>
|
139 |
+
<td colspan="2" style="text-align: center;">平均分</td>
|
140 |
+
<td>72.23</td>
|
141 |
+
<td>65.39</td>
|
142 |
+
<td>70.51</td>
|
143 |
+
<td>74.85</td>
|
144 |
+
<td>75.00</td>
|
145 |
+
</tr>
|
146 |
+
<tr>
|
147 |
+
<td rowspan="7" style="vertical-align: middle;">临床实践</td>
|
148 |
+
<td style="text-align: left;">cmbclin</td>
|
149 |
+
<td>77.40</td>
|
150 |
+
<td>71.51</td>
|
151 |
+
<td>75.36</td>
|
152 |
+
<td>78.37</td>
|
153 |
+
<td>75.36</td>
|
154 |
+
</tr>
|
155 |
+
<tr>
|
156 |
+
<td style="text-align: left;">clinicalbench_diag</td>
|
157 |
+
<td>70.90</td>
|
158 |
+
<td>68.85</td>
|
159 |
+
<td>72.23</td>
|
160 |
+
<td>75.00</td>
|
161 |
+
<td>73.05</td>
|
162 |
+
</tr>
|
163 |
+
<tr>
|
164 |
+
<td style="text-align: left;">clinicalbench_hos</td>
|
165 |
+
<td>70.05</td>
|
166 |
+
<td>68.83</td>
|
167 |
+
<td>70.53</td>
|
168 |
+
<td>65.58</td>
|
169 |
+
<td>69.38</td>
|
170 |
+
</tr>
|
171 |
+
<tr>
|
172 |
+
<td style="text-align: left;">clinicalbench_treat</td>
|
173 |
+
<td>56.38</td>
|
174 |
+
<td>55.03</td>
|
175 |
+
<td>57.30</td>
|
176 |
+
<td>64.03</td>
|
177 |
+
<td>59.35</td>
|
178 |
+
</tr>
|
179 |
+
<tr>
|
180 |
+
<td style="text-align: left;">rarearena_rdc</td>
|
181 |
+
<td>81.80</td>
|
182 |
+
<td>66.40</td>
|
183 |
+
<td>76.20</td>
|
184 |
+
<td>89.60</td>
|
185 |
+
<td>88.40</td>
|
186 |
+
</tr>
|
187 |
+
<tr>
|
188 |
+
<td style="text-align: left;">rarearena_rds</td>
|
189 |
+
<td>54.00</td>
|
190 |
+
<td>42.60</td>
|
191 |
+
<td>49.80</td>
|
192 |
+
<td>59.80</td>
|
193 |
+
<td>57.20</td>
|
194 |
+
</tr>
|
195 |
+
<tr>
|
196 |
+
<td style="text-align: left;">rarebench</td>
|
197 |
+
<td>59.60</td>
|
198 |
+
<td>52.80</td>
|
199 |
+
<td>60.60</td>
|
200 |
+
<td>65.30</td>
|
201 |
+
<td>62.80</td>
|
202 |
+
</tr>
|
203 |
+
<tr>
|
204 |
+
<td rowspan="10" style="vertical-align: middle;">考试</td>
|
205 |
+
<td style="text-align: left;">cmexam</td>
|
206 |
+
<td>80.10</td>
|
207 |
+
<td>77.70</td>
|
208 |
+
<td>82.70</td>
|
209 |
+
<td>77.50</td>
|
210 |
+
<td>78.00</td>
|
211 |
+
</tr>
|
212 |
+
<tr>
|
213 |
+
<td style="text-align: left;">儿科职称考试</td>
|
214 |
+
<td>78.48</td>
|
215 |
+
<td>74.68</td>
|
216 |
+
<td>84.81</td>
|
217 |
+
<td>76.58</td>
|
218 |
+
<td>78.48</td>
|
219 |
+
</tr>
|
220 |
+
<tr>
|
221 |
+
<td style="text-align: left;">内科职称考试</td>
|
222 |
+
<td>83.42</td>
|
223 |
+
<td>86.10</td>
|
224 |
+
<td>87.17</td>
|
225 |
+
<td>87.70</td>
|
226 |
+
<td>83.42</td>
|
227 |
+
</tr>
|
228 |
+
<tr>
|
229 |
+
<td style="text-align: left;">全科职称考试</td>
|
230 |
+
<td>87.07</td>
|
231 |
+
<td>88.44</td>
|
232 |
+
<td>88.44</td>
|
233 |
+
<td>81.63</td>
|
234 |
+
<td>84.35</td>
|
235 |
+
</tr>
|
236 |
+
<tr>
|
237 |
+
<td style="text-align: left;">USMLE</td>
|
238 |
+
<td>78.00</td>
|
239 |
+
<td>67.20</td>
|
240 |
+
<td>76.70</td>
|
241 |
+
<td>85.90</td>
|
242 |
+
<td>87.10</td>
|
243 |
+
</tr>
|
244 |
+
<tr>
|
245 |
+
<td style="text-align: left;">medbullets</td>
|
246 |
+
<td>66.88</td>
|
247 |
+
<td>54.22</td>
|
248 |
+
<td>64.29</td>
|
249 |
+
<td>72.40</td>
|
250 |
+
<td>75.97</td>
|
251 |
+
</tr>
|
252 |
+
<tr>
|
253 |
+
<td style="text-align: left;">mediq</td>
|
254 |
+
<td>83.40</td>
|
255 |
+
<td>66.80</td>
|
256 |
+
<td>79.90</td>
|
257 |
+
<td>88.80</td>
|
258 |
+
<td>90.20</td>
|
259 |
+
</tr>
|
260 |
+
<tr>
|
261 |
+
<td style="text-align: left;">nejmqa</td>
|
262 |
+
<td>49.75</td>
|
263 |
+
<td>45.69</td>
|
264 |
+
<td>50.76</td>
|
265 |
+
<td>69.54</td>
|
266 |
+
<td>54.31</td>
|
267 |
+
</tr>
|
268 |
+
<tr>
|
269 |
+
<td style="text-align: left;">pubmedqa</td>
|
270 |
+
<td>75.20</td>
|
271 |
+
<td>76.40</td>
|
272 |
+
<td>75.60</td>
|
273 |
+
<td>77.00</td>
|
274 |
+
<td>77.60</td>
|
275 |
+
</tr>
|
276 |
+
<tr>
|
277 |
+
<td style="text-align: left;">redisqa</td>
|
278 |
+
<td>74.50</td>
|
279 |
+
<td>69.70</td>
|
280 |
+
<td>75.00</td>
|
281 |
+
<td>83.20</td>
|
282 |
+
<td>82.80</td>
|
283 |
+
</tr>
|
284 |
+
<tr>
|
285 |
+
<td rowspan="5" style="vertical-align: middle;">基础能力</td>
|
286 |
+
<td style="text-align: left;">mednli_dis</td>
|
287 |
+
<td>80.40</td>
|
288 |
+
<td>68.90</td>
|
289 |
+
<td>74.90</td>
|
290 |
+
<td>58.30</td>
|
291 |
+
<td>79.80</td>
|
292 |
+
</tr>
|
293 |
+
<tr>
|
294 |
+
<td style="text-align: left;">medcalc</td>
|
295 |
+
<td>56.00</td>
|
296 |
+
<td>31.40</td>
|
297 |
+
<td>37.90</td>
|
298 |
+
<td>52.60</td>
|
299 |
+
<td>49.00</td>
|
300 |
+
</tr>
|
301 |
+
<tr>
|
302 |
+
<td style="text-align: left;">MMLU-anatomy</td>
|
303 |
+
<td>80.00</td>
|
304 |
+
<td>67.41</td>
|
305 |
+
<td>71.11</td>
|
306 |
+
<td>86.67</td>
|
307 |
+
<td>91.11</td>
|
308 |
+
</tr>
|
309 |
+
<tr>
|
310 |
+
<td style="text-align: left;">MMLU-virology</td>
|
311 |
+
<td>54.82</td>
|
312 |
+
<td>56.02</td>
|
313 |
+
<td>53.01</td>
|
314 |
+
<td>54.22</td>
|
315 |
+
<td>57.23</td>
|
316 |
+
</tr>
|
317 |
+
<tr>
|
318 |
+
<td style="text-align: left;">MMLU-genetics</td>
|
319 |
+
<td>91.00</td>
|
320 |
+
<td>82.00</td>
|
321 |
+
<td>87.00</td>
|
322 |
+
<td>97.00</td>
|
323 |
+
<td>95.00</td>
|
324 |
+
</tr>
|
325 |
+
</tbody>
|
326 |
+
</table>
|
327 |
+
|
328 |
+
|
329 |
+
---
|
330 |
+
<a name="quick"></a>
|
331 |
+
# 🚀 快速开始
|
332 |
+
|
333 |
+
### 🤗 Hugging Face Transformers
|
334 |
+
|
335 |
+
我们建议使用最新版的 Transformers 库(至少 4.47.0)。以下代码片段展示了如何使用 **Baichuan-M1-14B-Instruct** 模型:
|
336 |
+
|
337 |
+
```python
|
338 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
339 |
+
|
340 |
+
# 1. Load pre-trained model and tokenizer
|
341 |
+
model_name = "baichuan-inc/Baichuan-M1-14B-Instruct"
|
342 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
343 |
+
model = AutoModelForCausalLM.from_pretrained(model_name)
|
344 |
+
|
345 |
+
# 2. Input prompt text
|
346 |
+
prompt = "May I ask you some questions about medical knowledge?"
|
347 |
+
|
348 |
+
# 3. Encode the input text for the model
|
349 |
+
messages = [
|
350 |
+
{"role": "system", "content": "You are a helpful assistant."},
|
351 |
+
{"role": "user", "content": prompt}
|
352 |
+
]
|
353 |
+
text = tokenizer.apply_chat_template(
|
354 |
+
messages,
|
355 |
+
tokenize=False,
|
356 |
+
add_generation_prompt=True
|
357 |
+
)
|
358 |
+
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
359 |
+
|
360 |
+
# 4. Generate text
|
361 |
+
generated_ids = model.generate(
|
362 |
+
**model_inputs,
|
363 |
+
max_new_tokens=512
|
364 |
+
)
|
365 |
+
generated_ids = [
|
366 |
+
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
367 |
+
]
|
368 |
+
|
369 |
+
# 5. Decode the generated text
|
370 |
+
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
|
371 |
+
|
372 |
+
|
373 |
+
# 6. Output the result
|
374 |
+
print("Generated text:")
|
375 |
+
print(response)
|
376 |
+
```
|
377 |
+
|
378 |
+
---
|
379 |
+
<a name="declare"></a>
|
380 |
+
# 📜 声明
|
381 |
+
|
382 |
+
百川的开发团队未基于此模型开发任何商业应用,所有使用者需遵循法律法规,不得将模型用于危害国家安全或违法用途。
|