Duyu commited on
Commit
b3c0cac
·
verified ·
1 Parent(s): de6499d

Create README.md

Browse files
Files changed (1) hide show
  1. README.md +166 -0
README.md ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - zh
4
+ - en
5
+ base_model:
6
+ - Qwen/Qwen2.5-3B-Instruct
7
+ pipeline_tag: text-generation
8
+ tags:
9
+ - biology
10
+ - medical
11
+ ---
12
+
13
+
14
+ <p align="center">
15
+ <br>
16
+ <img src="./image/mkty_cn_light_huggingface.svg" style="width:50%;">
17
+ </p>
18
+ <br>
19
+
20
+ # 明康慧医大模型 (MKTY-3B)
21
+
22
+ ### 🌍 文档语言
23
+
24
+ [**简体中文**](./README.md) | [**英语 (English)**](./README_EN.md) | [**越南语 (Tiếng Việt)**](./README_VN.md)
25
+
26
+
27
+ > 请注意,本文档的英文与越南文版本均使用LLM翻译自中文版本,有人工校对但差错难免,若出现英文或越南文版本内容与中文版本的不一致时,以中文为准。
28
+
29
+ ### 📖 模型简介
30
+
31
+ 该模型是“明康慧医 - 基于LLM与多模态人工智能的健康管理与辅助诊疗系统设计与实现”项目(简称:明康慧医智慧医疗系统)的组成部分,为本人2025级齐鲁工业大学(山东省科学院)计算机科学与技术学部本科毕业设计而开发。项目已开源,地址为:[https://github.com/duyu09/MKTY-System](https://github.com/duyu09/MKTY-System)。
32
+
33
+ 本模型在医学、医疗及生物学领域进行了微调与优化,其表现优于其底座模型`Qwen2.5-3B-Instruct`。微调过程采用LoRA算法,分两步进行,且仅针对中文语言。首先,通过增量训练(Pretrain)阶段,利用医学书籍、病历及医疗相关文章等语料数据进行初步训练。随后,进行指令监督微调(SFT),使用的语料包括症状与对应病历、医患对话(症状描述及诊断)、医学知识问答,以及基于“大模型讨论机制”的对话语料。总数据量约为`2.88GB`。
34
+
35
+ 特别地,模型在“大模型讨论机制”方面进行了优化。该机制的具体运作方式如下:模型在回答每个问题时,会基于不同的上下文生成多个结果,模拟“多人发表观点”的场景。系统还设有“主持人”角色,负责总结各轮讨论的观点。随后,所有参与者根据原始问题、主持人的总结以及各自的上下文,进行下一轮讨论。此过程循环往复,直至讨论结果收敛(语义趋于一致)或达到预设的最大讨论轮数。
36
+
37
+ ### 🚀 使用示例
38
+
39
+ 模型基于通义千问`Qwen2.5-3B-Instruct`,可直接通过transformer库快速加载启动。
40
+
41
+ **模型加载**
42
+
43
+ ```python
44
+ from transformers import AutoModelForCausalLM, AutoTokenizer
45
+
46
+ def load_model_and_tokenizer(model_name):
47
+ model = AutoModelForCausalLM.from_pretrained(
48
+ model_name,
49
+ torch_dtype="auto",
50
+ device_map="auto"
51
+ )
52
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
53
+ return model, tokenizer
54
+
55
+
56
+ def generate_response(prompt, messages, model, tokenizer, max_new_tokens=2000):
57
+ messages.append({"role": "user", "content": prompt})
58
+ text = tokenizer.apply_chat_template(
59
+ messages,
60
+ tokenize=False,
61
+ add_generation_prompt=True
62
+ )
63
+ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
64
+ generated_ids = model.generate(
65
+ **model_inputs,
66
+ max_new_tokens=max_new_tokens
67
+ )
68
+ generated_ids = [
69
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
70
+ ]
71
+ response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
72
+ messages.append({"role": "assistant", "content": response})
73
+ return response
74
+ ```
75
+
76
+ **普通问答模式**
77
+
78
+ ```python
79
+ if __name__ == "__main__":
80
+ model_name = r"MKTY-3B"
81
+ messages = []
82
+ model, tokenizer = load_model_and_tokenizer(model_name)
83
+ while True:
84
+ prompt = input("User> ")
85
+ if prompt == "exit":
86
+ break
87
+ response = generate_response(prompt, messages, model, tokenizer)
88
+ print("MKTY>", response)
89
+ ```
90
+
91
+ **大模型讨论模式**
92
+
93
+ ```python
94
+ if __name__ == "__main__":
95
+ model_name = "mkty"
96
+ discuss_rounds = 3
97
+ agent_number = 3
98
+ model, tokenizer = load_model_and_tokenizer(model_name)
99
+ messages_arr = [[] for _ in range(agent_number)]
100
+ while True:
101
+ prompt = input("User> ")
102
+ if prompt == "exit":
103
+ break
104
+ moderator_opinion = "暂无"
105
+ for i in range(discuss_rounds):
106
+ responses_arr = []
107
+ prompt_per_round = "- 问题:\n" + prompt + "\n - 上轮讨论主持人意见:\n" + moderator_opinion + "\n - 请你结合主持人意见,对上述医疗或医学专业的问题发表详细观点,可以质疑并说明理由。\n"
108
+ for j in range(agent_number):
109
+ messages = messages_arr[j]
110
+ response = generate_response(prompt_per_round, messages, model, tokenizer)
111
+ responses_arr.append(response)
112
+ print(f"第{i + 1}轮讨论,LLM {j + 1}观点>\n", response)
113
+ print("-------------------")
114
+ moderator_prompt = "- 问题:\n" + prompt + "\n\n"
115
+ for res_index in range(len(responses_arr)):
116
+ moderator_prompt = moderator_prompt + f"- LLM {res_index + 1}观点:\n" + responses_arr[res_index] + "\n\n"
117
+ moderator_prompt = moderator_prompt + "对于给定的医疗相关问题,请综合各LLM观点,结合自身知识,得出你自己的判断,尽可能详尽,全部都分析到位,还要充分说明理由。\n"
118
+ moderator_opinion = generate_response(moderator_prompt, [], model, tokenizer)
119
+ print(f"第{i + 1}轮讨论,主持人的意见>\n", moderator_opinion)
120
+ print("-------------------")
121
+ clear_history(messages_arr)
122
+
123
+ ```
124
+
125
+ ## 🎓 项目作者
126
+
127
+ ```
128
+ ██\ ██\ ██\ ██\ ████████\ ██\ ██\
129
+ ███\ ███ | ██ | ██ | \__██ __| \██\ ██ |
130
+ ████\ ████ | ██ |██ / ██ | \██\ ██ /
131
+ ██\██\██ ██ | █████ / ██ | \████ /
132
+ ██ \███ ██ | ██ ██< ██ | \██ /
133
+ ██ |\█ /██ | ██ |\██\ ██ | ██ |
134
+ ██ | \_/ ██ |██\ ██ | \██\ ██\ ██ |██\ ██ |██\
135
+ \__| \__|\__|\__| \__|\__| \__|\__| \__|\__|
136
+ ```
137
+
138
+ 该模型用于2025年齐鲁工业大学(山东省科学院)计算机科学与技术学部毕业设计,仅可进行学术交流,本人及指导老师均不对模型使用造成的任何后果负责。
139
+
140
+ - 🧑‍💻 项目作者:
141
+ - **杜宇** (英语: _DU Yu_ ;越南语: _Đỗ Vũ_ ;<202103180009@stu.qlu.edu.cn> ),齐鲁工业大学(山东省科学院)计算机科学与技术学部 2025届本科毕业生
142
+
143
+ - 🏫 毕业设计指导教师:
144
+ - 校方老师:**姜文峰** (英语: _JIANG Wenfeng_ ;越南语: _Khương Văn Phong_ ),齐鲁工业大学(山东省科学院)计算机科学与技术学部 讲师
145
+ - 企业方老师:**李君** (英语: _LI Jun_ ;越南语:_Lý Quân_ ),安博教育科技集团([NYSE: AMBO](https://www.nyse.com/quote/XASE:AMBO)) 山东师创软件实训学院
146
+
147
+ 完整项目开源地址:[https://github.com/duyu09/MKTY-System](https://github.com/duyu09/MKTY-System),欢迎下载交流。
148
+
149
+ ## 🔗 友情链接
150
+
151
+ - 齐鲁工业大学(山东省科学院): [https://www.qlu.edu.cn/](https://www.qlu.edu.cn/)
152
+
153
+ - 山东省计算中心(国家超级计算济南中心): [https://www.nsccjn.cn/](https://www.nsccjn.cn/)
154
+
155
+ - 齐鲁工业大学(山东省科学院)计算机科学与技术学部: [http://jsxb.scsc.cn/](http://jsxb.scsc.cn/)
156
+
157
+ - 杜宇的GitHub主页: [https://github.com/duyu09/](https://github.com/duyu09/)
158
+
159
+ ## 📊 访客统计
160
+
161
+ <div><b>Number of Total Visits (All of Duyu09's GitHub Projects): </b><br><img src="https://profile-counter.glitch.me/duyu09/count.svg" /></div>
162
+
163
+ <div><b>Number of Total Visits (MKTY): </b>
164
+
165
+ <img src="https://profile-counter.glitch.me/duyu09-MKTY-SYSTEM/count.svg" /></div>
166
+