|
--- |
|
inference: false |
|
pipeline_tag: sentence-similarity |
|
language: |
|
- bg |
|
license: mit |
|
datasets: |
|
- oscar |
|
- chitanka |
|
- wikipedia |
|
tags: |
|
- torch |
|
--- |
|
|
|
# ROBERTA BASE (cased) trained on private Bulgarian-English parallel data |
|
This is a Multilingual Roberta model. It could be used for creating embeddings of Bulgarian sentences. |
|
|
|
Using the ideas from [Sentence-BERT](https://arxiv.org/abs/2004.09813), the training is based on the idea that a translated sentence should be mapped to the same location in the vector space as the original sentence. |
|
|
|
This model is cased: it does make a difference between bulgarian and Bulgarian. |
|
|
|
It was trained on private Bulgarian-English parallel data. |
|
|
|
Then, it was compressed via [progressive module replacing](https://arxiv.org/abs/2002.02925). |
|
|
|
### How to use |
|
|
|
Here is how to use this model in PyTorch: |
|
|
|
```python |
|
>>> import scipy |
|
>>> import torch |
|
>>> from transformers import AutoModel, AutoTokenizer |
|
>>> |
|
>>> model = AutoModel.from_pretrained('rmihaylov/roberta-base-nli-stsb-theseus-bg') |
|
>>> tokenizer = AutoTokenizer.from_pretrained('rmihaylov/roberta-base-nli-stsb-theseus-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.9855158537034977], |
|
['Къде се правят бисквитките?', 0.9774093134195002], |
|
['Какви видове бисквитки има?', 0.9766014240577192], |
|
['Използват ли в Англия думата бисквитки?', 0.9446492058523037], |
|
['Кое е чудовището на бисквитките?', 0.9269786184641834], |
|
['Къде човек може да купи бисквитки?', 0.9268900421152592], |
|
['Какво е бисквитка?', 0.9188155080718263], |
|
['Бисквитките наричат ли се също сладки?', 0.9060368627614406], |
|
['Откъде дойде думата бисквитка?', 0.9048309659657036], |
|
['Какви напитки вървят добре с бисквитките?', 0.890836765118977], |
|
['Как да си направите бисквитки у дома?', 0.8878968487540497], |
|
['Колко калории има типичната бисквитка?', 0.8652821650136402]] |
|
``` |
|
|