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 شكر و تقدير

قام بإعداد البيانات التي تم تدريب النموذج عليها, مجموعة من المتطوعين الذين قضوا ساعات يقومون بتنقيح البيانات و مراجعتها

- على سيد عبد الحفيظ - إشراف
- نرمين محمد عطيه 
- صلاح خيرالله
- احمد علي عبدربه
- عمر بن عبد العزيز سليمان
- محمد ابراهيم الجمال
- عبدالرحمن سلامه خلف
- إبراهيم كمال محمد سليمان
- حسن مصطفى حسن 
- أحمد فتحي سيد
- عثمان مندو
- عارف الشريف
- أميرة محمد محمود
- حسن سعيد حسن
- عبد العزيز علي البغدادي
- واثق عبدالملك الشويطر
- عمرو رمضان عقل الحفناوي
- حسام الدين أحمد على
- أسامه أحمد محمد محمد
- حاتم محمد المفتي
- عبد الله دردير
- أدهم البغدادي
- أحمد صبري
- عبدالوهاب محمد محمد
- أحمد محمد عوض