英文

nucleotide-transformer-2.5b-1000g模型

核苷酸Transformer是一组基础语言模型,它们是在全基因组的DNA序列上进行预训练的。与其他方法相比,我们的模型不仅整合了来自单个参考基因组的信息,还利用了来自3200多个多样化的人类基因组和850个来自各种物种(包括模型和非模型生物)的基因组的DNA序列。通过强大和广泛的评估,我们证明这些大型模型与现有方法相比,能够提供极其准确的分子表型预测。

这个集合中的一部分是nucleotide-transformer-2.5b-1000g模型,它是在3202个基因组多样化的人类基因组集合上进行预训练的2.5亿参数的Transformer模型。该模型在Tensorflow和Pytorch中都可以获得。

开发者:InstaDeep,NVIDIA和TUM

模型源

如何使用

直到下一个版本发布之前,需要使用以下命令从源代码安装transformers库才能使用这些模型:

pip install --upgrade git+https://github.com/huggingface/transformers.git

以下是一个简短的代码片段,用于从一个虚拟的DNA序列中获取logits和嵌入。

from transformers import AutoTokenizer, AutoModelForMaskedLM
import torch

# Import the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained("InstaDeepAI/nucleotide-transformer-2.5b-1000g")
model = AutoModelForMaskedLM.from_pretrained("InstaDeepAI/nucleotide-transformer-2.5b-1000g")

# Create a dummy dna sequence and tokenize it
sequences = ['ATTCTG' * 9]
tokens_ids = tokenizer.batch_encode_plus(sequences, return_tensors="pt")["input_ids"]

# Compute the embeddings
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
)

# Compute sequences embeddings
embeddings = torch_outs['hidden_states'][-1].detach().numpy()
print(f"Embeddings shape: {embeddings.shape}")
print(f"Embeddings per token: {embeddings}")

# Compute mean embeddings per sequence
mean_sequence_embeddings = torch.sum(attention_mask.unsqueeze(-1)*embeddings, axis=-2)/torch.sum(attention_mask, axis=-1)
print(f"Mean sequence embeddings: {mean_sequence_embeddings}")

训练数据

nucleotide-transformer-2.5b-1000g模型是在3202个基因组多样化的人类基因组上进行预训练的,这些基因组来自非洲、美洲、东亚和欧洲血统的27个地理分布结构化的人群。这样的多样性使得数据集能够更好地编码人类遗传变异的表示。为了允许模型对输入的序列进行单倍型重构,我们考虑了1000G基因组计划的单倍型版本,总共包含了1.25亿个突变,其中1.11亿个是单核苷酸多态性(SNPs),1400万个是插入/缺失(indels)。数据集中总共有192.12亿个核苷酸,大约为320.2亿个标记。

训练过程

预处理

使用核苷酸Transformer分词器对DNA序列进行分词,如果可能的话,使用6-mer分词器进行分词,否则将每个核苷酸单独进行分词,详细描述请参考相关仓库的第 Tokenization 节。这个分词器的词汇表大小为4105。模型的输入形式如下:

<CLS> <ACGTGT> <ACGTGC> <ACGGAC> <GACTAG> <TCAGCA>

分词后的序列最大长度为1000。

所使用的掩码处理过程是Bert风格培训的标准处理过程:

  • 15%的标记被掩蔽。
  • 在80%的情况下,被掩蔽的标记被替换为[MASK]。
  • 在剩下的10%的情况下,被掩蔽的标记会被替换为与原标记不同的随机标记。
  • 在剩下的10%的情况下,被掩蔽的标记保持不变。

预训练

该模型使用128个A100 80GB进行了300亿个标记的训练,有效的批量大小为100万个标记。所使用的序列长度为1000个标记。使用Adam优化器[38],学习率调度以及指数衰减率和epsilon常数的标准值,β1 = 0.9,β2 = 0.999,ε=1e-8。在第一个预热期间,学习率在16k步内从5e-5线性增加到1e-4,然后按照平方根衰减的方式下降直到训练结束。

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}
}