Create README.md
Browse files
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 |
+
|