--- language: ar datasets: - Marefa-NER --- # Tebyan تبيـان ## Marefa Arabic Named Entity Recognition Model ## نموذج المعرفة لتصنيف أجزاء النص --------- **Version**: 1.0.1 **Last Update:** 16-05-2021 ## Model description **Marefa-NER** is a Large Arabic 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 كيف تستخدم النموذج Install transformers AND nltk (python >= 3.6) `$ pip3 install transformers==4.6.0 nltk==3.5 protobuf==3.15.3 torch==1.7.1` > If you are using `Google Colab`, please restart your runtime after installing the packages. ----------- ```python # we need to install NLTK punkt to be used for word tokenization # we need to install NLTK punkt to be used for word tokenization from collections import defaultdict import nltk nltk.download('punkt') from nltk.tokenize import word_tokenize from transformers import AutoTokenizer, AutoModelForTokenClassification from transformers import pipeline # labels list labels_list = ['O', 'B-nationality', 'B-event', 'B-person', 'B-artwork', 'B-location', 'B-product', 'B-organization', 'B-job', 'B-time', 'I-nationality', 'I-event', 'I-person', 'I-artwork', 'I-location', 'I-product', 'I-organization', 'I-job', 'I-time'] # ===== import the model m_name = "marefa-nlp/marefa-ner" tokenizer = AutoTokenizer.from_pretrained(m_name) model = AutoModelForTokenClassification.from_pretrained(m_name) # ===== build the NER pipeline nlp = pipeline("ner", model=model, tokenizer=tokenizer, grouped_entities=True) # ===== extract the entities from a sample text example = 'خاضت القوات المصرية حرب السادس من أكتوبر ضد الجيش الصهيوني عام 1973' # clean the text example = " ".join(word_tokenize(example)) # feed to the NER model to parse ner_results = nlp(example) # we prepared a simple code to generate full entities tokens modified_results = [] for ent in ner_results: ent["entity_group"] = int(ent["entity_group"].lower().replace("label_","")) ent["entity_group"] = labels_list[ent["entity_group"]] if ent["entity_group"] != "O": if "B-" in ent["entity_group"]: ent["entity_group"] = ent["entity_group"].replace("B-","") modified_results.append(ent) elif "I-" in ent["entity_group"]: ## check related entity-group label = ent["entity_group"].replace("I-","") if len(modified_results) > 0 and label == modified_results[-1]["entity_group"]: modified_results[-1]["word"] += f" {ent['word']}" modified_results[-1]["score"] = sum([modified_results[-1]["score"], ent["score"]])/2 modified_results[-1]["end"] = ent["end"] for res in modified_results: print(res["word"], "==>", res["entity_group"]) ##### # القوات المصرية ==> organization # حرب السادس من أكتوبر ==> event # الجيش الصهيوني ==> organization # عام 1973 ==> time #### ``` ## Acknowledgment شكر و تقدير قام بإعداد البيانات التي تم تدريب النموذج عليها, مجموعة من المتطوعين الذين قضوا ساعات يقومون بتنقيح البيانات و مراجعتها - على سيد عبد الحفيظ - إشراف - نرمين محمد عطيه - صلاح خيرالله - احمد علي عبدربه - عمر بن عبد العزيز سليمان - محمد ابراهيم الجمال - عبدالرحمن سلامه خلف - إبراهيم كمال محمد سليمان - حسن مصطفى حسن - أحمد فتحي سيد - عثمان مندو - عارف الشريف - أميرة محمد محمود - حسن سعيد حسن - عبد العزيز علي البغدادي - واثق عبدالملك الشويطر - عمرو رمضان عقل الحفناوي - حسام الدين أحمد على - أسامه أحمد محمد محمد - حاتم محمد المفتي - عبد الله دردير - أدهم البغدادي - أحمد صبري - عبدالوهاب محمد محمد - أحمد محمد عوض