multi-qa-mpnet-base-dot-v1
sentence-transformers
Similitud de oraciones
Este es un modelo de sentence-transformers: mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y fue diseñado para la búsqueda semántica. Ha sido entrenado en 215 millones de pares (pregunta, respuesta) de diversas fuentes.
Como usar
Uso (Sentence-Transformers)
Usar este modelo es fácil cuando tienes sentence-transformers instalado:
pip install -U sentence-transformers
Entonces puedes usar el modelo de esta manera:
from sentence_transformers import SentenceTransformer, util
query = "How many people live in London?"
docs = ["Around 9 Million people live in London", "London is known for its financial district"]
# Cargar el modelo
model = SentenceTransformer('sentence-transformers/multi-qa-mpnet-base-dot-v1')
# Codificar la consulta y los documentos
doc_emb = model.encode(query)
# Calcular la puntuación de producto punto entre la consulta y los embeddings de los documentos
scores = util.dot_score(query_emb, doc_emb)[0].cpu().tolist()
# Combinar documentos y puntuaciones
doc_score_pairs = list(zip(docs, scores))
# Ordenar por puntuación decreciente
doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
# Pasajes de salida y puntuaciones
for doc, score in doc_score_pairs:
print(score, doc)
Uso (Transformers de HuggingFace)
Sin sentence-transformers, puedes usar el modelo así:
Primero, pasa tu entrada a través del modelo transformador, luego debes aplicar la operación de pooling correcta sobre los embeddings de palabras contextualizados.
from transformers import AutoTokenizer, AutoModel
import torch
# Pooling CLS - Tomar la salida del primer token
def cls_pooling(model_output):
return model_output.last_hidden_state[:,0]
# Codificar texto
def encode(texts):
# Tokenizar oraciones
encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
# Calcular embeddings de tokens
with torch.no_grad():
model_output = model(**encoded_input, return_dict=True)
# Realizar pooling
embeddings = cls_pooling(model_output)
return embeddings
# Oraciones para las que queremos embeddings de oraciones
query = "How many people live in London?"
docs = ["Around 9 Million people live in London", "London is known for its financial district"]
# Cargar el modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/multi-qa-mpnet-base-dot-v1')
model = AutoModel.from_pretrained('sentence-transformers/multi-qa-mpnet-base-dot-v1')
# Codificar consulta y documentos
query_emb = encode(query)
doc_emb = encode(docs)
# Calcular la puntuación de producto punto entre la consulta y los embeddings de los documentos
scores = torch.mm(query_emb, doc_emb.transpose(0, 1))[0].cpu().tolist()
# Combinar documentos y puntuaciones
doc_score_pairs = list(zip(docs, scores))
# Ordenar por puntuación decreciente
doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
# Pasajes de salida y puntuaciones
for doc, score in doc_score_pairs:
print(score, doc)
Funcionalidades
- Transforma oraciones y párrafos en vectores densos de 768 dimensiones
- Diseñado para la búsqueda semántica
- Entrenado en 215 millones de pares de datos (pregunta, respuesta)
- Soporta múltiples bibliotecas: sentence-transformers, transformers
- Funciona con PyTorch
- Utiliza el método de pooling CLS
- Compatible con las funciones de puntuación de producto punto
Casos de uso
- Búsqueda semántica: Encuentra documentos relevantes para un pasaje dado
- Codificación de preguntas y textos en un espacio vectorial denso que permite evaluar similitudes