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