🚀 基于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}
}