NYUAD-ComNets commited on
Commit
7d4faf6
·
verified ·
1 Parent(s): 2e84634

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +99 -1
README.md CHANGED
@@ -9,7 +9,105 @@ tags: []
9
 
10
  ``` python
11
 
12
- from PIL import Image
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
 
15
  ```
 
9
 
10
  ``` python
11
 
12
+
13
+ import os
14
+ import torch
15
+ import pandas as pd
16
+ from datasets import Dataset
17
+ from trl import SFTTrainer
18
+ from huggingface_hub import login
19
+ import re
20
+ from peft import LoraConfig, get_peft_model
21
+ import numpy as np
22
+ from transformers import (
23
+ AutoTokenizer,
24
+ Llama4ForConditionalGeneration,
25
+ BitsAndBytesConfig,
26
+ TrainingArguments,
27
+ DataCollatorForLanguageModeling,
28
+ AutoModelForCausalLM
29
+ )
30
+
31
+ #should install transformers 4.51.3
32
+
33
+
34
+ hf_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxe"
35
+ login(hf_token)
36
+
37
+
38
+
39
+ model_id = "NYUAD-ComNets/NYUAD_Llama4_Inheritance_Solver2"
40
+
41
+
42
+ # Load tokenizer and model
43
+ tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
44
+ model = Llama4ForConditionalGeneration.from_pretrained(
45
+ model_id,
46
+ device_map="auto",
47
+ torch_dtype=torch.bfloat16,
48
+ trust_remote_code=True
49
+ )
50
+
51
+ # Template for inference prompt
52
+
53
+ inference_prompt_template = """
54
+ أنت خبير في علم المواريث في الشريعة الإسلامية. استخدم التفكير خطوة بخطوة لتحديد أنصبة الورثة. ابدأ دائماً بذكر الورثة، وتحديد نوعهم (مثل: زوج، ابن، أخ)، ثم تحقق من وجود فرع وارث أو أصل وارث. بعد ذلك، طبّق الفرائض المقدّرة ثم قواعد التعصيب إذا وُجد فائض في التركة.
55
+
56
+ اتبع الخطوات التالية:
57
+
58
+ اذكر الورثة.
59
+
60
+ حدد الفروض المقدّرة لكل وارث.
61
+
62
+ افحص وجود الحجب والتقديم.
63
+
64
+ وزّع الباقي إن وجد بالتعصيب.
65
+
66
+ تحقق من أن مجموع الأنصبة يساوي كامل التركة.
67
+
68
+ Then output your final answer using a single word only from this list A, B, C, D, E, F.
69
+ ### Context:
70
+ {}
71
+
72
+ ### Response:
73
+ {}"""
74
+
75
+
76
+
77
+ def generate_answer(context):
78
+ prompt = inference_prompt_template.format(context, "")
79
+ inputs = tokenizer(prompt + tokenizer.eos_token, return_tensors="pt").to("cuda")
80
+
81
+ with torch.no_grad():
82
+ outputs = model.generate(
83
+ input_ids=inputs["input_ids"],
84
+ attention_mask=inputs["attention_mask"],
85
+ max_new_tokens=10,
86
+ eos_token_id=tokenizer.eos_token_id,
87
+ use_cache=True,
88
+ temperature =0.1,
89
+ top_p=1
90
+ )
91
+
92
+ response = tokenizer.batch_decode(outputs, skip_special_tokens=True)
93
+ print(response)
94
+
95
+ response = response[0].split("### Response:")[1][-1]
96
+
97
+
98
+
99
+ df=pd.read_csv('/path_to/islamic_inheritance_problem.csv.csv')
100
+ for k,o1,o2,o3,o4,o5,o6 in zip(df.question.values
101
+ ,df.option1.values,df.option2.values
102
+ ,df.option3.values,df.option4.values
103
+ ,df.option5.values,df.option6.values):
104
+
105
+
106
+ example = k+' '+o1+' '+o2+' '+o3+' '+o4+' '+o5+' '+o6
107
+
108
+ predicted_label = generate_answer(example)
109
+ print("Predicted:", predicted_label)
110
+
111
 
112
 
113
  ```