🚀 基於Flair嵌入的阿拉伯語命名實體識別模型
本項目使用Flair嵌入構建阿拉伯語命名實體識別(NER)模型,通過特定的訓練參數和數據集,在阿拉伯語的命名實體識別任務上取得了較好的效果。
🚀 快速開始
安裝依賴
確保你已經安裝了必要的庫:
pip install flair pyarabic icecream
運行示例代碼
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('عمرو عادلي أستاذ للاقتصاد السياسي المساعد في الجامعة الأمريكية بالقاهرة .')
tagger.predict(sentence)
arTagger.predict(arSentence)
ic(sentence.to_tagged_string)
ic(arSentence.to_tagged_string)
✨ 主要特性
- 多語言支持:支持阿拉伯語和英語。
- 高精度識別:在多個指標上取得了較好的成績,如F1分數。
- 豐富的數據集:使用了AQMAR和ANERcorp等數據集進行訓練。
📦 安裝指南
pip install flair pyarabic icecream
💻 使用示例
基礎用法
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('عمرو عادلي أستاذ للاقتصاد السياسي المساعد في الجامعة الأمريكية بالقاهرة .')
tagger.predict(sentence)
arTagger.predict(arSentence)
ic(sentence.to_tagged_string)
ic(arSentence.to_tagged_string)
高級用法
new_sentence = Sentence('新的英文句子用於測試')
new_ar_sentence = Sentence('新的阿拉伯語句子用於測試')
tagger.predict(new_sentence)
arTagger.predict(new_ar_sentence)
ic(new_sentence.to_tagged_string)
ic(new_ar_sentence.to_tagged_string)
📚 詳細文檔
原始數據集
訓練參數
訓練進行了94個epoch,使用線性衰減學習率,從0.225開始,最終為2e - 05,批量大小為32,並使用了GloVe和Flair的前向和後向嵌入。
評估結果
指標 |
數值 |
F1分數(微觀) |
0.8666 |
F1分數(宏觀) |
0.8488 |
命名實體類型 |
真陽性 |
假陽性 |
假陰性 |
精確率 |
召回率 |
類別F1分數 |
LOC(地點) |
539 |
51 |
68 |
0.9136 |
0.8880 |
0.9006 |
MISC(雜項) |
408 |
57 |
89 |
0.8774 |
0.8209 |
0.8482 |
ORG(組織) |
167 |
43 |
64 |
0.7952 |
0.7229 |
0.7574 |
PER(人物) |
501 |
65 |
60 |
0.8852 |
0.8930 |
0.8891 |
模型配置
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
注意事項
由於從右到左和從左到右的上下文差異,可能會出現一些格式錯誤,代碼可能會像 這樣 顯示(鏈接於2020 - 10 - 27訪問)。
🔧 技術細節
模型使用了Flair庫,結合了GloVe和Flair的嵌入技術,通過LSTM網絡進行序列標記。在訓練過程中,使用了線性衰減學習率和批量歸一化等技術,以提高模型的性能和泛化能力。
📄 許可證
本項目使用Apache-2.0許可證。
📖 引用
如果你使用這個模型,請考慮引用 這項工作:
@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}
}