AbLang_heavy

qilowoq
Similitud de oraciones

AbLang modelo para cadenas pesadas Esta es una versión de 🤗 de AbLang: Un modelo de lenguaje para anticuerpos. Fue introducido en este artículo y lanzado por primera vez en este repositorio. Este modelo está entrenado en aminoácidos en mayúsculas: solo funciona con aminoácidos en letras mayúsculas.

Como usar

Aquí se muestra cómo utilizar este modelo para obtener las características de una secuencia de anticuerpos en 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)

# Se pueden producir incrustaciones secuenciales de la siguiente manera:
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()} # diccionario de tokens sep
    # hacer el token sep invisible
    for i in d:
        mask[i, d[i]] = 0
    mask[:, 0] = 0.0 # hacer el token cls invisible
    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)

Para ahorrar memoria recomendamos usar LoRA:

pip install git+https://github.com/huggingface/peft.git
pip install loralib

LoRA reduce en gran medida el número de parámetros entrenables y realiza un rendimiento igual o mejor que afinando el modelo completo.

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 # congelar el modelo - entrenar adaptadores después
    if param.ndim == 1:
        # convertir los parámetros pequeños (por ejemplo layernorm) a fp32 para estabilidad
        param.data = param.data.to(torch.float32)
    model.enable_input_require_grads()
    model = get_peft_model(model, config)
    return model

model = apply_lora_bert(model)

model.print_trainable_parameters()
# parámetros entrenables: 294912 || todos los parámetros: 85493760 || porcentaje entrenable: 0.3449514911965505

Funcionalidades

Extracción de características de proteínas
Compatible con AutoTrain
Compatible con Inference Endpoints

Casos de uso

Extracción de características de proteínas
Afinar en tareas posteriores