模型简介
模型特点
模型能力
使用案例
许可证: 其他 许可证名称: 健康AI开发者基础条款 许可证链接: https://developers.google.com/health-ai-developer-foundations/terms 语言:
- 英文 任务标签: 文本生成 库名称: transformers 标签:
- 治疗学
- 药物开发 额外授权标题: 在Hugging Face上访问TxGemma 额外授权提示: >- 要访问Hugging Face上的TxGemma,您需要审阅并同意健康AI开发者基础条款。 为此,请确保您已登录Hugging Face并点击下方按钮。 请求将立即处理。 额外授权按钮内容: 确认许可证
TxGemma模型卡片
模型文档: TxGemma
资源:
- Google Cloud Model Garden上的模型: TxGemma
- Hugging Face上的模型: TxGemma
- GitHub仓库(支持代码、Colab笔记本、讨论和问题): TxGemma
- 快速入门笔记本: notebooks/quick_start
- 支持: 参见 联系。
使用条款: 健康AI开发者基础条款
作者: Google
模型信息
本节介绍TxGemma模型及其使用方法。
描述
TxGemma是一组基于Gemma 2构建的轻量级、最先进的开源语言模型,专为治疗开发而微调。它提供3种规模:2B、9B和27B。
TxGemma模型设计用于处理和理解与各种治疗方式和目标相关的信息,包括小分子、蛋白质、核酸、疾病和细胞系。TxGemma在属性预测等任务上表现出色,可作为进一步微调的基础,或作为药物发现的交互式对话代理。该模型使用来自治疗数据共享库(TDC)的多样化指令微调数据集进行微调。
TxGemma既可作为预测模型(需要特定格式的提示),也可作为9B和27B版本的对话模型(更灵活,可用于多轮交互,包括解释其预测背后的逻辑)。这种对话模型会牺牲一些原始预测性能。更多信息请参阅我们的论文。
主要特点
- 多功能性: 在广泛的治疗任务中表现出色,在大量基准测试中优于或匹配最佳性能。
- 数据效率: 即使数据有限,也能表现出竞争力,相比前代模型有所改进。
- 对话能力(TxGemma-Chat): 包含对话变体,可进行自然语言对话并解释预测背后的逻辑。
- 微调基础: 可作为预训练基础,用于专门用途。
潜在应用
TxGemma可成为以下领域研究人员的宝贵工具:
- 加速药物发现: 通过预测治疗药物和目标的属性,简化治疗开发流程,包括目标识别、药物-目标相互作用预测和临床试验批准预测。
使用方法
以下是一些示例代码片段,帮助您快速在本地GPU上运行模型。如果您想使用模型对大量输入进行推理,建议使用Model Garden创建生产版本。
为治疗任务格式化提示
import json
from huggingface_hub import hf_hub_download
# 从TDC加载任务提示模板
tdc_prompts_filepath = hf_hub_download(
repo_id="google/txgemma-27b-chat",
filename="tdc_prompts.json",
)
with open(tdc_prompts_filepath, "r") as f:
tdc_prompts_json = json.load(f)
# 设置示例TDC任务和输入
task_name = "BBB_Martins"
input_type = "{Drug SMILES}"
drug_smiles = "CN1C(=O)CN=C(C2=CCCCC2)c2cc(Cl)ccc21"
# 使用模板和输入药物SMILES字符串构建提示
TDC_PROMPT = tdc_prompts_json[task_name].replace(input_type, drug_smiles)
print(TDC_PROMPT)
生成的提示符合模型预期的格式:
指令: 回答以下关于药物属性的问题。
背景: 作为分隔循环血液和脑细胞外液的膜,血脑屏障(BBB)是阻挡大多数外来药物的保护层。因此,药物穿透屏障到达作用部位的能力成为中枢神经系统药物开发的关键挑战。
问题: 给定一个药物SMILES字符串,预测其
(A) 不穿过BBB (B) 穿过BBB
药物SMILES: CN1C(=O)CN=C(C2=CCCCC2)c2cc(Cl)ccc21
答案:
在预测任务上运行模型
# pip install accelerate transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
# 直接从Hugging Face Hub加载模型
tokenizer = AutoTokenizer.from_pretrained("google/txgemma-27b-chat")
model = AutoModelForCausalLM.from_pretrained(
"google/txgemma-27b-chat",
device_map="auto",
)
# 格式化TDC提示(见“为治疗任务格式化提示”部分)
prompt = TDC_PROMPT
# 准备标记化输入
input_ids = tokenizer(prompt, return_tensors="pt").to("cuda")
# 生成响应
outputs = model.generate(**input_ids, max_new_tokens=8)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
或者,您可以使用pipeline
API,它提供了一种简单的方法来运行推理,同时隐藏了加载和使用模型及标记器的复杂细节:
# pip install transformers
from transformers import pipeline
# 使用模型实例化文本生成管道
pipe = pipeline(
"text-generation",
model="google/txgemma-27b-chat",
device="cuda",
)
# 格式化TDC提示(见“为治疗任务格式化提示”部分)
prompt = TDC_PROMPT
# 生成响应
outputs = pipe(prompt, max_new_tokens=8)
response = outputs[0]["generated_text"]
print(response)
应用对话模板进行对话使用
TxGemma-Chat模型使用必须遵守的对话模板。最简单的方法是使用标记器的内置对话模板,如下所示。
让我们加载模型并将对话模板应用于对话。在此示例中,我们将从单个用户交互开始:
# pip install accelerate transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
# 直接从Hugging Face Hub加载模型
tokenizer = AutoTokenizer.from_pretrained("google/txgemma-27b-chat")
model = AutoModelForCausalLM.from_pretrained(
"google/txgemma-27b-chat",
device_map="auto",
)
# 格式化TDC提示(见“为治疗任务格式化提示”部分)
prompt = TDC_PROMPT
# 以对话格式格式化提示
messages = [
{ "role": "user", "content": prompt}
]
# 应用标记器的内置对话模板
chat_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
此时,提示包含以下文本:
<bos><start_of_turn>user
指令: 回答以下关于药物属性的问题。
背景: 作为分隔循环血液和脑细胞外液的膜,血脑屏障(BBB)是阻挡大多数外来药物的保护层。因此,药物穿透屏障到达作用部位的能力成为中枢神经系统药物开发的关键挑战。
问题: 给定一个药物SMILES字符串,预测其
(A) 不穿过BBB (B) 穿过BBB
药物SMILES: CN1C(=O)CN=C(C2=CCCCC2)c2cc(Cl)ccc21
答案:<end_of_turn>
<start_of_turn>model
如您所见,每个轮次前面都有一个<start_of_turn>
分隔符,然后是实体角色(user
表示用户提供的内容,model
表示LLM响应)。轮次以<end_of_turn>
标记结束。
如果需要在不使用标记器的对话模板的情况下构建提示,可以按照此格式手动构建。
提示准备好后,可以按如下方式生成:
inputs = tokenizer.encode(chat_prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to("cuda"), max_new_tokens=8)
response = tokenizer.decode(outputs[0, len(inputs[0]):], skip_special_tokens=True)
print(response)
对于多次交互,将模型响应和用户提示附加到聊天消息历史记录中,并以相同方式执行生成:
messages.extend([
{ "role": "assistant", "content": response },
{ "role": "user", "content": "根据分子结构解释你的推理。" },
])
chat_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer.encode(chat_prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to("cuda"), max_new_tokens=512)
response = tokenizer.decode(outputs[0, len(inputs[0]):], skip_special_tokens=True)
print(response)
或者,您可以使用pipeline
API,它抽象了使用标记器应用对话模板等细节:
# pip install transformers
from transformers import pipeline
# 使用模型实例化文本生成管道
pipe = pipeline(
"text-generation",
model="google/txgemma-27b-chat",
device="cuda",
)
# 格式化TDC提示(见“为治疗任务格式化提示”部分)
prompt = TDC_PROMPT
# 为初始轮次以对话格式格式化提示
messages = [
{ "role": "user", "content": prompt}
]
# 为初始轮次生成响应
outputs = pipe(messages, max_new_tokens=8)
print(outputs[0]["generated_text"][-1]["content"].strip())
# 为附加轮次附加用户提示
messages = outputs[0]["generated_text"]
messages.append(
{ "role": "user", "content": "根据分子结构解释你的推理。" }
)
# 为附加轮次生成响应
outputs = pipe(messages, max_new_tokens=512)
print(outputs[0]["generated_text"][-1]["content"].strip())
示例
查看以下Colab笔记本,了解如何使用TxGemma:
- 要快速尝试模型,使用Hugging Face的权重在本地运行,请参阅Colab中的快速入门笔记本,其中包括来自TDC的一些示例评估任务。
- 有关如何在Hugging Face中微调TxGemma的演示,请参阅我们的Colab中的微调笔记本。
- 有关TxGemma如何作为工具用于由Gemini 2驱动的更大代理工作流的演示,请参阅Colab中的代理工作流笔记本。
模型架构概述
- TxGemma基于Gemma 2系列轻量级、最先进的开源LLM。它采用仅解码器的Transformer架构。
- 基础模型: Gemma 2(2B、9B和27B参数版本)。
- 微调数据: 治疗数据共享库,涵盖多样化治疗方式和目标的指令微调数据集集合。
- 训练方法: 使用治疗数据(TxT)和(对于对话变体)通用指令微调数据的混合进行指令微调。
- 对话变体: TxGemma-Chat模型(9B和27B)使用治疗和通用指令微调数据的混合训练,以保持对话能力。
技术规格
- 模型类型: 仅解码器Transformer(基于Gemma 2)
- 关键出版物: TxGemma: 高效且代理的治疗LLM
- 模型创建时间: 2025-03-18(来自TxGemma变体提案)
- 模型版本: 1.0.0
性能与验证
TxGemma的性能已在来自TDC的66个治疗任务的全面[基准测试](


