McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp
McGill-NLP
Similitud de oraciones
LLM2Vec es una receta sencilla para convertir modelos de lenguaje grandes (LLM) que solo son decodificadores en codificadores de texto. Consiste en 3 pasos simples: 1) habilitar la atención bidireccional, 2) predicción de la siguiente máscara de token y 3) aprendizaje contrastivo no supervisado. El modelo se puede ajustar aún más para lograr un rendimiento de vanguardia.
Como usar
from llm2vec import LLM2Vec
import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from peft import PeftModel
# Cargar modelo base Mistral, junto con el código personalizado que habilita conexiones bidireccionales en LLMs solo decodificadores.
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",
)
# Cargar modelo MNTP (Predicción de la siguiente máscara de token).
model = PeftModel.from_pretrained(
model,
"McGill-NLP/LLM2Vec-Sheared-LLaMA-mntp",
)
# Envoltorio para operaciones de codificación y agrupación
l2v = LLM2Vec(model, tokenizer, pooling_mode="mean", max_length=512)
# Codificando consultas usando instrucciones
instruction = (
"Dada una consulta de búsqueda web, recupera los pasajes relevantes que respondan a la consulta:")
queries = [
[instruction, "cuánta proteína debe comer una mujer"],
[instruction, "definir cumbre"],
]
q_reps = l2v.encode(queries)
# Codificación de documentos. Las instrucciones no son necesarias para los documentos
documents = [
"Como pauta general, el requerimiento promedio de proteínas del CDC para mujeres de 19 a 70 años es de 46 gramos por día. Pero, como puede ver en este cuadro, deberá aumentar eso si está esperando o entrenando para un maratón. Consulte el gráfico a continuación para ver cuánta proteína debe comer 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)
# Calcule la similitud del 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.8180, 0.5825],
[0.1069, 0.1931]])
Funcionalidades
- Atención bidireccional
- Predicción de la siguiente máscara de token
- Aprendizaje contrastivo no supervisado
Casos de uso
- Extracción de características
- Embeddings de texto
- Recuperación de información
- Clasificación de texto
- Agrupamiento de texto
- Similitud semántica de texto
- Evaluación de texto
- Reordenamiento de texto