thehosy/roberta-base-qa-vietnamese

This is a encoder model: It can encodes sentences or paragraphs (maximum 768 tokens) to dense vectors with 768 dimensions. It used for QA semantic search.

Datasets:

  • MS Macro (translated into Vietnamese)
  • SQuAD v2 (translated into Vietnamese)
  • UIT ViQuad2.0
  • ZaloQA 2021

Roberta-base architecture is used as backbone (Training from scratch).

Usage (Sentence-Transformers)

Using this model becomes easy when you have sentence-transformers installed:

pip install -q sentence-transformers

Then you can use the model like this:

from sentence_transformers import SentenceTransformer
from torch.nn import functional as F


sentences = ["Mỗi hiệp bóng đá kéo dài bao lâu",
  "Một trận đấu bóng đá thông thường có hai hiệp , mỗi hiệp 45 phút với khoảng thời gian 15 phút nghỉ giữa hai hiệp .",
  "Cũng trong thập niên 1850 , các đội bóng nghiệp dư bắt đầu được thành lập và thường mỗi đội xây dựng cho riêng họ những luật chơi mới của môn bóng đá , trong đó đáng chú ý có câu lạc bộ Sheffield F.C .. Việc mỗi đội bóng có luật chơi khác nhau khiến việc điều hành mỗi trận đấu giữa họ diễn ra rất khó khăn ."]

model = SentenceTransformer('thehosy/vi-roberta-base-qa-embedding')
model.eval()

embeddings = model.encode(sentences, convert_to_tensor=True)
vecs = F.normalize(embeddings)
sim_scores = F.cosine_similarity(vecs[:1], vecs[1:])
print(sim_scores)

# tensor([0.9971, 0.3511])

Usage (HuggingFace Transformers)

You can alse use the model with transformers by applying the pooling (mean pooling) on-top of the contextualized word embeddings.

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


#Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output.last_hidden_state
    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)


sentences = ["Mỗi hiệp bóng đá kéo dài bao lâu",
  "Một trận đấu bóng đá thông thường có hai hiệp , mỗi hiệp 45 phút với khoảng thời gian 15 phút nghỉ giữa hai hiệp .",
  "Cũng trong thập niên 1850 , các đội bóng nghiệp dư bắt đầu được thành lập và thường mỗi đội xây dựng cho riêng họ những luật chơi mới của môn bóng đá , trong đó đáng chú ý có câu lạc bộ Sheffield F.C .. Việc mỗi đội bóng có luật chơi khác nhau khiến việc điều hành mỗi trận đấu giữa họ diễn ra rất khó khăn ."]

# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('thehosy/vi-roberta-base-qa-embedding')
model = AutoModel.from_pretrained('thehosy/vi-roberta-base-qa-embedding')
model.eval()

# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Compute token embeddings
with torch.no_grad():
    model_output = model(**encoded_input)

embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
vecs = F.normalize(embeddings)
sim_scores = F.cosine_similarity(vecs[:1], vecs[1:])
print(sim_scores)

# tensor([0.9971, 0.3511])

Training

Pretraining

The model was trained with the parameters:

DataLoader:

MSMACRO: torch.utils.data.dataloader.DataLoader of length 2621440 with parameters:

{'batch_size': 32, 'sampler': None, 'batch_sampler': None, 'shuffle': true}

Loss:

Triplet loss

Training Parameters

  • epochs: 6
  • optimizer: AdamW
  • learning_rate: 2e-05
  • scheduler: Warmup Linear Scheduler
  • warmup_steps: 10000
  • weight_decay": 0.001

Finetuning

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 768, 'do_lower_case': False}) with Transformer model: RobertaModel
  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False})
)
Downloads last month
22
Safetensors
Model size
124M params
Tensor type
F32
·
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.