msmarco-bert-base-dot-v5

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 500K pares (consulta, respuesta) del conjunto de datos MS MARCO.

Como usar

Uso (Sentence-Transformers)

Usar este modelo es sencillo cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

Luego puedes usar el modelo de esta forma:

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/msmarco-bert-base-dot-v5')

#Codificar consulta y documentos
query_emb = model.encode(query)
doc_emb = model.encode(docs)

#Calcular puntuación punto entre la consulta y todas las incrustaciones de documentos
scores = util.dot_score(query_emb, doc_emb)[0].cpu().tolist()

#Combinar documentos y puntuaciones
comb_docs_scores = list(zip(docs, scores))

#Ordenar por puntuación descendente
comb_docs_scores = sorted(comb_docs_scores, key=lambda x: x[1], reverse=True)

#Imprimir pasajes y puntuaciones
print("Consulta:", query)
for doc, score in comb_docs_scores:
    print(score, doc)

Uso (HuggingFace Transformers)

Sin sentence-transformers, puedes usar el modelo así: Primero, pasas tu entrada a través del modelo transformador, luego debes aplicar la operación de agrupación correcta sobre las incrustaciones de palabras contextualizadas.

from transformers import AutoTokenizer, AutoModel
import torch

#Agrupación Promedio - Tener en cuenta la máscara de atención para el promedio correcto
def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output.last_hidden_state
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

#Codificar textos
def encode(texts):
    #Tokenizar oraciones
    encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')

    #Calcular incrustaciones de tokens
    with torch.no_grad():
        model_output = model(**encoded_input, return_dict=True)

    #Realizar agrupación
    embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
    return embeddings

#Oraciones para las que queremos incrustaciones 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 modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/msmarco-bert-base-dot-v5")
model = AutoModel.from_pretrained("sentence-transformers/msmarco-bert-base-dot-v5")

#Codificar consulta y documentos
query_emb = encode(query)
doc_emb = encode(docs)

#Calcular puntuación de punto entre la consulta y todas las incrustaciones de documentos
scores = torch.mm(query_emb, doc_emb.transpose(0, 1))[0].cpu().tolist()

#Combinar documentos y puntuaciones
comb_docs_scores = list(zip(docs, scores))

#Ordenar por puntuación descendente
comb_docs_scores = sorted(comb_docs_scores, key=lambda x: x[1], reverse=True)

#Imprimir pasajes y puntuaciones
print("Consulta:", query)
for doc, score in comb_docs_scores:
    print(score, doc)

Funcionalidades

Transforma oraciones y párrafos a un espacio vectorial denso de 768 dimensiones
Diseñado para búsqueda semántica
Entrenado en 500K pares (consulta, respuesta) del conjunto de datos MS MARCO

Casos de uso

Búsqueda semántica
Extracción de características
Inferencia de incrustaciones de texto