我们提出了DistilCamemBERT-NER,这是一个针对法语语言的命名实体识别(NER)任务进行了微调的模型。这项工作灵感来自基于 CamemBERT 模型的 Jean-Baptiste/camembert-ner 。基于CamemBERT的模型化问题在扩展阶段成为了一个技术问题,例如用于生产阶段的推理成本可能存在问题。为了应对这个效果,我们提出了这个模型化方式,通过 DistilCamemBERT 将推理时间缩短一半,但能够保持相同的功耗。
使用的数据集是 wikiner_fr ,其中包含大约170k个句子,分为5个类别进行标记:
| class | precision (%) | recall (%) | f1 (%) | support (#sub-word) |
|---|---|---|---|---|
| global | 98.17 | 98.19 | 98.18 | 378,776 |
| PER | 96.78 | 96.87 | 96.82 | 23,754 |
| LOC | 94.05 | 93.59 | 93.82 | 27,196 |
| ORG | 86.05 | 85.92 | 85.98 | 6,526 |
| MISC | 88.78 | 84.69 | 86.69 | 11,891 |
| O | 99.26 | 99.47 | 99.37 | 309,409 |
该模型的性能与2个参考模型进行了比较(详见下文),使用f1分数进行度量。对于平均推理时间的测量,使用了AMD Ryzen 5 4500U @ 2.3GHz、6核心:
| model | time (ms) | PER (%) | LOC (%) | ORG (%) | MISC (%) | O (%) |
|---|---|---|---|---|---|---|
| 1238321 | 43.44 | 96.82 | 93.82 | 85.98 | 86.69 | 99.37 |
| 1239321 | 87.56 | 79.93 | 72.89 | 61.34 | n/a | 96.04 |
| 12310321 | 314.96 | 82.91 | 76.17 | 70.96 | 76.29 | 97.65 |
from transformers import pipeline
ner = pipeline(
task='ner',
model="cmarkea/distilcamembert-base-ner",
tokenizer="cmarkea/distilcamembert-base-ner",
aggregation_strategy="simple"
)
result = ner(
"Le Crédit Mutuel Arkéa est une banque Française, elle comprend le CMB "
"qui est une banque située en Bretagne et le CMSO qui est une banque "
"qui se situe principalement en Aquitaine. C'est sous la présidence de "
"Louis Lichou, dans les années 1980 que différentes filiales sont créées "
"au sein du CMB et forment les principales filiales du groupe qui "
"existent encore aujourd'hui (Federal Finance, Suravenir, Financo, etc.)."
)
result
[{'entity_group': 'ORG',
'score': 0.9974479,
'word': 'Crédit Mutuel Arkéa',
'start': 3,
'end': 22},
{'entity_group': 'LOC',
'score': 0.9000358,
'word': 'Française',
'start': 38,
'end': 47},
{'entity_group': 'ORG',
'score': 0.9788757,
'word': 'CMB',
'start': 66,
'end': 69},
{'entity_group': 'LOC',
'score': 0.99919766,
'word': 'Bretagne',
'start': 99,
'end': 107},
{'entity_group': 'ORG',
'score': 0.9594884,
'word': 'CMSO',
'start': 114,
'end': 118},
{'entity_group': 'LOC',
'score': 0.99935514,
'word': 'Aquitaine',
'start': 169,
'end': 178},
{'entity_group': 'PER',
'score': 0.99911094,
'word': 'Louis Lichou',
'start': 208,
'end': 220},
{'entity_group': 'ORG',
'score': 0.96226394,
'word': 'CMB',
'start': 291,
'end': 294},
{'entity_group': 'ORG',
'score': 0.9983959,
'word': 'Federal Finance',
'start': 374,
'end': 389},
{'entity_group': 'ORG',
'score': 0.9984454,
'word': 'Suravenir',
'start': 391,
'end': 400},
{'entity_group': 'ORG',
'score': 0.9985084,
'word': 'Financo',
'start': 402,
'end': 409}]
from optimum.onnxruntime import ORTModelForTokenClassification
from transformers import AutoTokenizer, pipeline
HUB_MODEL = "cmarkea/distilcamembert-base-nli"
tokenizer = AutoTokenizer.from_pretrained(HUB_MODEL)
model = ORTModelForTokenClassification.from_pretrained(HUB_MODEL)
onnx_qa = pipeline("token-classification", model=model, tokenizer=tokenizer)
# Quantized onnx model
quantized_model = ORTModelForTokenClassification.from_pretrained(
HUB_MODEL, file_name="model_quantized.onnx"
)
@inproceedings{delestre:hal-03674695,
TITLE = {{DistilCamemBERT : une distillation du mod{\`e}le fran{\c c}ais CamemBERT}},
AUTHOR = {Delestre, Cyrile and Amar, Abibatou},
URL = {https://hal.archives-ouvertes.fr/hal-03674695},
BOOKTITLE = {{CAp (Conf{\'e}rence sur l'Apprentissage automatique)}},
ADDRESS = {Vannes, France},
YEAR = {2022},
MONTH = Jul,
KEYWORDS = {NLP ; Transformers ; CamemBERT ; Distillation},
PDF = {https://hal.archives-ouvertes.fr/hal-03674695/file/cap2022.pdf},
HAL_ID = {hal-03674695},
HAL_VERSION = {v1},
}