Download models.py from rabietiji1/Islamic-Finance-NLP-Risk-Model: direct link, hf CLI and curl.
- Browser
- Download file 9.76 kB
-
https://huggingface.co/spaces/rabietiji1/Islamic-Finance-NLP-Risk-Model/resolve/main/models.py
- Command line
-
hf download hf://spaces/rabietiji1/Islamic-Finance-NLP-Risk-Model/models.py
-
curl -L -o models.py https://huggingface.co/spaces/rabietiji1/Islamic-Finance-NLP-Risk-Model/resolve/main/models.py
9.76 kB
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| import torch | |
| # ========================================== | |
| # 1. إعداد وتحميل نموذج الذكاء الاصطناعي (AraBERT) | |
| # ========================================== | |
| tokenizer = AutoTokenizer.from_pretrained("aubmindlab/bert-base-arabertv02") | |
| model = AutoModelForSequenceClassification.from_pretrained("aubmindlab/bert-base-arabertv02", num_labels=3) | |
| # ========================================== | |
| # 2. دوال تحليل العقود والنصوص | |
| # ========================================== | |
| def analyze_contract_arabert_deep(contract_text): | |
| """ | |
| تحليل نص العقد البنكي باستخدام القواعد النصية (الكلمات المفتاحية) أولاً، | |
| ثم استخدام نموذج AraBERT للتحليل العميق إذا لم تكن الشروط واضحة. | |
| """ | |
| # أ. فحص الخصائص الربوية الصريحة (القواعد النصية) | |
| riba_explicit = ["فائدة منصوص عليها", "تكلفة ثابتة", "مكافأة ثابتة محددة مسبقاً", "زيادة رأس المال بشكل مستقل"] | |
| fadl_explicit = ["ذهب بذهب", "فضة بفضة", "مثلاً بمثل", "تبادل نفس الطبيعة مع زيادة"] | |
| for phrase in riba_explicit: | |
| if phrase in contract_text: | |
| return { | |
| "risk_level": "عالي جداً (حرام)", | |
| "finding": f"اكتشاف شرط ربوي صريح: ({phrase})", | |
| "explanation": "الربا يُعرّف بأنه فائدة منصوص عليها تعاقدياً وتكلفة ثابتة يتحملها المقترض." | |
| } | |
| for phrase in fadl_explicit: | |
| if phrase in contract_text: | |
| return { | |
| "risk_level": "عالي (ربا الفضل)", | |
| "finding": f"شبهة ربا الفضل: ({phrase})", | |
| "explanation": "يُشترط تكافؤ الكميات وتزامن التبادل لإتمام عملية بيع صحيحة للأشياء من نفس الطبيعة." | |
| } | |
| if "خسارة كلية" in contract_text or "تقاسم حقيقي" in contract_text or "حصص متغيرة" in contract_text: | |
| return { | |
| "risk_level": "منخفض (مباح/مشاركة)", | |
| "finding": "توافق مع نظام المشاركة (PLS)", | |
| "explanation": "هناك تقاسم حقيقي للمخاطر بين الشركاء وهو متوافق مع الشريعة." | |
| } | |
| # ب. التحليل العميق باستخدام الذكاء الاصطناعي (AraBERT) للحالات غير الواضحة | |
| inputs = tokenizer(contract_text, return_tensors="pt", truncation=True, padding=True, max_length=512) | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| predicted_class = torch.argmax(outputs.logits, dim=-1).item() | |
| classes = ["عقد صحيح (سلم/استصناع)", "شبهة غرر مرتفعة", "معاملة محظورة (عينة/تورق/ربا)"] | |
| return { | |
| "risk_level": "تقييم الذكاء الاصطناعي", | |
| "finding": classes[predicted_class], | |
| "explanation": "تم تصنيف العقد بناءً على فهم النموذج العميق لسياق المعاملة المكتوبة." | |
| } | |
| # ========================================== | |
| # 3. دوال الاقتصاد الكلي والقيمة المضافة | |
| # ========================================== | |
| def calculate_value_added(transaction_type, Q, P1, P2): | |
| """ | |
| حساب القيمة المضافة للاقتصاد الكلي بناءً على نوع العقد. | |
| """ | |
| result = {"va": 0, "status": "", "message": ""} | |
| if transaction_type == "taqsit": | |
| va = 2 * Q * (P2 - P1) | |
| result["va"] = round(va, 2) | |
| result["status"] = "موجبة (محفزة للنمو)" | |
| result["message"] = "هذه المعاملة تخلق قيمة مضافة إيجابية للاقتصاد، مما يسهل التعامل التجاري." | |
| elif transaction_type == "eina": | |
| va = Q * (P2 - P1) | |
| result["va"] = round(va, 2) | |
| result["status"] = "سالبة (تدهور اقتصادي)" | |
| result["message"] = "معاملة محظورة لأنها تؤدي إلى تدهور وتراجع النمو الاقتصادي وتقتطع من القيمة المضافة." | |
| else: | |
| result["message"] = "نوع المعاملة غير معروف." | |
| return result | |
| def calculate_riba_value_added(is_same_nature, q1, q2, p1, p2, is_delayed): | |
| """ | |
| النمذجة الرياضية لاكتشاف الربا (الفضل والنسيئة) وحساب أثره على القيمة المضافة. | |
| """ | |
| result = {"va": 0, "status": "", "type": "", "message": ""} | |
| # حالة ربا الفضل | |
| if is_same_nature and q1 != q2: | |
| va = -p1 * (q1 + q2) | |
| result["va"] = round(va, 2) | |
| result["status"] = "معاملة محظورة" | |
| result["type"] = "شبهة ربا الفضل" | |
| result["message"] = "تبادل شيئين من نفس الطبيعة بكميات مختلفة يقتطع قيماً من الاقتصاد." | |
| # حالة ربا النسيئة | |
| elif not is_same_nature and q1 == q2 and is_delayed: | |
| va = -q1 * (p1 + p2) | |
| result["va"] = round(va, 2) | |
| result["status"] = "معاملة محظورة" | |
| result["type"] = "شبهة ربا النسيئة" | |
| result["message"] = "زيادة الثمن مقابل الأجل دون مبرر حقيقي يطرح قيماً من الاقتصاد." | |
| # حالة القرض الحسن | |
| elif is_same_nature and q1 == q2 and is_delayed: | |
| va = 9 * q1 | |
| result["va"] = round(va, 2) | |
| result["status"] = "معاملة مباحة" | |
| result["type"] = "قرض حسن (بدون فائدة)" | |
| result["message"] = "المعاملة تساهم في التكافل الاجتماعي وتضيف قيمة إيجابية غير مباشرة للاقتصاد." | |
| else: | |
| result["status"] = "يتطلب مراجعة" | |
| result["message"] = "المعاملة تتطلب معطيات إضافية لتصنيفها بدقة." | |
| return result | |
| # ========================================== | |
| # 4. دوال التكافل والزكاة | |
| # ========================================== | |
| def simulate_zakat_impact(total_wealth_rich, poor_count, years=5, growth_rate=0.05, zakat_rate=0.025): | |
| """ | |
| محاكاة أثر الزكاة على الدخل الفردي للفقراء وتوزيع الثروة عبر عدة سنوات. | |
| """ | |
| results = [] | |
| current_wealth = total_wealth_rich | |
| if poor_count <= 0: | |
| return results # تجنب القسمة على صفر | |
| for year in range(1, years + 1): | |
| zakat_amount = current_wealth * zakat_rate | |
| individual_zakat_share = zakat_amount / poor_count | |
| results.append({ | |
| "year": year, | |
| "rich_wealth": round(current_wealth, 2), | |
| "zakat_fund": round(zakat_amount, 2), | |
| "individual_share": round(individual_zakat_share, 2) | |
| }) | |
| current_wealth = current_wealth * (1 + growth_rate) | |
| return results | |
| # أضف هذا الكود إلى ملف models.py | |
| def simulate_zakat_impact(initial_wealth, poor_count, initial_poor_income, growth_rate=0.05, zakat_rate=0.025, years=5): | |
| """ | |
| نموذج يحاكي أثر الزكاة على الفقر وتحفيز الاقتصاد عبر عدة سنوات. | |
| يعتمد على معدل نمو سنوي ونسبة زكاة ثابتة[cite: 1]. | |
| """ | |
| results = [] | |
| current_wealth = initial_wealth | |
| # إجمالي الدخل الأولي للفقراء قبل الزكاة | |
| base_poor_income_total = poor_count * initial_poor_income | |
| for year in range(1, years + 1): | |
| # حساب مقدار الزكاة الواجبة[cite: 1] | |
| zakat_due = current_wealth * zakat_rate | |
| # حساب إجمالي دخل الفقراء بعد استلام الزكاة[cite: 1] | |
| total_poor_income_after = base_poor_income_total + zakat_due | |
| # متوسط دخل الفرد الفقير بعد الزكاة[cite: 1] | |
| avg_poor_income = total_poor_income_after / poor_count | |
| results.append({ | |
| "year": year, | |
| "wealth": round(current_wealth, 2), | |
| "zakat_due": round(zakat_due, 2), | |
| "total_poor_income": round(total_poor_income_after, 2), | |
| "avg_poor_income": round(avg_poor_income, 2) | |
| }) | |
| # تطبيق معدل النمو الاقتصادي للسنة القادمة على ثروة الأغنياء ودخل الفقراء الأساسي[cite: 1] | |
| current_wealth *= (1 + growth_rate) | |
| base_poor_income_total *= (1 + growth_rate) | |
| return results | |
| def compare_financing_systems(P1, P2, revenue, cost, phi): | |
| """ | |
| مقارنة بين نظام سعر الفائدة ونظام المشاركة (PLS)[cite: 1]. | |
| """ | |
| # نظام سعر الفائدة: إجمالي الربح = مبلغ السداد - مبلغ القرض[cite: 1] | |
| interest_profit = P2 - P1 | |
| # نظام المشاركة (PPP): دخل الفترة = نسبة المشاركة * (إجمالي الإيرادات - إجمالي التكاليف)[cite: 1] | |
| pls_profit = phi * (revenue - cost) | |
| return { | |
| "interest_profit": round(interest_profit, 2), | |
| "pls_profit": round(pls_profit, 2) | |
| } |