rmihaylov/roberta-base-nli-stsb-bg

rmihaylov
Similitud de oraciones

Este es un modelo Multilingüe Roberta que se puede usar para crear embeddings de oraciones en búlgaro. Utilizando las ideas de Sentence-BERT, el entrenamiento se basa en la idea de que una oración traducida debe mapearse a la misma ubicación en el espacio vectorial que la oración original. Este modelo distingue entre mayúsculas y minúsculas: hace diferencia entre 'bulgarian' y 'Bulgarian'. Fue entrenado en datos paralelos búlgaro-inglés privados.

Como usar

Aquí se muestra cómo usar este modelo en PyTorch:

import scipy
import torch
from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained('rmihaylov/roberta-base-nli-stsb-bg')
tokenizer = AutoTokenizer.from_pretrained('rmihaylov/roberta-base-nli-stsb-bg')

def embed(text):
    inputs = tokenizer.encode_plus(text, return_tensors='pt')
    outputs = model(**inputs)
    sequence_output = outputs[0]
    input_mask_expanded = inputs['attention_mask'].unsqueeze(-1).expand(sequence_output.size()).float()
    embeddings = torch.sum(sequence_output * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
    return embeddings.detach().numpy()[0]

query_embedding = embed('Какви са съставките на бисквитките?')

questions = [
    'Какво е бисквитка?',
    'От какво са направени бисквитките?',
    'Използват ли в Англия думата бисквитки?',
    'Къде се правят бисквитките?',
    'Какви видове бисквитки има?',
    'Къде човек може да купи бисквитки?',
    'Откъде дойде думата бисквитка?',
    'Кое е чудовището на бисквитките?',
    'Как да си направите бисквитки у дома?',
    'Колко калории има типичната бисквитка?',
    'Какви напитки вървят добре с бисквитките?',
    'Бисквитките наричат ли се също сладки?'
]

corpus, corpus_embeddings = [], []
for question in questions:
    embedding = embed(question)
    corpus.append(question)
    corpus_embeddings.append(embedding)

distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, 'cosine')[0]

results = zip(range(len(distances)), distances)
results = sorted(results, key=lambda x: x[1])

print([[corpus[idx].strip(), (1.0 - distance)] for idx, distance in results])

[['Какви видове бисквитки има?', 0.9749538412820795],
 ['От какво са направени бисквитките?', 0.9720467855849998],
 ['Къде се правят бисквитките?', 0.9622582076645853],
 ['Какво е бисквитка?', 0.9352896865855094],
 ['Използват ли в Англия думата бисквитки?', 0.8981422328370646],
 ['Откъде дойде думата бисквитка?', 0.8955433698658758],
 ['Кое е чудовището на бисквитките?', 0.8902666858687854],
 ['Бисквитките наричат ли се също сладки?', 0.8839303534407483],
 ['Какви напитки вървят добре с бисквитките?', 0.8582087653310524],
 ['Къде човек може да купи бисквитки?', 0.8570532540073935],
 ['Колко калории има типичната бисквитка?', 0.8387529949080176],
 ['Как да си направите бисквитки у дома?', 0.8243675958097614]]

Funcionalidades

Modelo multilingüe
Creación de embeddings de oraciones en búlgaro
Basado en las ideas de Sentence-BERT
Distingue entre mayúsculas y minúsculas
Entrenado con datos paralelos búlgaro-inglés privados

Casos de uso

Creación de embeddings de oraciones en búlgaro
Mapeo de oraciones traducidas al mismo espacio vectorial que las oraciones originales
Análisis de similitud de oraciones basadas en embeddings