bkai-fine-tuned-legal

This is a sentence-transformers model finetuned from bkai-foundation-models/vietnamese-bi-encoder on the json dataset. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.

Model Details

Model Description

  • Model Type: Sentence Transformer
  • Base model: bkai-foundation-models/vietnamese-bi-encoder
  • Maximum Sequence Length: 256 tokens
  • Output Dimensionality: 768 dimensions
  • Similarity Function: Cosine Similarity
  • Training Dataset:
    • json
  • Language: vi
  • License: apache-2.0

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 256, 'do_lower_case': False, 'architecture': '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, 'include_prompt': True})
)

Usage

Direct Usage (Sentence Transformers)

First install the Sentence Transformers library:

pip install -U sentence-transformers

Then you can load this model and run inference.

from sentence_transformers import SentenceTransformer

# Download from the 🤗 Hub
model = SentenceTransformer("KhangLeDuc/ProjectEmbedding")
# Run inference
sentences = [
    'Tôi làm hộ_lý theo hợp_đồng 68 tại khoa kiểm_soát nhiễm_khuẩn ở bệnh_viện huyện . Công_việc hàng ngày là xử_lý đồ vải bệnh_nhân và xử_lý_dụng_cụ y_tế của bệnh_viện . Tôi đang hưởng lương bậc 4 , hệ_số 2,19 . Tôi xin hỏi , theo Nghị_định 111 / 2022 / NĐ - CP , tôi có được tiếp_tục làm_việc và hưởng các chế_độ của hợp_đồng 68 nữa không hay tôi phải chuyển sang ký hợp_đồng khác ? Nếu chuyển sang loại hợp_đồng khác thì lương và các chế_độ sẽ hưởng thế_nào ? Bộ Nội_vụ trả_lời vấn_đề này như sau : Khoản 1 Điều 13 Nghị_định số111 / 2022 / NĐ - CPquy định : " Người đang thực_hiện các công_việc hỗ_trợ , phục_vụ theo quy_định tại khoản 1 Điều 4 Nghị_định này nếu chưa chuyển sang ký hợp_đồng lao_động theo quy_định của Nghị_định số 161 / 2018 / NĐ - CP ngày 29 tháng 11 năm 2018 của Chính_phủ sửa_đổi , bổ_sung một_số quy_định về tuyển_dụng công_chức , viên_chức , nâng ngạch công_chức , thăng_hạng viên_chức và thực_hiện chế_độ hợp_đồng một_số loại công_việc trong cơ_quan hành_chính nhà_nước , đơn_vị sự_nghiệp công_lập ( sau đây viết tắt là Nghị_định số 161 / 2018 / NĐ - CP ) và cơ_quan , tổ_chức , đơn_vị không ký hợp_đồng dịch_vụ thì trong thời_hạn 12 tháng kể từ ngày Nghị_định này có hiệu_lực , cơ_quan , tổ_chức , đơn_vị phải chuyển sang ký hợp_đồng lao_động . Hợp_đồng lao_động ký_kết phải bảo_đảm quyền , lợi_ích hợp_pháp về tiền_lương , chế_độ bảo_hiểm xã_hội và các chế_độ khác theo quy_định của pháp_luật . Trường_hợp một trong các bên không có nhu_cầu thì giải_quyết chế_độ thôi_việc theo quy_định của pháp_luật " . Như_vậy , trường_hợp bà Trần_Thị_Hoa nếu chưa chuyển sang ký hợp_đồng lao_động theo quy_định của Nghị_định số161 / 2018 / NĐ - CPthì trong thời_hạn 12 tháng kể từ ngày Nghị_định số 111 / 2022 / NĐ - CP có hiệu_lực phải chuyển sang ký hợp_đồng lao_động . Tiền_lương và các chế_độ khác của người lao_động thực_hiện theo quy_định tại khoản 2 Điều 8 Nghị_định số 111 / 2022 / NĐ - CP.',
    'Ký hợp_đồng lao_động theo quy_định mới từ 22 / 2 / 2023',
    'Đối_tượng được bổ_nhiệm Phó_Thủ_trưởng cơ_quan quản_lý thi_hành án hình_sự thuộc Bộ Công_an được quy_định như thế_nào ?',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[ 1.0000,  0.5524, -0.0091],
#         [ 0.5524,  1.0000, -0.0801],
#         [-0.0091, -0.0801,  1.0000]])

Evaluation

Metrics

Information Retrieval

Metric Value
cosine_accuracy@1 0.3697
cosine_accuracy@3 0.4858
cosine_accuracy@5 0.5618
cosine_accuracy@10 0.7314
cosine_precision@1 0.3697
cosine_precision@3 0.1619
cosine_precision@5 0.1124
cosine_precision@10 0.0731
cosine_recall@1 0.3697
cosine_recall@3 0.4858
cosine_recall@5 0.5618
cosine_recall@10 0.7314
cosine_ndcg@10 0.5219
cosine_mrr@10 0.4587
cosine_map@100 0.4687

Information Retrieval

Metric Value
cosine_accuracy@1 0.367
cosine_accuracy@3 0.4864
cosine_accuracy@5 0.5669
cosine_accuracy@10 0.7332
cosine_precision@1 0.367
cosine_precision@3 0.1621
cosine_precision@5 0.1134
cosine_precision@10 0.0733
cosine_recall@1 0.367
cosine_recall@3 0.4864
cosine_recall@5 0.5669
cosine_recall@10 0.7332
cosine_ndcg@10 0.5215
cosine_mrr@10 0.4575
cosine_map@100 0.4674

Information Retrieval

Metric Value
cosine_accuracy@1 0.3652
cosine_accuracy@3 0.4843
cosine_accuracy@5 0.5609
cosine_accuracy@10 0.7293
cosine_precision@1 0.3652
cosine_precision@3 0.1614
cosine_precision@5 0.1122
cosine_precision@10 0.0729
cosine_recall@1 0.3652
cosine_recall@3 0.4843
cosine_recall@5 0.5609
cosine_recall@10 0.7293
cosine_ndcg@10 0.5189
cosine_mrr@10 0.4554
cosine_map@100 0.4655

Information Retrieval

Metric Value
cosine_accuracy@1 0.3673
cosine_accuracy@3 0.4856
cosine_accuracy@5 0.5607
cosine_accuracy@10 0.7256
cosine_precision@1 0.3673
cosine_precision@3 0.1619
cosine_precision@5 0.1121
cosine_precision@10 0.0726
cosine_recall@1 0.3673
cosine_recall@3 0.4856
cosine_recall@5 0.5607
cosine_recall@10 0.7256
cosine_ndcg@10 0.518
cosine_mrr@10 0.4554
cosine_map@100 0.4655

Information Retrieval

Metric Value
cosine_accuracy@1 0.3582
cosine_accuracy@3 0.4751
cosine_accuracy@5 0.5531
cosine_accuracy@10 0.7208
cosine_precision@1 0.3582
cosine_precision@3 0.1584
cosine_precision@5 0.1106
cosine_precision@10 0.0721
cosine_recall@1 0.3582
cosine_recall@3 0.4751
cosine_recall@5 0.5531
cosine_recall@10 0.7208
cosine_ndcg@10 0.5115
cosine_mrr@10 0.4484
cosine_map@100 0.4584

Training Details

Training Dataset

json

  • Dataset: json
  • Size: 57,371 training samples
  • Columns: positive and anchor
  • Approximate statistics based on the first 1000 samples:
    positive anchor
    type string string
    details
    • min: 16 tokens
    • mean: 180.36 tokens
    • max: 256 tokens
    • min: 5 tokens
    • mean: 16.49 tokens
    • max: 52 tokens
  • Samples:
    positive anchor
    Điều 3 Quyết_định 44 / 2015 / QĐ - UBND thu quản_lý phí tham_gia đấu_giá quyền khai_thác khoáng_sản Bình_Dương có nội_dung như sau :

    Điều 3 . Chánh Văn_phòng Ủy_ban nhân_dân Thủ_trưởng các sở , ban , ngành , Chủ_tịch Ủy_ban nhân_dân các huyện , thị_xã , thành_phố và Thủ_trưởng các đơn_vị , tổ_chức , cá_nhân có liên_quan chịu trách_nhiệm thi_hành Quyết_định này
    Điều 3 Quyết_định 44 / 2015 / QĐ - UBND thu quản_lý phí tham_gia đấu_giá quyền khai_thác khoáng_sản Bình_Dương
    Điều 2 Quyết_định 3592 / QĐ - UBND 2020 phổ_biến pháp_luật hòa giải ở cơ_sở Khánh_Hòa có nội_dung như sau :

    Điều 2 . Quyết_định này có hiệu_lực thi_hành kể từ ngày ký .
    Điều 2 Quyết_định 3592 / QĐ - UBND 2020 phổ_biến pháp_luật hòa giải ở cơ_sở Khánh_Hòa
    Điều 5 . Xác_định chi_phí lập , thẩm_định đồ_án quy_hoạch 1 . Nội_dung , sản_phẩm đồ_án quy_hoạch được quy_định tại Nghị_định quy_định chi_tiết một_số nội_dung về quy_hoạch xây_dựng , Nghị_định về lập , thẩm_định , phê_duyệt và quản_lý quy_hoạch đô_thị , các Nghị_định chuyên_ngành có liên_quan và các văn_bản hướng_dẫn .
    2 . Chi_phí lập đồ_án quy_hoạch bao_gồm các chi_phí sau : chi_phí cho những người tham_gia thực_hiện lập đồ_án , các chi_phí khác ( chi_phí mua tài_liệu , số_liệu , bản_đồ , văn_phòng_phẩm , phần_mềm quy_hoạch ( nếu có ) , chi_phí khấu_hao thiết_bị , chi_phí đi_lại , chi_phí lưu_trú , chi_phí hội_nghị , hội_thảo và các khoản chi_phí khác ( nếu có ) ) .
    3 . Chi_phí lập đồ_án quy_hoạch xác_định theo định_mức được quy_định tại Thông_tư này chưa bao_gồm chi_phí để thực_hiện các công_việc sau :
    a ) Lập nhiệm_vụ quy_hoạch .
    b ) Khảo_sát xây_dựng phục_vụ lập đồ_án quy_hoạch .
    c ) Mua hoặc lập các bản_đồ địa_hình phục_vụ lập đồ_án quy_hoạch ( nếu có ) .
    4 . Chi_phí ...
    Chi_phí điều_chỉnh đồ_án quy_hoạch được xác_định như thế_nào ?
  • Loss: MatryoshkaLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "matryoshka_dims": [
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": -1
    }
    

Evaluation Dataset

json

  • Dataset: json
  • Size: 7,172 evaluation samples
  • Columns: positive and anchor
  • Approximate statistics based on the first 1000 samples:
    positive anchor
    type string string
    details
    • min: 13 tokens
    • mean: 181.46 tokens
    • max: 256 tokens
    • min: 6 tokens
    • mean: 16.05 tokens
    • max: 38 tokens
  • Samples:
    positive anchor
    Cơ_quan tôi tổ_chức đấu_thầu rộng_rãi trong nước gói_thầu tư_vấn thiết_kế và thi_công ( hình_thức một giai_đoạn hai túi hồ_sơ ) . Có 3 nhà_thầu A , B , C tham_gia và đều là nhà_thầu liên_danh . Tổ chuyên_gia đánh_giá xong phần hồ_sơ đề_xuất kỹ_thuật và đã trình chủ đầu_tư phê_duyệt danh_sách nhà_thầu đáp_ứng yêu_cầu kỹ_thuật . Ngoài_ra , tổ chuyên_gia còn có thông_báo gửi các nhà_thầu liên_danh về danh_sách nhà_thầu đáp_ứng yêu_cầu kỹ_thuật và nhà_thầu không đáp_ứng yêu_cầu kỹ_thuật . Sau đó có nhà_thầu liên_danh C không đáp_ứng yêu_cầu kỹ_thuật đã kiến_nghị gửi chủ đầu_tư về kết_quả đánh_giá hồ_sơ đề_xuất kỹ_thuật . Tuy_nhiên đơn_vị gửi kiến_nghị đến chủ đầu_tư lại là một thành_viên của liên_danh nhà_thầu C , không phải là nhà_thầu đứng đầu liên_danh . Tôi xin hỏi , trường_hợp này , thành_viên của nhà_thầu liên_danh có được quyền kiến_nghị không ? Chủ đầu_tư phải giải_quyết như thế_nào hay_là đánh_giá tiếp phần đề_xuất tài_chính ? Bộ Kế_hoạch và Đầu_tư trả_lời vấn_đề này như sau : Kho... Thành_viên liên_danh nhà_thầu có quyền gửi đơn kiến_nghị ?
    Tôi xin hỏi , người làm công_chức cấp xã như địa_chính , xây_dựng , giao_thông thủy_lợi , tài_chính , ... có được hiểu là làm công_tác quản_lý nhà_nước thuộc phạm_vi quản_lý của huyện không ? Bộ Nội_vụ trả_lời vấn_đề này như sau : Chức_danh công_chức cấp xã được quy_định tại Khoản 3 Điều 61Luật Cán_bộ , công chứcnăm 2008 ( sửa_đổi , bổ_sung năm 2019 ) . Nhiệm_vụ của từng chức_danh công_chức cấp xã được quy_định tại Điều 11 Nghị_định số33 / 2023 / NĐ - CPngày 10 / 6 / 2023 của Chính_phủ quy_định về cán_bộ , công_chức cấp xã và người hoạt_động không chuyên_trách ở cấp xã , ở thôn , tổ dân_phố . Theo đó , công_chức cấp xã làm nhiệm_vụ tham_mưu giúp UBND cấp xã về công_tác lý nhà_nước theo lĩnh_vực chuyên_môn , nghiệp_vụ giao trên phạm_vi địa_bàn cấp xã . Căn_cứ các quy_định nêu trên , công_chức cấp xã là người tham_mưu giúp UBND cấp xã về công_tác quản_lý nhà_nước theo lĩnh_vực chuyên_môn được giao trên địa_bàn cấp xã , không phải làm công_tác quản_lý nhà_nước thuộc phạm_vi cấp huyện . Công_chức cấp xã làm nhiệm_vụ gì ?
    Điều 11 . Chế_phẩm sinh_học phải đăng_ký lưu_hành 1 . Chế_phẩm sinh_học sản_xuất trong nước hoặc nhập_khẩu chưa có tên trong Danh_mục chế_phẩm sinh_học trong xử_lý chất_thải tại Việt_Nam .
    2 . Chế_phẩm sinh_học có tên trong Danh_mục chế_phẩm sinh_học trong xử_lý chất_thải tại Việt_Nam nhưng có thay_đổi về thành_phần hoặc hàm_lượng các hoạt_chất trong chế_phẩm sinh_học làm ảnh_hưởng đến hiệu_quả xử_lý và tính an_toàn đối_với sức_khỏe con_người và sinh_vật .
    Chế_phẩm sinh_học phải đăng_ký lưu_hành bao_gồm những chế_phẩm sinh_học nào ?
  • Loss: MatryoshkaLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "matryoshka_dims": [
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": -1
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: epoch
  • per_device_train_batch_size: 52
  • per_device_eval_batch_size: 52
  • gradient_accumulation_steps: 12
  • learning_rate: 3e-05
  • weight_decay: 0.2
  • max_grad_norm: 0.65
  • num_train_epochs: 8
  • lr_scheduler_type: cosine
  • warmup_ratio: 0.15
  • fp16: True
  • load_best_model_at_end: True
  • group_by_length: True
  • batch_sampler: no_duplicates

All Hyperparameters

Click to expand
  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: epoch
  • prediction_loss_only: True
  • per_device_train_batch_size: 52
  • per_device_eval_batch_size: 52
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 12
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 3e-05
  • weight_decay: 0.2
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 0.65
  • num_train_epochs: 8
  • max_steps: -1
  • lr_scheduler_type: cosine
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.15
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • bf16: False
  • fp16: True
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: True
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • parallelism_config: None
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch_fused
  • optim_args: None
  • adafactor: False
  • group_by_length: True
  • length_column_name: length
  • project: huggingface
  • trackio_space_id: trackio
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: None
  • hub_always_push: False
  • hub_revision: None
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • include_for_metrics: []
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: no
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_eval_metrics: False
  • eval_on_start: False
  • use_liger_kernel: False
  • liger_kernel_config: None
  • eval_use_gather_object: False
  • average_tokens_across_devices: True
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Epoch Step Training Loss Validation Loss dim_768_cosine_ndcg@10 dim_512_cosine_ndcg@10 dim_256_cosine_ndcg@10 dim_128_cosine_ndcg@10 dim_64_cosine_ndcg@10
1.0 92 0.5777 0.1919 0.4327 0.4327 0.4285 0.4231 0.3973
2.0 184 0.1552 0.1167 0.5138 0.5103 0.5068 0.5022 0.4873
3.0 276 0.0768 0.1053 0.5156 0.5139 0.5093 0.5081 0.4955
4.0 368 0.0571 0.0954 0.5184 0.5184 0.5164 0.5120 0.5010
5.0 460 0.0491 0.0854 0.5191 0.5196 0.5156 0.5168 0.5049
6.0 552 0.0421 0.0839 0.5215 0.5227 0.5187 0.5183 0.5088
7.0 644 0.0352 0.0834 0.5219 0.5215 0.5189 0.518 0.5115
  • The bold row denotes the saved checkpoint.

Framework Versions

  • Python: 3.10.12
  • Sentence Transformers: 5.1.2
  • Transformers: 4.57.1
  • PyTorch: 2.9.0+cu128
  • Accelerate: 1.11.0
  • Datasets: 4.4.1
  • Tokenizers: 0.22.1

Citation

BibTeX

Sentence Transformers

@inproceedings{reimers-2019-sentence-bert,
    title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
    author = "Reimers, Nils and Gurevych, Iryna",
    booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
    month = "11",
    year = "2019",
    publisher = "Association for Computational Linguistics",
    url = "https://arxiv.org/abs/1908.10084",
}

MatryoshkaLoss

@misc{kusupati2024matryoshka,
    title={Matryoshka Representation Learning},
    author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
    year={2024},
    eprint={2205.13147},
    archivePrefix={arXiv},
    primaryClass={cs.LG}
}

MultipleNegativesRankingLoss

@misc{henderson2017efficient,
    title={Efficient Natural Language Response Suggestion for Smart Reply},
    author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
    year={2017},
    eprint={1705.00652},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}
Downloads last month
5
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for KhangLeDuc/ProjectEmbedding

Finetuned
(45)
this model

Papers for KhangLeDuc/ProjectEmbedding

Evaluation results