Nucleotide Transformer V2 500m Multi Species
模型简介
模型特点
模型能力
使用案例
🚀 核苷酸变换器v2 - 500m多物种模型
核苷酸变换器是一组基于全基因组DNA序列进行预训练的基础语言模型。与其他方法相比,我们的模型不仅整合了单一参考基因组的信息,还利用了来自3200多个不同人类基因组以及850个来自广泛物种(包括模式生物和非模式生物)的基因组的DNA序列。通过强大且广泛的评估,我们发现与现有方法相比,这些大模型在分子表型预测方面提供了极其准确的结果。
此模型集合的一部分是核苷酸变换器v2 - 500m多物种模型,这是一个具有5亿参数的变换器模型,它在来自广泛物种(包括模式生物和非模式生物)的850个基因组集合上进行了预训练。
开发者: InstaDeep、NVIDIA和慕尼黑工业大学(TUM)
模型资源
- 仓库: 核苷酸变换器
- 论文: 《核苷酸变换器:构建和评估用于人类基因组学的强大基础模型》
🚀 快速开始
在其下一次发布之前,若要使用该模型,需要通过以下命令从源代码安装transformers
库:
pip install --upgrade git+https://github.com/huggingface/transformers.git
这里给出一个小代码片段,用于从一个虚拟DNA序列中获取对数几率(logits)和嵌入向量(embeddings)。
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
# 导入分词器和模型
tokenizer = AutoTokenizer.from_pretrained("InstaDeepAI/nucleotide-transformer-v2-500m-multi-species", trust_remote_code=True)
model = AutoModelForMaskedLM.from_pretrained("InstaDeepAI/nucleotide-transformer-v2-500m-multi-species", trust_remote_code=True)
# 选择输入序列填充的长度。默认情况下,选择模型的最大长度,但可以根据需要减小它,因为获取嵌入向量所需的时间会随长度显著增加。
max_length = tokenizer.model_max_length
# 创建一个虚拟DNA序列并进行分词
sequences = ["ATTCCGATTCCGATTCCG", "ATTTCTCTCTCTCTCTGAGATCGATCGATCGAT"]
tokens_ids = tokenizer.batch_encode_plus(sequences, return_tensors="pt", padding="max_length", max_length = max_length)["input_ids"]
# 计算嵌入向量
attention_mask = tokens_ids != tokenizer.pad_token_id
torch_outs = model(
tokens_ids,
attention_mask=attention_mask,
encoder_attention_mask=attention_mask,
output_hidden_states=True
)
# 计算序列嵌入向量
embeddings = torch_outs['hidden_states'][-1].detach().numpy()
print(f"嵌入向量形状: {embeddings.shape}")
print(f"每个标记的嵌入向量: {embeddings}")
# 添加嵌入维度轴
attention_mask = torch.unsqueeze(attention_mask, dim=-1)
# 计算每个序列的平均嵌入向量
mean_sequence_embeddings = torch.sum(attention_mask*embeddings, axis=-2)/torch.sum(attention_mask, axis=1)
print(f"平均序列嵌入向量: {mean_sequence_embeddings}")
✨ 主要特性
- 基于全基因组DNA序列预训练,整合多源信息。
- 利用3200多个不同人类基因组和850个广泛物种基因组的DNA序列。
- 在分子表型预测方面提供极其准确的结果。
📦 安装指南
在其下一次发布之前,若要使用该模型,需要通过以下命令从源代码安装transformers
库:
pip install --upgrade git+https://github.com/huggingface/transformers.git
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
# 导入分词器和模型
tokenizer = AutoTokenizer.from_pretrained("InstaDeepAI/nucleotide-transformer-v2-500m-multi-species", trust_remote_code=True)
model = AutoModelForMaskedLM.from_pretrained("InstaDeepAI/nucleotide-transformer-v2-500m-multi-species", trust_remote_code=True)
# 选择输入序列填充的长度。默认情况下,选择模型的最大长度,但可以根据需要减小它,因为获取嵌入向量所需的时间会随长度显著增加。
max_length = tokenizer.model_max_length
# 创建一个虚拟DNA序列并进行分词
sequences = ["ATTCCGATTCCGATTCCG", "ATTTCTCTCTCTCTCTGAGATCGATCGATCGAT"]
tokens_ids = tokenizer.batch_encode_plus(sequences, return_tensors="pt", padding="max_length", max_length = max_length)["input_ids"]
# 计算嵌入向量
attention_mask = tokens_ids != tokenizer.pad_token_id
torch_outs = model(
tokens_ids,
attention_mask=attention_mask,
encoder_attention_mask=attention_mask,
output_hidden_states=True
)
# 计算序列嵌入向量
embeddings = torch_outs['hidden_states'][-1].detach().numpy()
print(f"嵌入向量形状: {embeddings.shape}")
print(f"每个标记的嵌入向量: {embeddings}")
# 添加嵌入维度轴
attention_mask = torch.unsqueeze(attention_mask, dim=-1)
# 计算每个序列的平均嵌入向量
mean_sequence_embeddings = torch.sum(attention_mask*embeddings, axis=-2)/torch.sum(attention_mask, axis=1)
print(f"平均序列嵌入向量: {mean_sequence_embeddings}")
📚 详细文档
训练数据
核苷酸变换器v2 - 500m多物种模型在从NCBI下载的总共850个基因组上进行了预训练。这些基因组不包括植物和病毒,因为它们的调控元件与论文任务中关注的调控元件不同。一些经过深入研究的模式生物被选入基因组集合,该集合总共包含1740亿个核苷酸,即大约290亿个标记。这些数据已作为HuggingFace数据集发布在此处。
训练过程
预处理
使用核苷酸变换器分词器对DNA序列进行分词。该分词器在可能的情况下将序列分词为6 - 聚体(6 - mers),否则将每个核苷酸单独分词,具体描述见相关仓库的分词部分。这个分词器的词汇表大小为4105。模型的输入形式如下:
<CLS> <ACGTGT> <ACGTGC> <ACGGAC> <GACTAG> <TCAGCA>
分词后的序列最大长度为1000。
使用的掩码过程是Bert风格训练的标准过程:
- 15%的标记被掩码。
- 在80%的情况下,被掩码的标记被替换为
[MASK]
。 - 在10%的情况下,被掩码的标记被替换为一个与它们所替换的标记不同的随机标记。
- 在剩下的10%的情况下,被掩码的标记保持不变。
预训练
该模型在9000亿个标记上使用8个80GB的A100 GPU进行训练,有效批量大小为100万个标记。使用的序列长度为1000个标记。使用Adam优化器[38]并采用学习率调度,指数衰减率和ε常数的标准值为β1 = 0.9,β2 = 0.999,ε = 1e - 8。在第一个预热期,学习率在16000步内从5e - 5线性增加到1e - 4,然后在训练结束前按照平方根衰减方式下降。
架构
该模型属于第二代核苷酸变换器,架构上的变化包括使用旋转位置嵌入(rotary positional embeddings)而非学习型位置嵌入,以及引入门控线性单元(Gated Linear Units)。
BibTeX引用
@article{dalla2023nucleotide,
title={The Nucleotide Transformer: Building and Evaluating Robust Foundation Models for Human Genomics},
author={Dalla-Torre, Hugo and Gonzalez, Liam and Mendoza Revilla, Javier and Lopez Carranza, Nicolas and Henryk Grywaczewski, Adam and Oteri, Francesco and Dallago, Christian and Trop, Evan and Sirelkhatim, Hassan and Richard, Guillaume and others},
journal={bioRxiv},
pages={2023--01},
year={2023},
publisher={Cold Spring Harbor Laboratory}
}
🔧 技术细节
- 模型属于第二代核苷酸变换器,使用旋转位置嵌入代替学习型位置嵌入,并引入了门控线性单元。
- 分词器词汇表大小为4105,分词方式优先将序列分词为6 - 聚体。
- 训练使用Adam优化器,学习率在预热期线性增加后按平方根衰减。
📄 许可证
本项目使用CC - BY - NC - SA 4.0许可证。







