Text Generation
PEFT
Safetensors
Arabic
arabic
relation-extraction
qlora
bitsandbytes
multiple-choice
conversational
Instructions to use U4RASD/DRU-RE-Yehia with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use U4RASD/DRU-RE-Yehia with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Navid-AI/Yehia-7B-preview") model = PeftModel.from_pretrained(base_model, "U4RASD/DRU-RE-Yehia") - Notebooks
- Google Colab
- Kaggle
| # DRU-RE-Yehia Full-Pipeline Blind-Test Package | |
| This package runs the public `U4RASD/DRU-RE-Yehia` adapter as a **span-free full pipeline** over a blind `test.jsonl`. | |
| The released Yehia model itself is a relation classifier. It expects one exact directed entity pair and two coarse types. This package supplies those missing inputs by enumerating every mention occurrence and running `U4RASD/TypePredictor`. | |
| ## What it does | |
| For each test row: | |
| 1. Read `sentence`, `subject`, `object`, and `triple_id`. | |
| 2. Ignore any spans or types supplied in the row. | |
| 3. Find every occurrence of the subject string and object string. | |
| 4. Predict one of the 21 Wojood coarse types for every unique occurrence. | |
| 5. Build every directed subject-occurrence × object-occurrence candidate. | |
| 6. Download the public `U4RASD/DRU-RE-Yehia` release. | |
| 7. Run the release's own `prepare_input.py`, which preserves: | |
| - `[الأول]` and `[الثاني]` directional markers; | |
| - Arabic type names; | |
| - ontology-compatible relation options; | |
| - Arabic relation templates; | |
| - deterministic row-local option shuffling; | |
| - prompt version `yehia_re_ar_v3_one_token_choice`; | |
| - `لا توجد علاقة` as the final option. | |
| 8. Load the gated pinned Yehia 7B base in BF16 with vLLM and attach the public best QLoRA adapter. | |
| 9. Score only the valid one-token Arabic option codes. | |
| 10. Apply the released frozen no-relation logit bias. | |
| 11. Aggregate candidate decisions. | |
| 12. Create and validate `/workspace/submission.zip`. | |
| No free-text generation or phrase parsing is used. | |
| ## RunPod layout | |
| Put these two files in `/workspace`: | |
| ```text | |
| /workspace/ | |
| ├── DRU_RE_Yehia_FullPipeline_Test.zip | |
| └── test.jsonl | |
| ``` | |
| Then run: | |
| ```bash | |
| cd /workspace | |
| unzip DRU_RE_Yehia_FullPipeline_Test.zip | |
| cd DRU_RE_Yehia_FullPipeline_Test | |
| cp .env.template .env | |
| nano .env | |
| ``` | |
| Set: | |
| ```text | |
| HF_TOKENONE=... | |
| ``` | |
| `HF_TOKENONE` must have access to the gated `Navid-AI/Yehia-7B-preview` model. | |
| Then: | |
| ```bash | |
| bash setup_env.sh | |
| bash run_test.sh | |
| ``` | |
| The final artifact is: | |
| ```text | |
| /workspace/submission.zip | |
| ``` | |
| The ZIP contains exactly: | |
| ```text | |
| predictions.txt | |
| ``` | |
| Each line is: | |
| ```text | |
| triple_id<TAB>relation | |
| ``` | |
| `no_relation` is converted to the competition spelling `no-relation`. | |
| ## Input schema | |
| The script accepts common aliases, but the recommended row is: | |
| ```json | |
| { | |
| "triple_id": "123", | |
| "sentence_id": "456", | |
| "sentence": "يعمل أحمد في جامعة بيرزيت.", | |
| "subject": "أحمد", | |
| "object": "جامعة بيرزيت" | |
| } | |
| ``` | |
| `subject` and `object` can also be small objects containing a `text`, `mention`, `surface`, or `name` field. | |
| ## Input-only inspection | |
| Before downloading models: | |
| ```bash | |
| bash run_test.sh --validate-input-only | |
| ``` | |
| This creates: | |
| ```text | |
| /workspace/yehia_test_output/input_occurrence_audit.jsonl | |
| ``` | |
| and prints the candidate-count distribution. | |
| ## Candidate aggregation | |
| Primary default: | |
| ```text | |
| AGGREGATION_METHOD=majority_vote | |
| ``` | |
| A row is positive when at least half of its candidate pairs choose a positive relation. Positive candidates vote for the relation. Ties are broken by summed row-local probability, then score margin, then canonical relation order. | |
| The same model run also creates alternatives unless disabled: | |
| ```text | |
| submission_majority_vote.zip | |
| submission_soft_pool.zip | |
| submission_max_positive.zip | |
| submission_top_confidence.zip | |
| ``` | |
| The primary `/workspace/submission.zip` uses the method selected in `.env`. | |
| ### `soft_pool` | |
| Averages candidate option probabilities, gates on average positive probability, and selects the highest pooled positive relation. | |
| ### `max_positive` | |
| Uses the highest-confidence candidate that selected a positive relation. | |
| ### `top_confidence` | |
| Uses the most confident candidate decision, including `no_relation`. | |
| No alternative method reruns the models. | |
| ## Output directory | |
| The default directory is: | |
| ```text | |
| /workspace/yehia_test_output/ | |
| ``` | |
| Important files: | |
| ```text | |
| input_occurrence_audit.jsonl | |
| type_predictions.jsonl | |
| candidate_inputs_raw.jsonl | |
| candidate_inputs_prepared.jsonl | |
| candidate_predictions.jsonl | |
| row_predictions_debug.jsonl | |
| predictions_primary.jsonl | |
| predictions.txt | |
| submission.zip | |
| run_manifest.json | |
| ``` | |
| `run_manifest.json` records the resolved TypePredictor and adapter commits, pinned base revision, prompt version, frozen bias, counts, and SHA-256 hashes. | |
| ## GPU notes | |
| The pipeline is sequential: | |
| 1. TypePredictor is loaded and run. | |
| 2. It is deleted and CUDA cache is cleared. | |
| 3. Yehia 7B is loaded by vLLM in BF16 and the LoRA is applied by vLLM. | |
| Defaults target an NVIDIA L40/L40S 48 GB: | |
| ```text | |
| TYPE_BATCH_SIZE=64 | |
| VLLM_MAX_NUM_SEQS=256 | |
| VLLM_REQUEST_BATCH_SIZE=512 | |
| ``` | |
| Reduce `VLLM_MAX_NUM_SEQS` or `VLLM_GPU_MEMORY_UTILIZATION` if engine startup runs out of CUDA memory. | |
| ## Mention matching | |
| Exact matching is tried first. A conservative fallback handles: | |
| - outer whitespace; | |
| - surrounding punctuation; | |
| - Arabic alef variants; | |
| - alif maqsura/yaa normalization; | |
| - diacritics and tatweel. | |
| The actual sentence slice at each recovered span is sent to the released prompt builder, so its span validation remains strict. | |
| Rows with no recoverable candidates default to `no_relation` and are recorded in the audit/debug files. Set: | |
| ```text | |
| FAIL_FAST=true | |
| ``` | |
| to stop instead. | |
| ## Reuse downloaded models | |
| The package stores models under: | |
| ```text | |
| /workspace/models/ | |
| ├── DRU-RE-Yehia/ | |
| └── Yehia-7B-preview/ | |
| ``` | |
| Later runs reuse a snapshot only when its stored revision marker matches the requested revision. | |
| ## Exact released behavior preserved | |
| The package deliberately uses the model repository's own prompt-preparation code rather than reimplementing the prompt. It also reproduces the released constrained decoder: | |
| - native Yehia chat template exactly once; | |
| - next-token logits after the answer prefix; | |
| - only row-local code tokens considered; | |
| - released no-relation bias applied to the last code; | |
| - argmax mapped through that row's option arrays. | |
| The QLoRA adapter is not a standalone model. Access to the pinned gated base is required. Transformers is used only for the custom TypePredictor encoder and deterministic tokenization/chat templating; Yehia causal-LM inference runs through vLLM. | |