license: mit
模型简介
Pandemic PACT高级分类引擎(PPACE)是一款经过微调的80亿参数大语言模型,专为根据世界卫生组织研究优先级对生物医学资助项目的摘要进行自动分类而设计。作为GLOPID-R Pandemic PACT项目的组成部分,该模型可协助追踪分析具有暴发潜力的各类疾病的研究资金流向与临床证据。
该模型采用人工标注数据集进行训练,并通过更大规模语言模型生成的分类依据进行数据增强。这些分类依据为标注标签提供解释说明,从而提升模型的可解释性与准确性。
使用指南
输入提示词构建
def construct_input_prompt(title, abstract):
categories = """我们有一个生物医学研究项目需要根据研究优先级进行分类。共有12个可能的研究优先级,每个项目可对应1个或多个优先级。以下是12个类别的具体说明:
1. 病原体:自然史、传播与诊断:
诊断工具开发、病原体形态学研究、基因组学与基因分型、免疫研究、疾病模型应用、病原体环境稳定性评估。
2. 动物与环境研究及病媒生物研究:
动物宿主研究、传播途径、媒介生物学、病媒控制策略。
3. 流行病学研究:
疾病传播动力学、易感性研究、防控措施效果评估、基于监测报告的疾病分布图谱。
4. 人类临床特征与管理:
疾病严重程度预后因素、发病机制、支持性护理与管理、长期健康影响、疾病管理的临床试验。
5. 感染预防与控制:
社区限制措施研究、防护装备与PPE、医疗机构感染控制、人畜接触面防控措施。
6. 治疗学研发与实施:
治疗药物临床前研究、治疗安全性与有效性临床试验、预防性治疗开发、治疗药物供应链管理、治疗临床试验设计、治疗相关不良反应研究。
7. 疫苗研发与实施:
疫苗临床前研究、疫苗安全性与有效性临床试验、疫苗分发策略、疫苗设计与接种、疫苗临床试验设计、免疫接种不良反应研究、疫苗诱导免疫特征。
8. 伦理问题研究:
研究设计伦理考量、公共卫生措施伦理问题、临床决策伦理、资源分配伦理、伦理治理、健康社会决定因素中的伦理问题。
9. 公共卫生政策与社区韧性:
公共卫生干预方法、社区参与、信息传播与信息流行病管理、疫苗/治疗犹豫、政策研究与干预。
10. 疾病及防控措施的次生影响:
间接健康影响、社会影响、经济影响、其他次生影响(如环境效应、粮食安全、基础设施)。
11. 卫生体系研究:
卫生服务提供、卫生筹资、药品与技术可及性、卫生信息系统、卫生领导与治理、卫生人力管理。
12. 能力建设:
个人能力建设、机构能力强化、系统/环境要素、各级能力建设的交叉活动。"""
prompt = "根据研究分类指南,使用1-12类别将以下项目归类到主要研究优先级。"
prompt += f"\n\n{categories.strip()}\n\n项目信息:\n\n"
prompt += f"### 标题:\n'''\n{title.strip()}\n'''\n\n### 摘要:\n'''\n{abstract.strip()}\n'''\n\n"
prompt += "根据上述信息,确定本项目相关的研究类别。请提供明确的分类依据,并按以下格式回复:"
prompt += "\n\n### 解释说明:...\n\n### 分类结果:..."
return prompt
title = "灵长类免疫缺陷病毒的中和作用"
abstract = "我们将重新利用项目团队在HIV研究中积累的核心检测技术、结构生物学、疫苗开发和蛋白质生产等专业能力,在COVID-19大流行期间开展SARS-CoV-2研究。这些交叉研究将运用我们既有的方法论体系,有效利用现有NIH资助资源。需要注意的是,三个研究实施机构对我们原定HIV-1疫苗研发目标仍存在制度性限制。这些目标将保持不变,但在我们同时开展SARS-CoV-2新项目期间将减少投入——由于疫情原因,新项目面临的制度限制较少。"
input_prompt = construct_input_prompt(title, abstract)
模型加载
model_id = "nlpie/ppace-v1.0"
tokenizer = ts.AutoTokenizer.from_pretrained(model_id)
tokenizer.padding_side = 'right'
tokenizer.pad_token = tokenizer.eos_token
tokenizer.add_eos_token = True
tokenizer.bos_token, tokenizer.eos_token
model = ts.AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
attn_implementation="flash_attention_2",
torch_dtype=torch.bfloat16)
推理预测
def generateOutput(input):
inputs = tokenizer(
[
tokenizer.decode(tokenizer.apply_chat_template([{"content": input, "role": "user"}]))
], return_tensors = "pt").to("cuda")
output = model.generate(**inputs, max_new_tokens = 512, num_beams=4, eos_token_id=tokenizer("<|eot_id|>", add_special_tokens=False)["input_ids"][0])
return tokenizer.decode(output[0])
output = generateOutput(input_prompt)
完整代码
def construct_input_prompt(title, abstract):
categories = """我们有一个生物医学研究项目需要根据研究优先级进行分类。共有12个可能的研究优先级,每个项目可对应1个或多个优先级。以下是12个类别的具体说明:
1. 病原体:自然史、传播与诊断:
诊断工具开发、病原体形态学研究、基因组学与基因分型、免疫研究、疾病模型应用、病原体环境稳定性评估。
2. 动物与环境研究及病媒生物研究:
动物宿主研究、传播途径、媒介生物学、病媒控制策略。
3. 流行病学研究:
疾病传播动力学、易感性研究、防控措施效果评估、基于监测报告的疾病分布图谱。
4. 人类临床特征与管理:
疾病严重程度预后因素、发病机制、支持性护理与管理、长期健康影响、疾病管理的临床试验。
5. 感染预防与控制:
社区限制措施研究、防护装备与PPE、医疗机构感染控制、人畜接触面防控措施。
6. 治疗学研发与实施:
治疗药物临床前研究、治疗安全性与有效性临床试验、预防性治疗开发、治疗药物供应链管理、治疗临床试验设计、治疗相关不良反应研究。
7. 疫苗研发与实施:
疫苗临床前研究、疫苗安全性与有效性临床试验、疫苗分发策略、疫苗设计与接种、疫苗临床试验设计、免疫接种不良反应研究、疫苗诱导免疫特征。
8. 伦理问题研究:
研究设计伦理考量、公共卫生措施伦理问题、临床决策伦理、资源分配伦理、伦理治理、健康社会决定因素中的伦理问题。
9. 公共卫生政策与社区韧性:
公共卫生干预方法、社区参与、信息传播与信息流行病管理、疫苗/治疗犹豫、政策研究与干预。
10. 疾病及防控措施的次生影响:
间接健康影响、社会影响、经济影响、其他次生影响(如环境效应、粮食安全、基础设施)。
11. 卫生体系研究:
卫生服务提供、卫生筹资、药品与技术可及性、卫生信息系统、卫生领导与治理、卫生人力管理。
12. 能力建设:
个人能力建设、机构能力强化、系统/环境要素、各级能力建设的交叉活动。"""
prompt = "根据研究分类指南,使用1-12类别将以下项目归类到主要研究优先级。"
prompt += f"\n\n{categories.strip()}\n\n项目信息:\n\n"
prompt += f"### 标题:\n'''\n{title.strip()}\n'''\n\n### 摘要:\n'''\n{abstract.strip()}\n'''\n\n"
prompt += "根据上述信息,确定本项目相关的研究类别。请提供明确的分类依据,并按以下格式回复:"
prompt += "\n\n### 解释说明:...\n\n### 分类结果:..."
return prompt
title = "灵长类免疫缺陷病毒的中和作用"
abstract = "我们将重新利用项目团队在HIV研究中积累的核心检测技术、结构生物学、疫苗开发和蛋白质生产等专业能力,在COVID-19大流行期间开展SARS-CoV-2研究。这些交叉研究将运用我们既有的方法论体系,有效利用现有NIH资助资源。需要注意的是,三个研究实施机构对我们原定HIV-1疫苗研发目标仍存在制度性限制。这些目标将保持不变,但在我们同时开展SARS-CoV-2新项目期间将减少投入——由于疫情原因,新项目面临的制度限制较少。"
input_prompt = construct_input_prompt(title, abstract)
model_id = "nlpie/ppace-v1.0"
tokenizer = ts.AutoTokenizer.from_pretrained(model_id)
tokenizer.padding_side = 'right'
tokenizer.pad_token = tokenizer.eos_token
tokenizer.add_eos_token = True
tokenizer.bos_token, tokenizer.eos_token
model = ts.AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
attn_implementation="flash_attention_2",
torch_dtype=torch.bfloat16)
def generateOutput(input):
inputs = tokenizer(
[
tokenizer.decode(tokenizer.apply_chat_template([{"content": input, "role": "user"}]))
], return_tensors = "pt").to("cuda")
output = model.generate(**inputs, max_new_tokens = 512, num_beams=4, eos_token_id=tokenizer("<|eot_id|>", add_special_tokens=False)["input_ids"][0])
return tokenizer.decode(output[0])
output = generateOutput(input_prompt)
print(output)
模型细节
PPACE采用低秩自适应(LoRA)技术进行微调,在保证高性能的同时实现高效训练。模型在5142个项目组成的数据集上训练4个周期,使用8块A100 GPU,每GPU批大小为1,梯度累积步数为4。
超参数配置
超参数 |
值 |
总批大小 |
8 |
梯度累积步数 |
4 |
学习率 |
2e-4 |
学习率调度器 |
线性 |
训练周期数 |
2 |
LoRA秩 |
128 |
LoRA α |
256 |
LoRA丢弃率 |
0.05 |