许可证:BSD
标签:
- 化学
- 生物学
- 蛋白质
- 抗体
- 重链
- AbLang
- CDR(互补决定区)
- OAS(抗体序列数据库)
任务类型:句子相似度
重链AbLang模型
这是🤗版本的AbLang:一种抗体语言模型。该模型在这篇论文中首次提出,并在此代码库中发布。此模型基于大写氨基酸字母训练:仅支持大写字母表示的氨基酸序列。
用途与限制
该模型可用于蛋白质特征提取,或针对下游任务进行微调(待补充)。
使用方法
以下是在PyTorch中获取给定抗体序列特征的示例代码:
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('qilowoq/AbLang_heavy')
model = AutoModel.from_pretrained('qilowoq/AbLang_heavy', trust_remote_code=True)
sequence_Example = ' '.join("EVQLQESGPGLVKPSETLSLTCTVSGGPINNAYWTWIRQPPGKGLEYLGYVYHTGVTNYNPSLKSRLTITIDTSRKQLSLSLKFVTAADSAVYYCAREWAEDGDFGNAFHVWGQGTMVAVSSASTKGPSVFPLAPSSKSTSGGTAALGCL")
encoded_input = tokenizer(sequence_Example, return_tensors='pt')
model_output = model(**encoded_input)
生成序列嵌入向量的方法如下:
def get_sequence_embeddings(encoded_input, model_output):
mask = encoded_input['attention_mask'].float()
d = {k: v for k, v in torch.nonzero(mask).cpu().numpy()}
for i in d:
mask[i, d[i]] = 0
mask[:, 0] = 0.0
mask = mask.unsqueeze(-1).expand(model_output.last_hidden_state.size())
sum_embeddings = torch.sum(model_output.last_hidden_state * mask, 1)
sum_mask = torch.clamp(mask.sum(1), min=1e-9)
return sum_embeddings / sum_mask
seq_embeds = get_sequence_embeddings(encoded_input, model_output)
微调建议
为节省内存,推荐使用LoRA技术:
pip install git+https://github.com/huggingface/peft.git
pip install loralib
LoRA能大幅减少可训练参数量,且性能与全模型微调相当或更优。
from peft import LoraConfig, get_peft_model
def apply_lora_bert(model):
config = LoraConfig(
r=8, lora_alpha=32,
lora_dropout=0.3,
target_modules=['query', 'value']
)
for param in model.parameters():
param.requires_grad = False
if param.ndim == 1:
param.data = param.data.to(torch.float32)
model.gradient_checkpointing_enable()
model.enable_input_require_grads()
model = get_peft_model(model, config)
return model
model = apply_lora_bert(model)
model.print_trainable_parameters()
引用格式
@article{Olsen2022,
title={AbLang: 一种用于补全抗体序列的抗体语言模型},
author={Tobias H. Olsen, Iain H. Moal and Charlotte M. Deane},
journal={bioRxiv预印本},
doi={https://doi.org/10.1101/2022.01.20.477061},
year={2022}
}