许可证:Apache-2.0
任务类型:文本生成
示例输入:
ProtGPT2
ProtGPT2(同行评议论文)是一个能够理解蛋白质语言并用于全新蛋白质设计与工程的语言模型。其生成的序列在探索蛋白质空间未知区域的同时,保留了天然蛋白质的关键特征(氨基酸倾向性、二级结构含量和球状特性)。
模型描述
ProtGPT2基于GPT2 Transformer架构,包含36层网络和1280维模型参数,总计7.38亿参数。
该模型在蛋白质数据库UniRef50(2021_04版)上进行了预训练,训练时仅使用原始序列(不含FASTA头信息)。训练细节与数据集参见:https://huggingface.co/datasets/nferruz/UR50_2021_04
ProtGPT2采用自监督训练方式(即不使用序列标注数据),通过因果建模目标训练模型预测序列中的下一个标记(此处为寡聚体)。这种训练使模型掌握了蛋白质的内部表征能力,从而能够"说"蛋白质语言。
使用方法
需安装HuggingFace transformers库(安装指南:https://huggingface.co/docs/transformers/installation)。由于采用经典语言模型目标训练,ProtGPT2擅长生成蛋白质序列,支持零样本生成或基于用户定义数据集微调后生成特定类型序列。
示例1:零样本生成全新蛋白质
以下代码展示从甲硫氨酸(M)开始生成序列(可替换为任意氨基酸/片段)。max_length
参数以标记数为单位(每个标记平均含4个氨基酸):
>>> from transformers import pipeline
>>> protgpt2 = pipeline('text-generation', model="nferruz/ProtGPT2")
>>> sequences = protgpt2("<|endoftext|>", max_length=100, do_sample=True, top_k=950, repetition_penalty=1.2, num_return_sequences=10, eos_token_id=0)
>>> for seq in sequences:
print(seq['generated_text'])
示例2:基于用户序列微调
- 将FASTA头替换为
<|endoftext|>
- 按比例拆分训练集/验证集(如90/10)
- 运行微调(学习率建议通过实验优化):
python run_clm.py --model_name_or_path nferruz/ProtGPT2 --train_file training.txt --validation_file validation.txt --tokenizer_name nferruz/ProtGPT2 --do_train --do_eval --output_dir output --learning_rate 1e-06
脚本路径:https://github.com/huggingface/transformers/blob/master/examples/pytorch/language-modeling/run_clm.py
序列优选策略
实验表明,困惑度(perplexity)与AlphaFold2的pLDDT分数具有相关性。推荐按以下方式计算序列困惑度(值越低越好):
def calculatePerplexity(sequence, model, tokenizer):
input_ids = torch.tensor(tokenizer.encode(sequence)).unsqueeze(0)
input_ids = input_ids.to(device)
with torch.no_grad():
outputs = model(input_ids, labels=input_ids)
loss, logits = outputs[:2]
return math.exp(loss)
训练配置
- 硬件:128块NVIDIA A100 GPU
- 训练周期:50轮
- 块大小:512
- 批量大小:1024(每批65,536个标记)
- 优化器:Adam(β1=0.9,β2=0.999)
- 学习率:1e-3