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許可證。







