lighteternal/stsb-xlm-r-greek-transfer
lighteternal
Similitud de oraciones
Este es un modelo basado en sentence-transformers: Mapea oraciones y párrafos a un espacio vectorial denso de dimensión 768 y puede ser utilizado para tareas como clustering o búsqueda semántica. Seguimos un enfoque de aprendizaje por transferencia Maestro-Estudiante descrito aquí para entrenar un modelo XLM-Roberta-base en STS usando pares de frases paralelas EN-EL.
Como usar
Usar este modelo se vuelve fácil cuando tienes sentence-transformers instalado:
pip install -U sentence-transformers
Luego puedes usar el modelo así:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('{MODEL_NAME}')
sentences1 = ['Το κινητό έπεσε και έσπασε.',
'Το κινητό έπεσε και έσπασε.',
'Το κινητό έπεσε και έσπασε.']
sentences2 = ['H πτώση κατέστρεψε τη συσκευή.',
'Το αυτοκίνητο έσπασε στα δυο.',
'Ο υπουργός έπεσε και έσπασε το πόδι του.']
embeddings1 = model.encode(sentences1, convert_to_tensor=True)
embeddings2 = model.encode(sentences2, convert_to_tensor=True)
#Compute cosine-similarities (clone repo for util functions)
from sentence_transformers import util
cosine_scores = util.pytorch_cos_sim(embeddings1, embeddings2)
#Output the pairs with their score
for i in range(len(sentences1)):
print('{} {} Score: {:.4f}'.format(sentences1[i], sentences2[i], cosine_scores[i][i]))
#Outputs:
#Το κινητό έπεσε και έσπασε. H πτώση κατέστρεψε τη συσκευή. Score: 0.6741
#Το κινητό έπεσε και έσπασε. Το αυτοκίνητο έσπασε στα δυο. Score: 0.5067
#Το κινητό έπεσε και έσπασε. Ο υπουργός έπεσε και έσπασε το πόδι του. Score: 0.4548
También puedes usar el modelo sin sentence-transformers:
from transformers import AutoTokenizer, AutoModel
import torch
#Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
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)
# Sentences we want sentence embeddings for
sentences = ['This is an example sentence', 'Each sentence is converted']
# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('{MODEL_NAME}')
model = AutoModel.from_pretrained('{MODEL_NAME}')
# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Compute token embeddings
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling. In this case, max pooling.
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print('Sentence embeddings:')
print(sentence_embeddings)
Resultados de la Evaluación
Evaluación de Similitud:
- cosine_pearson: 0.834
- cosine_spearman: 0.846
- euclidean_pearson: 0.816
- euclidean_spearman: 0.811
- manhattan_pearson: 0.816
- manhattan_spearman: 0.814
- dot_pearson: 0.795
- dot_spearman: 0.803
Funcionalidades
- Mapeo de oraciones a un espacio vectorial denso de dimensión 768
- Soporte para clustering
- Búsqueda semántica
- Aprendizaje por transferencia Maestro-Estudiante
- Entrenado en oraciones paralelas EN-EL
- Compatible con la biblioteca sentence-transformers
Casos de uso
- Clustering de oraciones
- Búsqueda semántica
- Medir la similitud semántica entre pares de oraciones en diferentes idiomas