McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp
McGill-NLP
Similitud de oraciones
LLM2Vec es una receta simple para convertir modelos LLM únicamente de decodificación en codificadores de texto. Consiste en 3 pasos simples: 1) habilitar la atención bidireccional, 2) predicción enmascarada del siguiente token, y 3) aprendizaje contrastivo no supervisado. El modelo puede ser afinado adicionalmente para lograr un rendimiento de última generación.
Como usar
from llm2vec import LLM2Vec
import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from peft import PeftModel
# Cargando el modelo base Mistral, junto con el código personalizado que habilita conexiones bidireccionales en LLMs únicamente de decodificación.
tokenizer = AutoTokenizer.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp")
config = AutoConfig.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp", trust_remote_code=True
)
model = AutoModel.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp",
trust_remote_code=True,
config=config,
torch_dtype=torch.bfloat16,
device_map="cuda" if torch.cuda.is_available() else "cpu",
)
# Cargando el modelo MNTP (Predicción enmascarada del siguiente token).
model = PeftModel.from_pretrained(
model,
"McGill-NLP/LLM2Vec-Meta-Llama-3-8B-Instruct-mntp",
)
# Envoltorio para operaciones de codificación y agrupamiento
l2v = LLM2Vec(model, tokenizer, pooling_mode="mean", max_length=512)
# Codificando consultas usando instrucciones
instruction = (
"Dada una consulta de búsqueda web, recupera pasajes relevantes que respondan a la consulta:")
queries = [
[instruction, "cuánta proteína debería consumir una mujer"],
[instruction, "definir cumbre"],
]
q_reps = l2v.encode(queries)
# Codificando documentos. No se requieren instrucciones para los documentos
documents = [
"Como pauta general, el requerimiento promedio de proteínas según el CDC para mujeres de 19 a 70 años es de 46 gramos por día. Sin embargo, como puedes ver en esta tabla, necesitarás aumentar eso si estás embarazada o entrenando para un maratón. Consulta la tabla a continuación para ver cuánta proteína deberías estar consumiendo cada día.",
"Definición de cumbre para aprendices del idioma 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)
# Computar la 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.7740, 0.5580],
[0.4845, 0.4993]])
Funcionalidades
- Atención bidireccional
- Predicción enmascarada del siguiente token
- Aprendizaje contrastivo no supervisado
- Soporte para codificación y operaciones de agrupamiento
- Compatibilidad con modelos LLM únicamente de decodificación
Casos de uso
- Recuperación de información relevante de pasajes de texto
- Clasificación semántica de textos
- Agrupamiento de textos
- Evaluación semántica de palabras y textos
- Reclasificación de textos