Views
No views yet
pip install -U sentence-transformers1from sentence_transformers import SentenceTransformer
2sentences = ["Ceci est une phrase d'exemple", "Chaque phrase est convertie"]
3
4model = SentenceTransformer('hugorosen/flaubert_base_uncased-xnli-sts')
5embeddings = model.encode(sentences)
6print(embeddings)1from transformers import AutoTokenizer, AutoModel
2import torch
3
4
5#Mean Pooling - Take attention mask into account for correct averaging
6def mean_pooling(model_output, attention_mask):
7 token_embeddings = model_output[0] #First element of model_output contains all token embeddings
8 input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
9 return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
10
11
12# Sentences we want sentence embeddings for
13sentences = ["Un avion est en train de décoller.",
14 "Un homme joue d'une grande flûte.",
15 "Un homme étale du fromage râpé sur une pizza.",
16 "Une personne jette un chat au plafond.",
17 "Une personne est en train de plier un morceau de papier.",
18 ]
19
20# Load model from HuggingFace Hub
21tokenizer = AutoTokenizer.from_pretrained('hugorosen/flaubert_base_uncased-xnli-sts')
22model = AutoModel.from_pretrained('hugorosen/flaubert_base_uncased-xnli-sts')
23
24# Tokenize sentences
25encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
26
27# Compute token embeddings
28with torch.no_grad():
29 model_output = model(**encoded_input)
30
31# Perform pooling. In this case, mean pooling.
32sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
33
34print("Sentence embeddings:")
35print(sentence_embeddings)CosineSimilarityLoss on XNLI and STS dataset (french).{
"epochs": 4,
"evaluation_steps": 1000,
"evaluator": "sentence_transformers.evaluation.EmbeddingSimilarityEvaluator.EmbeddingSimilarityEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'transformers.optimization.AdamW'>",
"optimizer_params": {
"lr": 2e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 144,
"weight_decay": 0.01
}SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: FlaubertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)@InProceedings{le2020flaubert,
author = {Le, Hang and Vial, Lo\"{i}c and Frej, Jibril and Segonne, Vincent and Coavoux, Maximin and Lecouteux, Benjamin and Allauzen, Alexandre and Crabb\'{e}, Beno\^{i}t and Besacier, Laurent and Schwab, Didier},
title = {FlauBERT: Unsupervised Language Model Pre-training for French},
booktitle = {Proceedings of The 12th Language Resources and Evaluation Conference},
month = {May},
year = {2020},
address = {Marseille, France},
publisher = {European Language Resources Association},
pages = {2479--2490},
url = {https://www.aclweb.org/anthology/2020.lrec-1.302}
}