sentence-transformers/msmarco-bert-co-condensor
sentence-transformers
Similitud de oraciones
Este es un puerto del modelo Luyu/co-condenser-marco-retriever al modelo sentence-transformers: mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y está optimizado para la tarea de búsqueda semántica. Está basado en el artículo: Unsupervised Corpus Aware Language Model Pre-training for Dense Passage Retrieval.
Como usar
Uso (Sentence-Transformers)
pip install -U sentence-transformers
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-co-condensor')
# Codificar consulta y documentos
query_emb = model.encode(query)
doc_emb = model.encode(docs)
# Calcular el puntaje de punto entre la consulta y todas las incrustaciones de documentos
scores = util.dot_score(query_emb, doc_emb)[0].cpu().tolist()
# Combinar documentos y puntajes
pares_doc_puntaje = list(zip(docs, scores))
# Ordenar por puntaje decreciente
pares_doc_puntaje = sorted(pares_doc_puntaje, key=lambda x: x[1], en sentido descendente=True)
# Salida de pasajes y puntajes
for doc, score in pares_doc_puntaje:
print(score, doc)
Uso (HuggingFace Transformers)
from transformers import AutoTokenizer, AutoModel
import torch
# CLS Pooling - Tomar 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 incrustaciones 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 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 el modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/msmarco-bert-co-condensor")
model = AutoModel.from_pretrained("sentence-transformers/msmarco-bert-co-condensor")
# Codificar consulta y documentos
query_emb = encode(query)
doc_emb = encode(docs)
# Calcular el puntaje 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 puntajes
pares_doc_puntaje = list(zip(docs, scores))
# Ordenar por puntaje decreciente
pares_doc_puntaje = sorted(pares_doc_puntaje, key=lambda x: x[1], reverse=True)
# Salida de pasajes y puntajes
for doc, score in pares_doc_puntaje:
print(score, doc)
Funcionalidades
- Mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones
- Optimizado para la búsqueda semántica
- Basado en el modelo Luyu/co-condenser-marco-retriever
Casos de uso
- Búsqueda semántica
- Recuperación de pasajes densos