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