File size: 10,094 Bytes
5fb9d14 7c71c1b 5e0f4a2 7c71c1b 80c9ed0 8845411 5fb9d14 9715002 5fb9d14 8845411 5e0f4a2 8845411 5e0f4a2 7c71c1b b072ea0 7c71c1b 3ad8179 5fb9d14 3ad8179 98ce57c 7c71c1b ed4077f 7c71c1b ed4077f 7c71c1b 5e0f4a2 98ce57c 5e0f4a2 80c9ed0 5e0f4a2 ed4077f 5e0f4a2 80c9ed0 5e0f4a2 98ce57c 5e0f4a2 ed4077f 5e0f4a2 ed4077f 5e0f4a2 ed4077f 5e0f4a2 ed4077f 5e0f4a2 98ce57c 976743f 5e0f4a2 6f43d50 5e0f4a2 98ce57c ed4077f 98ce57c eb7765b 5e0f4a2 ed4077f 5e0f4a2 ed4077f 5e0f4a2 80c9ed0 976743f 5fb9d14 80c9ed0 8845411 80c9ed0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
---
language: ar
datasets:
- Marefa-NER
widget:
- text: "في استاد القاهرة، بدأ حفل افتتاح بطولة كأس الأمم الأفريقية بحضور رئيس الجمهورية و رئيس الاتحاد الدولي لكرة القدم"
---
# Tebyan تبيـان
## Marefa Arabic Named Entity Recognition Model
## نموذج المعرفة لتصنيف أجزاء النص
<p align="center">
<img src="https://huggingface.co/marefa-nlp/marefa-ner/resolve/main/assets/marefa-tebyan-banner.png" alt="Marfa Arabic NER Model" width="600"/>
</p?
---------
**Version**: 1.3
**Last Update:** 3-12-2021
## Model description
**Marefa-NER** is a Large Arabic Named Entity Recognition (NER) model built on a completely new dataset and targets to extract up to 9 different types of entities
```
Person, Location, Organization, Nationality, Job, Product, Event, Time, Art-Work
```
نموذج المعرفة لتصنيف أجزاء النص. نموذج جديد كليا من حيث البيانات المستخدمة في تدريب النموذج.
كذلك يستهدف النموذج تصنيف حتى 9 أنواع مختلفة من أجزاء النص
```
شخص - مكان - منظمة - جنسية - وظيفة - منتج - حدث - توقيت - عمل إبداعي
```
## How to use كيف تستخدم النموذج
*You can test the model quickly by checking this [Colab notebook](https://colab.research.google.com/drive/1OGp9Wgm-oBM5BBhTLx6Qow4dNRSJZ-F5?usp=sharing)*
----
Install the following Python packages
`$ pip3 install transformers==4.8.0 nltk==3.5 protobuf==3.15.3 torch==1.9.0 `
> If you are using `Google Colab`, please restart your runtime after installing the packages.
-----------
```python
from transformers import AutoTokenizer, AutoModelForTokenClassification
import torch
import numpy as np
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
custom_labels = ["O", "B-job", "I-job", "B-nationality", "B-person", "I-person", "B-location","B-time", "I-time", "B-event", "I-event", "B-organization", "I-organization", "I-location", "I-nationality", "B-product", "I-product", "B-artwork", "I-artwork"]
def _extract_ner(text: str, model: AutoModelForTokenClassification,
tokenizer: AutoTokenizer, start_token: str="▁"):
tokenized_sentence = tokenizer([text], padding=True, truncation=True, return_tensors="pt")
tokenized_sentences = tokenized_sentence['input_ids'].numpy()
with torch.no_grad():
output = model(**tokenized_sentence)
last_hidden_states = output[0].numpy()
label_indices = np.argmax(last_hidden_states[0], axis=1)
tokens = tokenizer.convert_ids_to_tokens(tokenized_sentences[0])
special_tags = set(tokenizer.special_tokens_map.values())
grouped_tokens = []
for token, label_idx in zip(tokens, label_indices):
if token not in special_tags:
if not token.startswith(start_token) and len(token.replace(start_token,"").strip()) > 0:
grouped_tokens[-1]["token"] += token
else:
grouped_tokens.append({"token": token, "label": custom_labels[label_idx]})
# extract entities
ents = []
prev_label = "O"
for token in grouped_tokens:
label = token["label"].replace("I-","").replace("B-","")
if token["label"] != "O":
if label != prev_label:
ents.append({"token": [token["token"]], "label": label})
else:
ents[-1]["token"].append(token["token"])
prev_label = label
# group tokens
ents = [{"token": "".join(rec["token"]).replace(start_token," ").strip(), "label": rec["label"]} for rec in ents ]
return ents
model_cp = "marefa-nlp/marefa-ner"
tokenizer = AutoTokenizer.from_pretrained(model_cp)
model = AutoModelForTokenClassification.from_pretrained(model_cp, num_labels=len(custom_labels))
samples = [
"تلقى تعليمه في الكتاب ثم انضم الى الأزهر عام 1873م. تعلم على يد السيد جمال الدين الأفغاني والشيخ محمد عبده",
"بعد عودته إلى القاهرة، التحق نجيب الريحاني فرقة جورج أبيض، الذي كان قد ضمَّ - قُبيل ذلك - فرقته إلى فرقة سلامة حجازي . و منها ذاع صيته",
"في استاد القاهرة، قام حفل افتتاح بطولة كأس الأمم الأفريقية بحضور رئيس الجمهورية و رئيس الاتحاد الدولي لكرة القدم",
"من فضلك أرسل هذا البريد الى صديقي جلال الدين في تمام الساعة الخامسة صباحا في يوم الثلاثاء القادم",
"امبارح اتفرجت على مباراة مانشستر يونايتد مع ريال مدريد في غياب الدون كرستيانو رونالدو",
"لا تنسى تصحيني الساعة سبعة, و ضيف في الجدول اني احضر مباراة نادي النصر غدا",
]
# [optional]
samples = [ " ".join(word_tokenize(sample.strip())) for sample in samples if sample.strip() != "" ]
for sample in samples:
ents = _extract_ner(text=sample, model=model, tokenizer=tokenizer, start_token="▁")
print(sample)
for ent in ents:
print("\t",ent["token"],"==>",ent["label"])
print("========\n")
```
Output
```
تلقى تعليمه في الكتاب ثم انضم الى الأزهر عام 1873م . تعلم على يد السيد جمال الدين الأفغاني والشيخ محمد عبده
الأزهر ==> organization
عام 1873م ==> time
السيد جمال الدين الأفغاني ==> person
محمد عبده ==> person
========
بعد عودته إلى القاهرة، التحق نجيب الريحاني فرقة جورج أبيض، الذي كان قد ضمَّ - قُبيل ذلك - فرقته إلى فرقة سلامة حجازي . و منها ذاع صيته
القاهرة، ==> location
نجيب الريحاني ==> person
فرقة جورج أبيض، ==> organization
فرقة سلامة حجازي ==> organization
========
في استاد القاهرة، قام حفل افتتاح بطولة كأس الأمم الأفريقية بحضور رئيس الجمهورية و رئيس الاتحاد الدولي لكرة القدم
استاد القاهرة، ==> location
بطولة كأس الأمم الأفريقية ==> event
رئيس الجمهورية ==> job
رئيس ==> job
الاتحاد الدولي لكرة القدم ==> organization
========
من فضلك أرسل هذا البريد الى صديقي جلال الدين في تمام الساعة الخامسة صباحا في يوم الثلاثاء القادم
جلال الدين ==> person
الساعة الخامسة صباحا ==> time
يوم الثلاثاء القادم ==> time
========
امبارح اتفرجت على مباراة مانشستر يونايتد مع ريال مدريد في غياب الدون كرستيانو رونالدو
مانشستر يونايتد ==> organization
ريال مدريد ==> organization
كرستيانو رونالدو ==> person
========
لا تنسى تصحيني الساعة سبعة , و ضيف في الجدول اني احضر مباراة نادي النصر غدا
الساعة سبعة ==> time
نادي النصر ==> organization
غدا ==> time
========
```
## Fine-Tuning
Check this [notebook](https://colab.research.google.com/drive/1WUYrnmDFFEItqGMvbyjqZEJJqwU7xQR-?usp=sharing) to fine-tune the NER model
## Evaluation
We tested the model agains a test set of 1959 sentences. The results is in the follwing table
| type | f1-score | precision | recall | support |
|:-------------|-----------:|------------:|---------:|----------:|
| person | 0.93298 | 0.931479 | 0.934487 | 4335 |
| location | 0.891537 | 0.896926 | 0.886212 | 4939 |
| time | 0.873003 | 0.876087 | 0.869941 | 1853 |
| nationality | 0.871246 | 0.843153 | 0.901277 | 2350 |
| job | 0.837656 | 0.79912 | 0.880097 | 2477 |
| organization | 0.781317 | 0.773328 | 0.789474 | 2299 |
| event | 0.686695 | 0.733945 | 0.645161 | 744 |
| artwork | 0.653552 | 0.678005 | 0.630802 | 474 |
| product | 0.625483 | 0.553531 | 0.718935 | 338 |
| **weighted avg** | 0.859008 | 0.852365 | 0.86703 | 19809 |
| **micro avg** | 0.858771 | 0.850669 | 0.86703 | 19809 |
| **macro avg** | 0.79483 | 0.787286 | 0.806265 | 19809 |
## Acknowledgment شكر و تقدير
قام بإعداد البيانات التي تم تدريب النموذج عليها, مجموعة من المتطوعين الذين قضوا ساعات يقومون بتنقيح البيانات و مراجعتها
- على سيد عبد الحفيظ - إشراف
- نرمين محمد عطيه
- صلاح خيرالله
- احمد علي عبدربه
- عمر بن عبد العزيز سليمان
- محمد ابراهيم الجمال
- عبدالرحمن سلامه خلف
- إبراهيم كمال محمد سليمان
- حسن مصطفى حسن
- أحمد فتحي سيد
- عثمان مندو
- عارف الشريف
- أميرة محمد محمود
- حسن سعيد حسن
- عبد العزيز علي البغدادي
- واثق عبدالملك الشويطر
- عمرو رمضان عقل الحفناوي
- حسام الدين أحمد على
- أسامه أحمد محمد محمد
- حاتم محمد المفتي
- عبد الله دردير
- أدهم البغدادي
- أحمد صبري
- عبدالوهاب محمد محمد
- أحمد محمد عوض |