Salesforce/SFR-Embedding-Mistral
SFR-Embedding by Salesforce Research.
The model is trained on top of E5-mistral-7b-instruct and Mistral-7B-v0.1.
This project is for research purposes only. Third-party datasets may be subject to additional terms and conditions under their associated licenses. Please refer to specific papers for more details:
More technical details will be updated later.
How to run
Transformers
The models can be used as follows:
import torch
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def last_token_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
if left_padding:
return last_hidden_states[:, -1]
else:
sequence_lengths = attention_mask.sum(dim=1) - 1
batch_size = last_hidden_states.shape[0]
return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths]
def get_detailed_instruct(task_description: str, query: str) -> str:
return f'Instruct: {task_description}\nQuery: {query}'
# Each query must come with a one-sentence instruction that describes the task
task = 'Given a web search query, retrieve relevant passages that answer the query'
queries = [
get_detailed_instruct(task, 'How to bake a chocolate cake'),
get_detailed_instruct(task, 'Symptoms of the flu')
]
# No need to add instruction for retrieval documents
passages = [
"To bake a delicious chocolate cake, you'll need the following ingredients: all-purpose flour, sugar, cocoa powder, baking powder, baking soda, salt, eggs, milk, vegetable oil, and vanilla extract. Start by preheating your oven to 350°F (175°C). In a mixing bowl, combine the dry ingredients (flour, sugar, cocoa powder, baking powder, baking soda, and salt). In a separate bowl, whisk together the wet ingredients (eggs, milk, vegetable oil, and vanilla extract). Gradually add the wet mixture to the dry ingredients, stirring until well combined. Pour the batter into a greased cake pan and bake for 30-35 minutes. Let it cool before frosting with your favorite chocolate frosting. Enjoy your homemade chocolate cake!",
"The flu, or influenza, is an illness caused by influenza viruses. Common symptoms of the flu include a high fever, chills, cough, sore throat, runny or stuffy nose, body aches, headache, fatigue, and sometimes nausea and vomiting. These symptoms can come on suddenly and are usually more severe than the common cold. It's important to get plenty of rest, stay hydrated, and consult a healthcare professional if you suspect you have the flu. In some cases, antiviral medications can help alleviate symptoms and reduce the duration of the illness."
]
# load model and tokenizer
tokenizer = AutoTokenizer.from_pretrained('Salesforce/SFR-Embedding-Mistral')
model = AutoModel.from_pretrained('Salesforce/SFR-Embedding-Mistral')
# get the embeddings
max_length = 4096
input_texts = queries + passages
batch_dict = tokenizer(input_texts, max_length=max_length, padding=True, truncation=True, return_tensors="pt")
outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
# normalize embeddings
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
# [[86.7153549194336, 36.64569091796875], [35.00493621826172, 82.0738525390625]]
Sentence Transformers
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("Salesforce/SFR-Embedding-Mistral")
def get_detailed_instruct(task_description: str, query: str) -> str:
return f'Instruct: {task_description}\nQuery: {query}'
# Each query must come with a one-sentence instruction that describes the task
task = 'Given a web search query, retrieve relevant passages that answer the query'
queries = [
get_detailed_instruct(task, 'How to bake a chocolate cake'),
get_detailed_instruct(task, 'Symptoms of the flu')
]
# No need to add instruction for retrieval documents
passages = [
"To bake a delicious chocolate cake, you'll need the following ingredients: all-purpose flour, sugar, cocoa powder, baking powder, baking soda, salt, eggs, milk, vegetable oil, and vanilla extract. Start by preheating your oven to 350°F (175°C). In a mixing bowl, combine the dry ingredients (flour, sugar, cocoa powder, baking powder, baking soda, and salt). In a separate bowl, whisk together the wet ingredients (eggs, milk, vegetable oil, and vanilla extract). Gradually add the wet mixture to the dry ingredients, stirring until well combined. Pour the batter into a greased cake pan and bake for 30-35 minutes. Let it cool before frosting with your favorite chocolate frosting. Enjoy your homemade chocolate cake!",
"The flu, or influenza, is an illness caused by influenza viruses. Common symptoms of the flu include a high fever, chills, cough, sore throat, runny or stuffy nose, body aches, headache, fatigue, and sometimes nausea and vomiting. These symptoms can come on suddenly and are usually more severe than the common cold. It's important to get plenty of rest, stay hydrated, and consult a healthcare professional if you suspect you have the flu. In some cases, antiviral medications can help alleviate symptoms and reduce the duration of the illness."
]
embeddings = model.encode(queries + passages)
scores = util.cos_sim(embeddings[:2], embeddings[2:]) * 100
print(scores.tolist())
# [[86.71537780761719, 36.645721435546875], [35.00497055053711, 82.07388305664062]]
MTEB Benchmark Evaluation
Check out unilm/e5 to reproduce evaluation results on the BEIR and MTEB benchmark.
SFR-Embedding Team (∗indicates lead contributors).
- Rui Meng*
- Ye Liu*
- Shafiq Rayhan Joty
- Caiming Xiong
- Yingbo Zhou
- Semih Yavuz
Citation
@misc{SFRAIResearch2024,
title={SFR-Embedding-Mistral:Enhance Text Retrieval with Transfer Learning},
author={Rui Meng, Ye Liu, Shafiq Rayhan Joty, Caiming Xiong, Yingbo Zhou, Semih Yavuz},
howpublished={Salesforce AI Research Blog},
year={2024},
url={https://blog.salesforceairesearch.com/sfr-embedded-mistral/}
}
- Downloads last month
- 40,670
Spaces using Salesforce/SFR-Embedding-Mistral 7
Evaluation results
- accuracy on MTEB AmazonCounterfactualClassification (en)test set self-reported77.925
- ap on MTEB AmazonCounterfactualClassification (en)test set self-reported40.868
- f1 on MTEB AmazonCounterfactualClassification (en)test set self-reported71.658
- accuracy on MTEB AmazonPolarityClassificationtest set self-reported95.967
- ap on MTEB AmazonPolarityClassificationtest set self-reported94.463
- f1 on MTEB AmazonPolarityClassificationtest set self-reported95.965
- accuracy on MTEB AmazonReviewsClassification (en)test set self-reported54.352
- f1 on MTEB AmazonReviewsClassification (en)test set self-reported53.637
- ndcg_at_1 on MTEB ArguAnatest set self-reported43.314
- ndcg_at_2 on MTEB ArguAnatest set self-reported54.757
- ndcg_at_3 on MTEB ArguAnatest set self-reported58.847
- ndcg_at_5 on MTEB ArguAnatest set self-reported63.634
- ndcg_at_7 on MTEB ArguAnatest set self-reported65.741
- ndcg_at_10 on MTEB ArguAnatest set self-reported67.171
- ndcg_at_20 on MTEB ArguAnatest set self-reported68.585
- ndcg_at_30 on MTEB ArguAnatest set self-reported68.810
- ndcg_at_50 on MTEB ArguAnatest set self-reported68.932
- ndcg_at_70 on MTEB ArguAnatest set self-reported68.992
- ndcg_at_100 on MTEB ArguAnatest set self-reported69.014
- ndcg_at_200 on MTEB ArguAnatest set self-reported69.014
- ndcg_at_300 on MTEB ArguAnatest set self-reported69.014
- ndcg_at_500 on MTEB ArguAnatest set self-reported69.014
- ndcg_at_700 on MTEB ArguAnatest set self-reported69.014
- ndcg_at_1000 on MTEB ArguAnatest set self-reported69.014
- map_at_1 on MTEB ArguAnatest set self-reported43.314
- map_at_2 on MTEB ArguAnatest set self-reported52.383
- map_at_3 on MTEB ArguAnatest set self-reported55.109
- map_at_5 on MTEB ArguAnatest set self-reported57.773
- map_at_7 on MTEB ArguAnatest set self-reported58.718
- map_at_10 on MTEB ArguAnatest set self-reported59.256
- map_at_20 on MTEB ArguAnatest set self-reported59.668
- map_at_30 on MTEB ArguAnatest set self-reported59.710
- map_at_50 on MTEB ArguAnatest set self-reported59.727
- map_at_70 on MTEB ArguAnatest set self-reported59.734
- map_at_100 on MTEB ArguAnatest set self-reported59.735
- map_at_200 on MTEB ArguAnatest set self-reported59.735
- map_at_300 on MTEB ArguAnatest set self-reported59.735
- map_at_500 on MTEB ArguAnatest set self-reported59.735
- map_at_700 on MTEB ArguAnatest set self-reported59.735
- map_at_1000 on MTEB ArguAnatest set self-reported59.735
- recall_at_1 on MTEB ArguAnatest set self-reported43.314
- recall_at_2 on MTEB ArguAnatest set self-reported61.451
- recall_at_3 on MTEB ArguAnatest set self-reported69.630
- recall_at_5 on MTEB ArguAnatest set self-reported81.223
- recall_at_7 on MTEB ArguAnatest set self-reported87.340
- recall_at_10 on MTEB ArguAnatest set self-reported92.034
- recall_at_20 on MTEB ArguAnatest set self-reported97.440
- recall_at_30 on MTEB ArguAnatest set self-reported98.506
- recall_at_50 on MTEB ArguAnatest set self-reported99.147
- recall_at_70 on MTEB ArguAnatest set self-reported99.502
- recall_at_100 on MTEB ArguAnatest set self-reported99.644
- recall_at_200 on MTEB ArguAnatest set self-reported99.644
- recall_at_300 on MTEB ArguAnatest set self-reported99.644
- recall_at_500 on MTEB ArguAnatest set self-reported99.644
- recall_at_700 on MTEB ArguAnatest set self-reported99.644
- recall_at_1000 on MTEB ArguAnatest set self-reported99.644
- precision_at_1 on MTEB ArguAnatest set self-reported43.314
- precision_at_2 on MTEB ArguAnatest set self-reported30.725
- precision_at_3 on MTEB ArguAnatest set self-reported23.210
- precision_at_5 on MTEB ArguAnatest set self-reported16.245
- precision_at_7 on MTEB ArguAnatest set self-reported12.477
- precision_at_10 on MTEB ArguAnatest set self-reported9.203
- precision_at_20 on MTEB ArguAnatest set self-reported4.872
- precision_at_30 on MTEB ArguAnatest set self-reported3.284
- precision_at_50 on MTEB ArguAnatest set self-reported1.983
- precision_at_70 on MTEB ArguAnatest set self-reported1.421
- precision_at_100 on MTEB ArguAnatest set self-reported0.996
- precision_at_200 on MTEB ArguAnatest set self-reported0.498
- precision_at_300 on MTEB ArguAnatest set self-reported0.332
- precision_at_500 on MTEB ArguAnatest set self-reported0.199
- precision_at_700 on MTEB ArguAnatest set self-reported0.142
- precision_at_1000 on MTEB ArguAnatest set self-reported0.100
- mrr_at_1 on MTEB ArguAnatest set self-reported44.666
- mrr_at_2 on MTEB ArguAnatest set self-reported52.418
- mrr_at_3 on MTEB ArguAnatest set self-reported55.595
- mrr_at_5 on MTEB ArguAnatest set self-reported58.205
- mrr_at_7 on MTEB ArguAnatest set self-reported59.203
- mrr_at_10 on MTEB ArguAnatest set self-reported59.727
- mrr_at_20 on MTEB ArguAnatest set self-reported60.133
- mrr_at_30 on MTEB ArguAnatest set self-reported60.178
- mrr_at_50 on MTEB ArguAnatest set self-reported60.192
- mrr_at_70 on MTEB ArguAnatest set self-reported60.198
- mrr_at_100 on MTEB ArguAnatest set self-reported60.200
- mrr_at_200 on MTEB ArguAnatest set self-reported60.200
- mrr_at_300 on MTEB ArguAnatest set self-reported60.200
- mrr_at_500 on MTEB ArguAnatest set self-reported60.200
- mrr_at_700 on MTEB ArguAnatest set self-reported60.200
- mrr_at_1000 on MTEB ArguAnatest set self-reported60.200
- v_measure on MTEB ArxivClusteringP2Ptest set self-reported52.075
- v_measure on MTEB ArxivClusteringS2Stest set self-reported47.381
- map on MTEB AskUbuntuDupQuestionstest set self-reported67.584
- mrr on MTEB AskUbuntuDupQuestionstest set self-reported80.569
- cos_sim_pearson on MTEB BIOSSEStest set self-reported88.401
- cos_sim_spearman on MTEB BIOSSEStest set self-reported86.070
- euclidean_pearson on MTEB BIOSSEStest set self-reported87.173
- euclidean_spearman on MTEB BIOSSEStest set self-reported86.070
- manhattan_pearson on MTEB BIOSSEStest set self-reported87.257
- manhattan_spearman on MTEB BIOSSEStest set self-reported86.381
- accuracy on MTEB Banking77Classificationtest set self-reported88.812
- f1 on MTEB Banking77Classificationtest set self-reported88.765
- v_measure on MTEB BiorxivClusteringP2Ptest set self-reported43.938