mlsa-iai-msu-lab/sci-rus-tiny
mlsa-iai-msu-lab
Similitud de oraciones
SciRus-tiny es un modelo para obtener embeddings de textos científicos en ruso e inglés. El modelo fue entrenado con datos de eLibrary utilizando técnicas contrastivas descritas en una publicación de Habr. Se lograron altos valores de métricas en el benchmark ruSciBench.
Como usar
from transformers import AutoTokenizer, AutoModel
import torch.nn.functional as F
import torch
tokenizer = AutoTokenizer.from_pretrained("mlsa-iai-msu-lab/sci-rus-tiny")
model = AutoModel.from_pretrained("mlsa-iai-msu-lab/sci-rus-tiny")
# model.cuda() # si quieres usar una GPU
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # El primer elemento de model_output contiene todos los embeddings de tokens
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)
def get_sentence_embedding(title, abstract, model, tokenizer, max_length=None):
# Tokenizar frases
sentence = ''.join([title, abstract])
encoded_input = tokenizer([sentence], padding=True, truncation=True, return_tensors='pt', max_length=max_length).to(model.device)
# Calcular embeddings de tokens
with torch.no_grad():
model_output = model(**encoded_input)
# Realizar pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# Normalizar embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
return sentence_embeddings.cpu().detach().numpy()[0]
print(get_sentence_embedding('some title', 'some abstract', model, tokenizer).shape)
# (312,)
# También puedes usar sentence_transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('mlsa-iai-msu-lab/sci-rus-tiny')
embeddings = model.encode(['some title' + '' + 'some abstract'])
print(embeddings[0].shape)
# (312,)
Funcionalidades
- Modelo entrenado con datos de eLibrary
- Utilización de técnicas contrastivas
- Alta precisión en el benchmark ruSciBench
- Compatible con PyTorch y transformers
Casos de uso
- Obtener embeddings de textos científicos en ruso e inglés
- Procesamiento de gran volumen de información textual científica