ProtBert-BFD蛋白质语言模型
该模型基于蛋白质序列采用掩码语言建模(MLM)目标进行预训练,相关论文发表于此处,代码首发于此仓库。本模型仅支持大写字母表示的氨基酸序列。
模型描述
ProtBert-BFD基于Bert架构,通过自监督方式在海量蛋白质序列语料库上进行预训练。这意味着它仅使用原始蛋白质序列进行预训练,无需任何人工标注(因此可利用大量公开数据),通过自动化流程从蛋白质序列生成输入和标签。
与原始Bert的关键区别在于序列处理方式——每个序列被视为独立文档,因此不使用下一句预测任务。掩码策略遵循原始Bert训练方法,随机遮蔽15%的输入氨基酸。
最终特征提取表明,从未标注数据(仅蛋白质序列)获得的语言模型嵌入能够捕捉决定蛋白质形态的关键生物物理特性,这意味着模型学习了蛋白质序列所体现的生命语言的部分语法规则。
应用场景与限制
该模型可用于蛋白质特征提取或下游任务微调。在某些任务中,微调模型比直接用作特征提取器能获得更高准确率。
使用方法
可直接使用管道进行掩码语言建模:
>>> from transformers import BertForMaskedLM, BertTokenizer, pipeline
>>> tokenizer = BertTokenizer.from_pretrained('Rostlab/prot_bert_bfd', do_lower_case=False )
>>> model = BertForMaskedLM.from_pretrained("Rostlab/prot_bert_bfd")
>>> unmasker = pipeline('fill-mask', model=model, tokenizer=tokenizer)
>>> unmasker('D L I P T S S K L V V [MASK] D T S L Q V K K A F F A L V T')
PyTorch中获取蛋白质序列特征的示例:
from transformers import BertModel, BertTokenizer
import re
tokenizer = BertTokenizer.from_pretrained('Rostlab/prot_bert_bfd', do_lower_case=False )
model = BertModel.from_pretrained("Rostlab/prot_bert_bfd")
sequence_Example = "A E T C Z A O"
sequence_Example = re.sub(r"[UZOB]", "X", sequence_Example)
encoded_input = tokenizer(sequence_Example, return_tensors='pt')
output = model(**encoded_input)
训练数据
模型在包含21亿蛋白质序列的BFD数据集上预训练。
训练流程
数据预处理
蛋白质序列统一转为大写,使用21个词汇量的空格分词。输入格式为:
[CLS] 蛋白质序列A [SEP] 蛋白质序列B [SEP]
每条序列视为独立文档。预处理分两次执行:组合长度(2条序列)小于512氨基酸和小于2048氨基酸的情况。
掩码策略:
- 15%氨基酸被遮蔽
- 80%概率替换为[MASK]
- 10%概率替换为随机氨基酸
- 10%概率保持原样
预训练
在TPU Pod V3-1024上训练100万步:
- 80万步使用512序列长度(批大小32k)
- 20万步使用2048序列长度(批大小6k)
采用Lamb优化器,学习率0.002,权重衰减0.01,14万步学习率预热后线性衰减。
评估结果
微调后的下游任务表现:
任务/数据集 |
二级结构(3态) |
二级结构(8态) |
亚细胞定位 |
膜蛋白 |
CASP12 |
76 |
65 |
- |
- |
TS115 |
84 |
73 |
- |
- |
CB513 |
83 |
70 |
- |
- |
DeepLoc |
- |
- |
78 |
91 |
引用信息
@article{Elnaggar2020.07.12.199554,
author = {Elnaggar, Ahmed et al.},
title = {ProtTrans: Towards Cracking the Language of Life's Code...},
year = {2020},
doi = {10.1101/2020.07.12.199554},
journal = {bioRxiv}
}
由Ahmed Elnaggar/@Elnaggar_AI创建 | LinkedIn