Sentence Similarity
PyTorch
Safetensors
sentence-transformers
Transformers
Vietnamese
generic
roberta
feature-extraction
Instructions to use bkai-foundation-models/vietnamese-bi-encoder with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use bkai-foundation-models/vietnamese-bi-encoder with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("bkai-foundation-models/vietnamese-bi-encoder") sentences = [ "Làm thế nào Đại học Bách khoa Hà Nội thu hút sinh viên quốc tế?", "Đại học Bách khoa Hà Nội đã phát triển các chương trình đào tạo bằng tiếng Anh để làm cho việc học tại đây dễ dàng hơn cho sinh viên quốc tế.", "Môi trường học tập đa dạng và sự hỗ trợ đầy đủ cho sinh viên quốc tế tại Đại học Bách khoa Hà Nội giúp họ thích nghi nhanh chóng.", "Hà Nội có khí hậu mát mẻ vào mùa thu.", "Các món ăn ở Hà Nội rất ngon và đa dạng." ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [5, 5] - Transformers
How to use bkai-foundation-models/vietnamese-bi-encoder with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("bkai-foundation-models/vietnamese-bi-encoder") model = AutoModel.from_pretrained("bkai-foundation-models/vietnamese-bi-encoder") - Notebooks
- Google Colab
- Kaggle
Pham Tien Son commited on
Commit ·
91e43e3
1
Parent(s): 09ee953
Add new SentenceTransformer model.
Browse files- .gitattributes +1 -0
- 1_Pooling/config.json +7 -0
- README.md +129 -0
- added_tokens.json +3 -0
- bpe.codes +0 -0
- config.json +28 -0
- config_sentence_transformers.json +7 -0
- modules.json +14 -0
- pytorch_model.bin +3 -0
- sentence_bert_config.json +4 -0
- special_tokens_map.json +9 -0
- tokenizer_config.json +12 -0
- vocab.txt +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
pytorch_model.bin filter=lfs diff=lfs merge=lfs -text
|
1_Pooling/config.json
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"word_embedding_dimension": 768,
|
| 3 |
+
"pooling_mode_cls_token": false,
|
| 4 |
+
"pooling_mode_mean_tokens": true,
|
| 5 |
+
"pooling_mode_max_tokens": false,
|
| 6 |
+
"pooling_mode_mean_sqrt_len_tokens": false
|
| 7 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
pipeline_tag: sentence-similarity
|
| 3 |
+
tags:
|
| 4 |
+
- sentence-transformers
|
| 5 |
+
- feature-extraction
|
| 6 |
+
- sentence-similarity
|
| 7 |
+
- transformers
|
| 8 |
+
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# bkai-foundation-models/bkai-bi-encoder
|
| 12 |
+
|
| 13 |
+
This is a [sentence-transformers](https://www.SBERT.net) model: It maps sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like clustering or semantic search.
|
| 14 |
+
|
| 15 |
+
<!--- Describe your model here -->
|
| 16 |
+
|
| 17 |
+
## Usage (Sentence-Transformers)
|
| 18 |
+
|
| 19 |
+
Using this model becomes easy when you have [sentence-transformers](https://www.SBERT.net) installed:
|
| 20 |
+
|
| 21 |
+
```
|
| 22 |
+
pip install -U sentence-transformers
|
| 23 |
+
```
|
| 24 |
+
|
| 25 |
+
Then you can use the model like this:
|
| 26 |
+
|
| 27 |
+
```python
|
| 28 |
+
from sentence_transformers import SentenceTransformer
|
| 29 |
+
sentences = ["This is an example sentence", "Each sentence is converted"]
|
| 30 |
+
|
| 31 |
+
model = SentenceTransformer('bkai-foundation-models/bkai-bi-encoder')
|
| 32 |
+
embeddings = model.encode(sentences)
|
| 33 |
+
print(embeddings)
|
| 34 |
+
```
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
## Usage (HuggingFace Transformers)
|
| 39 |
+
Without [sentence-transformers](https://www.SBERT.net), you can use the model like this: First, you pass your input through the transformer model, then you have to apply the right pooling-operation on-top of the contextualized word embeddings.
|
| 40 |
+
|
| 41 |
+
```python
|
| 42 |
+
from transformers import AutoTokenizer, AutoModel
|
| 43 |
+
import torch
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
#Mean Pooling - Take attention mask into account for correct averaging
|
| 47 |
+
def mean_pooling(model_output, attention_mask):
|
| 48 |
+
token_embeddings = model_output[0] #First element of model_output contains all token embeddings
|
| 49 |
+
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
|
| 50 |
+
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
# Sentences we want sentence embeddings for
|
| 54 |
+
sentences = ['This is an example sentence', 'Each sentence is converted']
|
| 55 |
+
|
| 56 |
+
# Load model from HuggingFace Hub
|
| 57 |
+
tokenizer = AutoTokenizer.from_pretrained('bkai-foundation-models/bkai-bi-encoder')
|
| 58 |
+
model = AutoModel.from_pretrained('bkai-foundation-models/bkai-bi-encoder')
|
| 59 |
+
|
| 60 |
+
# Tokenize sentences
|
| 61 |
+
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
|
| 62 |
+
|
| 63 |
+
# Compute token embeddings
|
| 64 |
+
with torch.no_grad():
|
| 65 |
+
model_output = model(**encoded_input)
|
| 66 |
+
|
| 67 |
+
# Perform pooling. In this case, mean pooling.
|
| 68 |
+
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
|
| 69 |
+
|
| 70 |
+
print("Sentence embeddings:")
|
| 71 |
+
print(sentence_embeddings)
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
## Evaluation Results
|
| 77 |
+
|
| 78 |
+
<!--- Describe how your model was evaluated -->
|
| 79 |
+
|
| 80 |
+
For an automated evaluation of this model, see the *Sentence Embeddings Benchmark*: [https://seb.sbert.net](https://seb.sbert.net?model_name=bkai-foundation-models/bkai-bi-encoder)
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
## Training
|
| 84 |
+
The model was trained with the parameters:
|
| 85 |
+
|
| 86 |
+
**DataLoader**:
|
| 87 |
+
|
| 88 |
+
`torch.utils.data.dataloader.DataLoader` of length 17584 with parameters:
|
| 89 |
+
```
|
| 90 |
+
{'batch_size': 32, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
|
| 91 |
+
```
|
| 92 |
+
|
| 93 |
+
**Loss**:
|
| 94 |
+
|
| 95 |
+
`sentence_transformers.losses.MultipleNegativesRankingLoss.MultipleNegativesRankingLoss` with parameters:
|
| 96 |
+
```
|
| 97 |
+
{'scale': 20.0, 'similarity_fct': 'cos_sim'}
|
| 98 |
+
```
|
| 99 |
+
|
| 100 |
+
Parameters of the fit()-Method:
|
| 101 |
+
```
|
| 102 |
+
{
|
| 103 |
+
"epochs": 15,
|
| 104 |
+
"evaluation_steps": 0,
|
| 105 |
+
"evaluator": "NoneType",
|
| 106 |
+
"max_grad_norm": 1,
|
| 107 |
+
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
|
| 108 |
+
"optimizer_params": {
|
| 109 |
+
"lr": 2e-05
|
| 110 |
+
},
|
| 111 |
+
"scheduler": "WarmupLinear",
|
| 112 |
+
"steps_per_epoch": null,
|
| 113 |
+
"warmup_steps": 1000,
|
| 114 |
+
"weight_decay": 0.01
|
| 115 |
+
}
|
| 116 |
+
```
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
## Full Model Architecture
|
| 120 |
+
```
|
| 121 |
+
SentenceTransformer(
|
| 122 |
+
(0): Transformer({'max_seq_length': 256, 'do_lower_case': False}) with Transformer model: RobertaModel
|
| 123 |
+
(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})
|
| 124 |
+
)
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
## Citing & Authors
|
| 128 |
+
|
| 129 |
+
<!--- Describe where people can find more information -->
|
added_tokens.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"<mask>": 64000
|
| 3 |
+
}
|
bpe.codes
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
config.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_name_or_path": "output/",
|
| 3 |
+
"architectures": [
|
| 4 |
+
"RobertaModel"
|
| 5 |
+
],
|
| 6 |
+
"attention_probs_dropout_prob": 0.1,
|
| 7 |
+
"bos_token_id": 0,
|
| 8 |
+
"classifier_dropout": null,
|
| 9 |
+
"eos_token_id": 2,
|
| 10 |
+
"hidden_act": "gelu",
|
| 11 |
+
"hidden_dropout_prob": 0.1,
|
| 12 |
+
"hidden_size": 768,
|
| 13 |
+
"initializer_range": 0.02,
|
| 14 |
+
"intermediate_size": 3072,
|
| 15 |
+
"layer_norm_eps": 1e-05,
|
| 16 |
+
"max_position_embeddings": 258,
|
| 17 |
+
"model_type": "roberta",
|
| 18 |
+
"num_attention_heads": 12,
|
| 19 |
+
"num_hidden_layers": 12,
|
| 20 |
+
"pad_token_id": 1,
|
| 21 |
+
"position_embedding_type": "absolute",
|
| 22 |
+
"tokenizer_class": "PhobertTokenizer",
|
| 23 |
+
"torch_dtype": "float32",
|
| 24 |
+
"transformers_version": "4.33.1",
|
| 25 |
+
"type_vocab_size": 1,
|
| 26 |
+
"use_cache": true,
|
| 27 |
+
"vocab_size": 64001
|
| 28 |
+
}
|
config_sentence_transformers.json
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"__version__": {
|
| 3 |
+
"sentence_transformers": "2.2.2",
|
| 4 |
+
"transformers": "4.32.0",
|
| 5 |
+
"pytorch": "2.0.0+cu117"
|
| 6 |
+
}
|
| 7 |
+
}
|
modules.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"idx": 0,
|
| 4 |
+
"name": "0",
|
| 5 |
+
"path": "",
|
| 6 |
+
"type": "sentence_transformers.models.Transformer"
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"idx": 1,
|
| 10 |
+
"name": "1",
|
| 11 |
+
"path": "1_Pooling",
|
| 12 |
+
"type": "sentence_transformers.models.Pooling"
|
| 13 |
+
}
|
| 14 |
+
]
|
pytorch_model.bin
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cbfae04cc7f3063949a7d81258e185cd31249892768c15e27b70d4797f42b902
|
| 3 |
+
size 540057065
|
sentence_bert_config.json
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"max_seq_length": 256,
|
| 3 |
+
"do_lower_case": false
|
| 4 |
+
}
|
special_tokens_map.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token": "<s>",
|
| 3 |
+
"cls_token": "<s>",
|
| 4 |
+
"eos_token": "</s>",
|
| 5 |
+
"mask_token": "<mask>",
|
| 6 |
+
"pad_token": "<pad>",
|
| 7 |
+
"sep_token": "</s>",
|
| 8 |
+
"unk_token": "<unk>"
|
| 9 |
+
}
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token": "<s>",
|
| 3 |
+
"clean_up_tokenization_spaces": true,
|
| 4 |
+
"cls_token": "<s>",
|
| 5 |
+
"eos_token": "</s>",
|
| 6 |
+
"mask_token": "<mask>",
|
| 7 |
+
"model_max_length": 1000000000000000019884624838656,
|
| 8 |
+
"pad_token": "<pad>",
|
| 9 |
+
"sep_token": "</s>",
|
| 10 |
+
"tokenizer_class": "PhobertTokenizer",
|
| 11 |
+
"unk_token": "<unk>"
|
| 12 |
+
}
|
vocab.txt
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|