deepvk/USER-base

deepvk
Similitud de oraciones

Universal Sentence Encoder para el ruso (USER) es un modelo sentence-transformer para extraer embeddings exclusivamente para el idioma ruso. Este modelo mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y puede ser utilizado para tareas como la agrupación o la búsqueda semántica. Este modelo se inicializó desde deepvk/deberta-v1-base y está entrenado para trabajar exclusivamente con el idioma ruso. Su calidad en otros idiomas no fue evaluada.

Como usar

Utilizar este modelo se vuelve sencillo cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

Luego puedes usar el modelo así:

from sentence_transformers import SentenceTransformer

input_texts = [
"query: Cuando se lanzó al agua el primer torpedero 'Spokoinyy'?",
"query: ¿Hay petróleo en Udmurtia?",
"pasaje: Spokoinyy (destructor)\nListado en la lista de la Armada Soviética el 19 de agosto de 1952.",
"pasaje: Las obras de búsqueda de petróleo en Udmurtia comenzaron inmediatamente después de la Segunda Guerra Mundial en 1945 y continúan hasta hoy. La extracción de petróleo comenzó en 1967."
]

model = SentenceTransformer("deepvk/USER-base")
embeddings = model.encode(input_texts, normalize_embeddings=True)

Sin embargo, también puedes usar el modelo directamente con Transformers:

import torch.nn.functional as F
from torch import Tensor, inference_mode
from transformers import AutoTokenizer, AutoModel

def average_pool(
    last_hidden_states: Tensor,
    attention_mask: Tensor
) -> Tensor:
    last_hidden = last_hidden_states.masked_fill(
        ~attention_mask[..., None].bool(), 0.0
    )
    return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]

input_texts = [
    "query: Cuando se lanzó al agua el primer torpedero 'Spokoinyy'?",
    "query: ¿Hay petróleo en Udmurtia?",
    "pasaje: Spokoinyy (destructor)\nListado en la lista de la Armada Soviética el 19 de agosto de 1952.",
    "pasaje: Las obras de búsqueda de petróleo en Udmurtia comenzaron inmediatamente después de la Segunda Guerra Mundial en 1945 y continúan hasta hoy. La extracción de petróleo comenzó en 1967."
]

tokenizer = AutoTokenizer.from_pretrained("deepvk/USER-base")
model = AutoModel.from_pretrained("deepvk/USER-base")

batch_dict = tokenizer(
    input_texts, padding=True, truncation=True, return_tensors="pt")
with inference_mode():
    outputs = model(**batch_dict)
embeddings = average_pool(
  outputs.last_hidden_state, batch_dict["attention_mask"]
)
embeddings = F.normalize(embeddings, p=2, dim=1)

scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.round(decimals=2))

⚠️ Atención ⚠️ Cada texto de entrada debe comenzar con el prefijo "query: " o "pasaje: ". Para tareas distintas de la recuperación, simplemente utiliza el prefijo "query: ".

Funcionalidades

Extracción de características
Transformaciones de oraciones
Comparación de similitud de oraciones
Compatible con AutoTrain
Compatible con Endpoints de Inferencia

Casos de uso

Agrupación de oraciones
Búsqueda semántica
Recuperación de pasajes
Minería de textos paralelos
Recuperación de paráfrasis