algerian-law-biencoder-v2

A sentence-transformers dense bi-encoder for Algerian family-law retrieval — maps a user's question (in Darja, Arabizi, or MSA) to a 768-dimensional embedding that retrieves the most relevant article from the Algerian Family Code.

Fine-tuned from 81melody/algerian-law-marbert — a MARBERTv2 model already domain-adapted on Algerian legal text — with MultipleNegativesRankingLoss on 389 (query, article) pairs. Queries are real questions posted by Algerian users in Facebook legal-advice groups (Darja / Arabizi / code-switched); documents are structured Algerian Family Code articles prefixed with their chapter context. Designed as the first stage of a two-stage retrieval pipeline followed by algerian-law-reranker-v1.

Architecture MARBERTv2 (768 dim, mean pooling)
Task Asymmetric semantic search — query → law article
Languages Darja · Arabizi · MSA · French · Code-switched
Domain Algerian family law (Droit de la famille, Law 84-11)
Training data 389 (q, p) pairs from Algerian Facebook legal-advice groups
NDCG@10 0.736 on held-out golden dev set (88-query eval set)
MRR@10 0.778
License Apache 2.0

Model Details

Model Description

  • Model Type: Sentence Transformer
  • Base model: 81melody/algerian-law-marbert
  • Maximum Sequence Length: 256 tokens
  • Output Dimensionality: 768 dimensions
  • Similarity Function: Cosine Similarity
  • Supported Modality: Text

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'BertModel'})
  (1): Pooling({'embedding_dimension': 768, 'pooling_mode': 'mean', '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("sentence_transformers_model_id")
# Run inference
sentences = [
    'q: سلام عليكم حبيت نسقسي في حالة ما حضرش الزوج في الجلسة الاولي من الطلاق بالتراضي او غير رايو..كيفاه يكون الوضع.. والاسيلة لي يطرحوهم في اول جلسة ؟؟',
    'p: الكتاب الاول: الزواج وانحلاله — الباب الثاني: انحلال الزواج — الفصل الاول: الطلاق\nالمادة 49\nلا يثبت الطلاق الا بحكم بعد عدة محاولات صلح يجريها القاضي دون ان تتجاوز مدته ثلاثة يتعين علي القاضي تحرير محضر يبين مساعي ونتايج محاولات الصلح، يوقعه مع ااتب الضبط والطرفين. تسجل احكام الطلاق وجوبا في الحالة المدنية بسعي من النيابة العامة.',
    'p: الكتاب الاول: الزواج وانحلاله — الباب الثاني: انحلال الزواج — الفصل الثالث: النفقة\nالمادة 75\nتجب نفقة الولد علي الاب ما لم يكن له مال، فبالنسبة للذاور الي سن الرشد والاناث الي الدخول وتستمر في حالة ما اذا كان الولد عاجزا لافة عقلية او بدنية او مزاولا للدراسة وتسقط بالاستغناء عنها بالكسب.',
]
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.6976, 0.1856],
#         [0.6976, 1.0000, 0.2471],
#         [0.1856, 0.2471, 1.0000]])

Evaluation

Metrics

Information Retrieval

Metric Value
cosine_accuracy@1 0.7045
cosine_accuracy@3 0.8182
cosine_accuracy@5 0.8864
cosine_accuracy@10 0.9318
cosine_precision@1 0.7045
cosine_precision@3 0.4394
cosine_precision@5 0.3
cosine_precision@10 0.1659
cosine_recall@1 0.3523
cosine_recall@3 0.6591
cosine_recall@5 0.75
cosine_recall@10 0.8295
cosine_ndcg@10 0.7362
cosine_mrr@10 0.7779
cosine_map@100 0.6708

Training Details

Training Dataset

Unnamed Dataset

  • Size: 389 training samples
  • Columns: sentence_0 and sentence_1
  • Approximate statistics based on the first 389 samples:
    sentence_0 sentence_1
    type string string
    details
    • min: 11 tokens
    • mean: 58.6 tokens
    • max: 256 tokens
    • min: 24 tokens
    • mean: 103.03 tokens
    • max: 230 tokens
  • Samples:
    sentence_0 sentence_1
    q: سلام عليكم فالخلع شحال من جلسة صلح كاين و مدة بين الجلسة و الجلسة وشكرا p: الكتاب الاول: الزواج وانحلاله — الباب الثاني: انحلال الزواج — الفصل الاول: الطلاق
    المادة 49
    لا يثبت الطلاق الا بحكم بعد عدة محاولات صلح يجريها القاضي دون ان تتجاوز مدته ثلاثة يتعين علي القاضي تحرير محضر يبين مساعي ونتايج محاولات الصلح، يوقعه مع ااتب الضبط والطرفين. تسجل احكام الطلاق وجوبا في الحالة المدنية بسعي من النيابة العامة.
    q: السلام عليكم رفعت قضية خلع حكمولي ب 15 مليون ونا عاملة متربصة وعندي دخل في جديد فقط كيفاش ندير حابة نخلص بشوي كيفاش ندير اسكو كي منخلصش يحكم علي راتب كيفاش نتقاس انا وياه. لي فاهم يفهمني. شكرا p: الكتاب الاول: الزواج وانحلاله — الباب الثاني: انحلال الزواج — الفصل الاول: الطلاق
    المادة 54
    يجوز للزوجة دون موافقة الزوج ان تخالع نفسها بمقابل مالي. اذا لم يتفق الزوجان علي المقابل المالي للخلع، يحكم القاضي بما لا يتجاوز قيمة صداق المثل وقت صدور الحكم.
    q: السلام عليكم جميعا بنسبة للمطلقة في حالة طليق رفض تسديد مبالغ طلاق تعسفي ماذا تفعل. المطلقة افيدوني شكرا p: الكتاب الاول: الزواج وانحلاله — الباب الثاني: انحلال الزواج — الفصل الاول: الطلاق
    المادة 52
    اذا تبين للقاضي تعسف الزوج في الطلاق حكم للمطلقة بالتعويض عن الضرر اللاحق بها. الطلاق حل عقد الزواج، ويتم بارادة الزوج او بتراضي الزوجين او بطلب من الزوجة في حدود ما ورد في المادتين 53 و54 من هذا القانون. لا يثبت الطلاق الا بحكم بعد محاولة الصلح من طرف القاضي دون ان تتجاوز هذه المدة ثلاثة اشهر. اذا تبين للقاضي تعسف الزوج في الطلاق حكم للمطلقة بالتعويض عن الضرر اللاحق بها. واذا كانت حاضنة ولم يكن لها ولي يقبل ايواءها، يضمن حقها في السكن مع محضونيها حسب وسع الزوج. ويستثني من القرار بالسكن، مسكن الزوجية اذا كان وحيدا. تفقد المطلقة حقها في السكن في حالة زواجها او ثبوت انحرافها.
  • Loss: MultipleNegativesRankingLoss with these parameters:
    {
        "scale": 20.0,
        "similarity_fct": "cos_sim",
        "gather_across_devices": false,
        "directions": [
            "query_to_doc"
        ],
        "partition_mode": "joint",
        "hardness_mode": null,
        "hardness_strength": 0.0
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • per_device_train_batch_size: 32
  • per_device_eval_batch_size: 32
  • multi_dataset_batch_sampler: round_robin

All Hyperparameters

Click to expand
  • do_predict: False
  • prediction_loss_only: True
  • per_device_train_batch_size: 32
  • per_device_eval_batch_size: 32
  • gradient_accumulation_steps: 1
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 5e-05
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1
  • num_train_epochs: 3
  • max_steps: -1
  • lr_scheduler_type: linear
  • lr_scheduler_kwargs: None
  • warmup_ratio: None
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • enable_jit_checkpoint: False
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • use_cpu: False
  • seed: 42
  • data_seed: None
  • bf16: False
  • fp16: False
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: None
  • local_rank: -1
  • ddp_backend: None
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: False
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • 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
  • group_by_length: False
  • 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
  • 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_for_metrics: []
  • eval_do_concat_batches: True
  • auto_find_batch_size: False
  • full_determinism: False
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • 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
  • use_cache: False
  • prompts: None
  • batch_sampler: batch_sampler
  • multi_dataset_batch_sampler: round_robin
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Epoch Step dev_cosine_ndcg@10
1.0 13 0.7188
2.0 26 0.7226
3.0 39 0.7362

Training Time

  • Training: 1.9 minutes

Framework Versions

  • Python: 3.12.13
  • Sentence Transformers: 5.4.1
  • Transformers: 5.0.0
  • PyTorch: 2.10.0+cu128
  • Accelerate: 1.13.0
  • Datasets: 4.0.0
  • Tokenizers: 0.22.2

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",
}

MultipleNegativesRankingLoss

@misc{oord2019representationlearningcontrastivepredictive,
      title={Representation Learning with Contrastive Predictive Coding},
      author={Aaron van den Oord and Yazhe Li and Oriol Vinyals},
      year={2019},
      eprint={1807.03748},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/1807.03748},
}
Downloads last month
130
Safetensors
Model size
0.2B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for 81melody/algerian-law-biencoder-v2

Finetuned
(1)
this model

Papers for 81melody/algerian-law-biencoder-v2

Evaluation results