McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp-unsup-simcse

McGill-NLP
Similitud de oraciones

LLM2Vec es una receta simple para convertir LLMs (Modelos de Lenguaje Grandes) de solo decodificación en codificadores de texto. Consiste en 3 pasos simples: 1) habilitar la atención bidireccional, 2) predicción de siguiente token enmascarado, y 3) aprendizaje contrastivo no supervisado. El modelo puede ser ajustado para lograr un rendimiento de última generación.

Como usar

pip install llm2vec

from llm2vec import LLM2Vec

import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from peft import PeftModel

# Cargando modelo base Mistral, junto con código personalizado que habilita conexiones bidireccionales en LLMs sólo de decodificación. Los pesos de MNTP LoRA se fusionan en el modelo base.
tokenizer = AutoTokenizer.from_pretrained(
"McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp")
config = AutoConfig.from_pretrained(
"McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp", trust_remote_code=True
)
model = AutoModel.from_pretrained(
"McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp",
trust_remote_code=True,
config=config,
torch_dtype=torch.bfloat16,
device_map="cuda" if torch.cuda.is_available() else "cpu",
)
model = PeftModel.from_pretrained(
model,
"McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp",
)
model = model.merge_and_unload() # Esto puede tomar varios minutos en la cpu

# Cargando modelo SimCSE no supervisado. Esto carga los pesos de MNTP entrenados en el modelo SimCSE (LoRA).
model = PeftModel.from_pretrained(
model, "McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp-unsup-simcse")

# Envoltorio para operaciones de codificación y agrupamiento
l2v = LLM2Vec(model, tokenizer, pooling_mode="mean", max_length=512)

# Codificación de consultas usando instrucciones
instruction = (
"Dada una consulta de búsqueda web, recupere pasajes relevantes que respondan a la consulta:")
queries = [
[instruction, "cuánta proteína debe consumir una mujer"],
[instruction, "definición de cumbre"],
]
q_reps = l2v.encode(queries)

# Codificación de documentos. Instrucciones no son necesarias para documentos
documents = [
"Como regla general, el requisito promedio de proteína de los CDC para mujeres de 19 a 70 años es de 46 gramos por día. Pero, como se puede ver en esta tabla, necesitarás aumentar eso si estás esperando un bebé o entrenando para un maratón. Consulta la tabla a continuación para ver cuánta proteína debes consumir cada día.",
"Definición de cumbre para los estudiantes de inglés. : 1 el punto más alto de una montaña : la cima de una montaña. : 2 el nivel más alto. : 3 una reunión o serie de reuniones entre los líderes de dos o más gobiernos.",
]
d_reps = l2v.encode(documents)

# Calcular similitud coseno
q_reps_norm = torch.nn.functional.normalize(q_reps, p=2, dim=1)
d_reps_norm = torch.nn.functional.normalize(d_reps, p=2, dim=1)
cos_sim = torch.mm(q_reps_norm, d_reps_norm.transpose(0, 1))

print(cos_sim)
tensor([[0.5964, 0.1270],[0.0698, 0.2394]]) ```

Funcionalidades

Atención bidireccional habilitada
Predicción de siguiente token enmascarado
Aprendizaje contrastivo no supervisado
Compatibilidad con texto embedding y extracción de características
Soporte para tareas como clasificación de texto, clusterización de texto, y recuperación de información

Casos de uso

Clasificación de texto
Clusterización de texto
Recuperación de información
Evaluación semántica de texto
Clasificación de preguntas naturales
Re-ranking de resultados de búsqueda