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