# Arabic NER Model using Flair Embeddings
Training was conducted over 94 epochs, using a linear decaying learning rate of 2e-05, starting from 0.225 and a batch size of 32 with GloVe and Flair forward and backward embeddings.


## Original Datasets:
- [AQMAR](http://www.cs.cmu.edu/~ark/ArabicNER/)
- [ANERcorp](http://curtis.ml.cmu.edu/w/courses/index.php/ANERcorp)

## Results:
- F1-score (micro) 0.8666
- F1-score (macro) 0.8488

|      | Named Entity Type    | True Posititves  | False Positives | False Negatives | Precision | Recall | class-F1 |
|------|-|----|----|----|-----------|--------|----------|
| LOC  | Location| 539 | 51 | 68 | 0.9136    | 0.8880 | 0.9006   |
| MISC | Miscellaneous|408 | 57 | 89 | 0.8774    | 0.8209 | 0.8482   |
| ORG  | Organisation|167 | 43 | 64 | 0.7952    | 0.7229 | 0.7574   |
| PER  | Person (no title)|501 | 65 | 60 | 0.8852    | 0.8930 | 0.8891   |

---

# Usage
```python
from flair.data import Sentence
from flair.models import SequenceTagger
import pyarabic.araby as araby
from icecream import ic

tagger = SequenceTagger.load("julien-c/flair-ner")
arTagger = SequenceTagger.load('megantosh/flair-arabic-multi-ner')

sentence = Sentence('George Washington went to Washington .')
arSentence = Sentence('عمرو عادلي أستاذ للاقتصاد السياسي المساعد في الجامعة الأمريكية  بالقاهرة .')


# predict NER tags
tagger.predict(sentence)
arTagger.predict(arSentence)

# print sentence with predicted tags
ic(sentence.to_tagged_string)
ic(arSentence.to_tagged_string)

```

# Example
```bash
2021-07-07 14:30:59,649 loading file /Users/mega/.flair/models/flair-ner/f22eb997f66ae2eacad974121069abaefca5fe85fce71b49e527420ff45b9283.941c7c30b38aef8d8a4eb5c1b6dd7fe8583ff723fef457382589ad6a4e859cfc
2021-07-07 14:31:04,654 loading file /Users/mega/.flair/models/flair-arabic-multi-ner/c7af7ddef4fdcc681fcbe1f37719348afd2862b12aa1cfd4f3b93bd2d77282c7.242d030cb106124f7f9f6a88fb9af8e390f581d42eeca013367a86d585ee6dd6
ic| sentence.to_tagged_string: <bound method Sentence.to_tagged_string of Sentence: "George Washington went to Washington ."   [− Tokens: 6  − Token-Labels: "George <B-PER> Washington <E-PER> went to Washington <S-LOC> ."]>
ic| arSentence.to_tagged_string: <bound method Sentence.to_tagged_string of Sentence: "عمرو عادلي أستاذ للاقتصاد السياسي المساعد في الجامعة الأمريكية بالقاهرة ."   [− Tokens: 11  − Token-Labels: "عمرو <B-PER> عادلي <I-PER> أستاذ للاقتصاد السياسي المساعد في الجامعة <B-ORG> الأمريكية <I-ORG> بالقاهرة <B-LOC> ."]>
ic| entity: <PER-span (1,2): "George Washington">
ic| entity: <LOC-span (5): "Washington">
ic| entity: <PER-span (1,2): "عمرو عادلي">
ic| entity: <ORG-span (8,9): "الجامعة الأمريكية">
ic| entity: <LOC-span (10): "بالقاهرة">
ic| sentence.to_dict(tag_type='ner'): 
{"text":"عمرو عادلي أستاذ للاقتصاد السياسي المساعد في الجامعة الأمريكية  بالقاهرة .",
"labels":[],
{"entities":[{{{
               "text":"عمرو عادلي",
               "start_pos":0,
               "end_pos":10,
               "labels":[PER (0.9826)]},
            {"text":"الجامعة الأمريكية",
               "start_pos":45,
               "end_pos":62,
               "labels":[ORG (0.7679)]},
            {"text":"بالقاهرة",
               "start_pos":64,
               "end_pos":72,
               "labels":[LOC (0.8079)]}]}
"text":"George Washington went to Washington .",
"labels":[],
"entities":[{
           {"text":"George Washington",
            "start_pos":0,
            "end_pos":17,
            "labels":[PER (0.9968)]},
           {"text":"Washington""start_pos":26,
            "end_pos":36,
            "labels":[LOC (0.9994)]}}]}
```

# Model Configuration
```python
SequenceTagger(
  (embeddings): StackedEmbeddings(
    (list_embedding_0): WordEmbeddings('glove')
    (list_embedding_1): FlairEmbeddings(
      (lm): LanguageModel(
        (drop): Dropout(p=0.1, inplace=False)
        (encoder): Embedding(7125, 100)
        (rnn): LSTM(100, 2048)
        (decoder): Linear(in_features=2048, out_features=7125, bias=True)
      )
    )
    (list_embedding_2): FlairEmbeddings(
      (lm): LanguageModel(
        (drop): Dropout(p=0.1, inplace=False)
        (encoder): Embedding(7125, 100)
        (rnn): LSTM(100, 2048)
        (decoder): Linear(in_features=2048, out_features=7125, bias=True)
      )
    )
  )
  (word_dropout): WordDropout(p=0.05)
  (locked_dropout): LockedDropout(p=0.5)
  (embedding2nn): Linear(in_features=4196, out_features=4196, bias=True)
  (rnn): LSTM(4196, 256, batch_first=True, bidirectional=True)
  (linear): Linear(in_features=512, out_features=15, bias=True)
  (beta): 1.0
  (weights): None
  (weight_tensor) None
 ```
 Due to the right-to-left in left-to-right context, some formatting errors might occur. and your code might appear like [this](https://ibb.co/ky20Lnq), (link accessed on 2020-10-27) 
 
 # Citation
*if you use this model, please consider citing [this work](https://www.researchgate.net/publication/358956953_Sequence_Labeling_Architectures_in_Diglossia_-_a_case_study_of_Arabic_and_its_dialects):*
```latex
@unpublished{MMHU21
author = "M. Megahed",
title = "Sequence Labeling Architectures in Diglossia",
year = {2021},
doi = "10.13140/RG.2.2.34961.10084"
url = {https://www.researchgate.net/publication/358956953_Sequence_Labeling_Architectures_in_Diglossia_-_a_case_study_of_Arabic_and_its_dialects}
}
```
{"language": ["ar", "en"], "license": "apache-2.0", "tags": ["flair", "Text Classification", "token-classification", "sequence-tagger-model"], "datasets": ["AQMAR", "ANERcorp"], "metrics": ["f1"], "thumbnail": "https://www.informatik.hu-berlin.de/en/forschung-en/gebiete/ml-en/resolveuid/a6f82e0d7fa446a59c902cac4cafa9cb/@@images/image/preview", "widget": [{"text": "\u0623\u0639\u0631\u0641 \u0643\u0644 \u0634\u064a\u0621 \u0639\u0646 \u062c\u064a\u062c\u064a"}, {"text": "\u062a\u0631\u062a\u0642\u064a \u0634\u0631\u064a\u062d\u0629 M1 Pro \u0648\u0634\u0631\u064a\u062d\u0629 M1 Max \u0628\u0628\u0646\u064a\u0629 \u0634\u0631\u064a\u062d\u0629 M1 \u0627\u0644\u0645\u0630\u0647\u0644\u0629 \u0625\u0644\u0649 \u0645\u0633\u062a\u0648\u064a\u0627\u062a \u062c\u062f\u064a\u062f\u0629\u060c \u0625\u0630 \u062a\u0623\u062a\u064a\u0627\u0646 \u0644\u0644\u0645\u0631\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0628\u0628\u0646\u064a\u0629 \u0646\u0638\u0627\u0645 \u0645\u062a\u0643\u0627\u0645\u0644 \u0641\u064a \u0634\u0631\u064a\u062d\u0629 (SoC) \u0625\u0644\u0649 \u062c\u0647\u0627\u0632 \u0646\u0648\u062a \u0628\u0648\u0643 \u0644\u0644\u0645\u062d\u062a\u0631\u0641\u064a\u0646."}, {"text": "\u0627\u062e\u062a\u0627\u0631\u0647\u0627 \u062e\u064a\u0631\u064a \u0628\u0634\u0627\u0631\u0629 \u0643\u0645\u0645\u062b\u0644\u0629\u060c \u062f\u0648\u0646 \u0633\u0627\u0628\u0642\u0629 \u0645\u0639\u0631\u0641\u0629 \u0623\u0648 \u062a\u062c\u0631\u0628\u0629 \u062a\u0645\u062b\u064a\u0644\u064a\u0629\u060c \u0644\u062a\u0642\u0641 \u0628\u062c\u0627\u0646\u0628 \u0641\u0627\u062a\u0646 \u062d\u0645\u0627\u0645\u0629 \u0641\u064a \u0641\u064a\u0644\u0645 \u00ab\u064a\u0648\u0645 \u0645\u0631 \u0648\u064a\u0648\u0645 \u062d\u0644\u0648\u00bb (1988) \u0648\u0647\u064a \u0645\u0627 \u0632\u0627\u0644\u062a \u0634\u0627\u0628\u0629 \u0644\u0645 \u062a\u062a\u062e\u0637\u064e \u0639\u0627\u0645\u0647\u0627 \u0627\u0644\u062b\u0627\u0646\u064a"}]}
flair pytorch Text Classification token-classification sequence-tagger-model ar en dataset:AQMAR dataset:ANERcorp license:apache-2.0 has_space region:us
TAGS
#flair #pytorch #Text Classification #token-classification #sequence-tagger-model #ar #en #dataset-AQMAR #dataset-ANERcorp #license-apache-2.0 #has_space #region-us 

Arabic NER Model using Flair Embeddings
=======================================


Training was conducted over 94 epochs, using a linear decaying learning rate of 2e-05, starting from 0.225 and a batch size of 32 with GloVe and Flair forward and backward embeddings.


Original Datasets:
------------------


* AQMAR
* ANERcorp


Results:
--------


* F1-score (micro) 0.8666
* F1-score (macro) 0.8488





---


Usage
=====


Example
=======


Model Configuration
===================


Due to the right-to-left in left-to-right context, some formatting errors might occur. and your code might appear like this, (link accessed on 2020-10-27)


*if you use this model, please consider citing this work:*



TAGS
#flair #pytorch #Text Classification #token-classification #sequence-tagger-model #ar #en #dataset-AQMAR #dataset-ANERcorp #license-apache-2.0 #has_space #region-us 

passage: TAGS
#flair #pytorch #Text Classification #token-classification #sequence-tagger-model #ar #en #dataset-AQMAR #dataset-ANERcorp #license-apache-2.0 #has_space #region-us 
