英文

DistilCamemBERT-NER

我们提出了DistilCamemBERT-NER,这是一个针对法语语言的命名实体识别(NER)任务进行了微调的模型。这项工作灵感来自基于 CamemBERT 模型的 Jean-Baptiste/camembert-ner 。基于CamemBERT的模型化问题在扩展阶段成为了一个技术问题,例如用于生产阶段的推理成本可能存在问题。为了应对这个效果,我们提出了这个模型化方式,通过 DistilCamemBERT 将推理时间缩短一半,但能够保持相同的功耗。

数据集

使用的数据集是 wikiner_fr ,其中包含大约170k个句子,分为5个类别进行标记:

  • PER: 个人;
  • LOC: 地点;
  • ORG: 组织;
  • MISC: 其他实体(电影标题、书籍等);
  • O: 背景(外部实体)。

评估结果

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

如何使用DistilCamemBERT-NER

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}]

Optimum + ONNX

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},
}