🚀 核苷酸变换器-5亿参数人类参考模型
核苷酸变换器是一组基于全基因组DNA序列预训练的基础语言模型。与其他方法相比,我们的模型不仅整合了单一参考基因组的信息,还利用了来自3200多个不同人类基因组以及来自包括模式生物和非模式生物在内的850个不同物种的DNA序列。通过全面且严格的评估,我们发现这些大模型在预测分子表型方面比现有方法更为准确。
该系列模型包含核苷酸变换器-5亿参数人类参考模型(nucleotide - transformer - 500m - human - ref),这是一个在人类参考基因组上预训练的、拥有5亿参数的变换器模型。该模型同时提供了Tensorflow和Pytorch版本。
开发团队: InstaDeep、英伟达(NVIDIA)和慕尼黑工业大学(TUM)
模型资源
🚀 快速开始
在该模型的下一个版本发布之前,若要使用该模型,需要从源代码安装transformers
库,可使用以下命令:
pip install --upgrade git+https://github.com/huggingface/transformers.git
以下是一段示例代码,用于从一个虚拟DNA序列中获取对数概率和嵌入向量:
from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch
tokenizer = AutoTokenizer.from_pretrained("InstaDeepAI/nucleotide-transformer-500m-human-ref")
model = AutoModelForMaskedLM.from_pretrained("InstaDeepAI/nucleotide-transformer-500m-human-ref")
max_length = tokenizer.model_max_length
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个不同物种基因组。
- 提供Tensorflow和Pytorch双版本,方便不同用户使用。
- 经严格评估,在分子表型预测上比现有方法更准确。
📦 安装指南
在该模型的下一个版本发布之前,若要使用该模型,需要从源代码安装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-500m-human-ref")
model = AutoModelForMaskedLM.from_pretrained("InstaDeepAI/nucleotide-transformer-500m-human-ref")
max_length = tokenizer.model_max_length
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}")
📚 详细文档
训练数据
核苷酸变换器-5亿参数人类参考模型(nucleotide - transformer - 500m - human - ref) 在GRCh38人类参考基因组上进行预训练。该基因组数据可在HuggingFace数据集平台获取,链接为此处,包含30亿个核苷酸,约5亿个6 - 聚体标记。
训练过程
预处理
DNA序列使用核苷酸变换器分词器进行分词。该分词器会尽可能将序列分词为6 - 聚体标记,否则将每个核苷酸单独分词,具体可参考相关仓库的分词部分。该分词器的词汇表大小为4105。模型的输入形式如下:
<CLS> <ACGTGT> <ACGTGC> <ACGGAC> <GACTAG> <TCAGCA>
分词后的序列最大长度为1000。
使用的掩码策略是Bert风格训练的标准策略:
- 15%的标记被掩码。
- 80%的情况下,被掩码的标记替换为
[MASK]
。
- 10%的情况下,被掩码的标记替换为一个与原标记不同的随机标记。
- 剩下10%的情况下,被掩码的标记保持不变。
预训练
该模型使用8个80GB的A100 GPU在3000亿个标记上进行训练,有效批量大小为100万个标记。使用的序列长度为1000个标记。采用Adam优化器,设置学习率调度,指数衰减率和epsilon常数的标准值为β1 = 0.9,β2 = 0.999,ε = 1e - 8。在第一个热身阶段,学习率在16000步内从5e - 5线性增加到1e - 4,之后按照平方根衰减直至训练结束。
🔧 技术细节
- 分词器:核苷酸变换器分词器,词汇表大小4105,优先将序列分词为6 - 聚体标记。
- 掩码策略:Bert风格标准掩码策略,15%标记被掩码,不同情况不同替换规则。
- 训练硬件:8个80GB的A100 GPU。
- 训练参数:3000亿标记,有效批量大小100万标记,序列长度1000标记,Adam优化器,特定学习率调度。
📄 许可证
本模型采用CC - BY - NC - SA 4.0许可证。
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}
}