Views
No views yet
| Model | MS MARCO Dev (MRR@10) | TREC DL 2019 | TREC DL 2020 | FiQA (NDCG@10) | TREC COVID (NDCG@10) | TREC News (NDCG@10) | TREC Robust04 (NDCG@10) |
|---|---|---|---|---|---|---|---|
| msmarco-roberta-base-ance-firstp | 33.01 | 67.84 | 66.04 | 29.5 | 67.12 | 38.2 | 39.2 |
| msmarco-bert-co-condensor | 35.51 | 68.16 | 69.13 | 26.04 | 66.89 | 28.54 | 30.71 |
| msmarco-distilbert-base-tas-b | 34.43 | 71.04 | 69.78 | 30.02 | 65.39 | 37.70 | 42.70 |
| msmarco-distilbert-dot-v5 | 37.25 | 70.14 | 71.08 | 28.61 | 71.96 | 37.88 | 38.29 |
| msmarco-bert-base-dot-v5 | 38.08 | 70.51 | 73.45 | 32.29 | 74.81 | 38.81 | 42.67 |
pip install -U sentence-transformers1from sentence_transformers import SentenceTransformer, util
2
3query = "How many people live in London?"
4docs = ["Around 9 Million people live in London", "London is known for its financial district"]
5
6#Load the model
7model = SentenceTransformer('sentence-transformers/msmarco-bert-co-condensor')
8
9#Encode query and documents
10query_emb = model.encode(query)
11doc_emb = model.encode(docs)
12
13#Compute dot score between query and all document embeddings
14scores = util.dot_score(query_emb, doc_emb)[0].cpu().tolist()
15
16#Combine docs & scores
17doc_score_pairs = list(zip(docs, scores))
18
19#Sort by decreasing score
20doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
21
22#Output passages & scores
23for doc, score in doc_score_pairs:
24 print(score, doc)1from transformers import AutoTokenizer, AutoModel
2import torch
3
4#CLS Pooling - Take output from first token
5def cls_pooling(model_output):
6 return model_output.last_hidden_state[:,0]
7
8#Encode text
9def encode(texts):
10 # Tokenize sentences
11 encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
12
13 # Compute token embeddings
14 with torch.no_grad():
15 model_output = model(**encoded_input, return_dict=True)
16
17 # Perform pooling
18 embeddings = cls_pooling(model_output)
19
20 return embeddings
21
22
23# Sentences we want sentence embeddings for
24query = "How many people live in London?"
25docs = ["Around 9 Million people live in London", "London is known for its financial district"]
26
27# Load model from HuggingFace Hub
28tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/msmarco-bert-co-condensor")
29model = AutoModel.from_pretrained("sentence-transformers/msmarco-bert-co-condensor")
30
31#Encode query and docs
32query_emb = encode(query)
33doc_emb = encode(docs)
34
35#Compute dot score between query and all document embeddings
36scores = torch.mm(query_emb, doc_emb.transpose(0, 1))[0].cpu().tolist()
37
38#Combine docs & scores
39doc_score_pairs = list(zip(docs, scores))
40
41#Sort by decreasing score
42doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
43
44#Output passages & scores
45for doc, score in doc_score_pairs:
46 print(score, doc)SentenceTransformer(
(0): Transformer({'max_seq_length': 256, 'do_lower_case': False}) with Transformer model: DistilBertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)