计算变压器结果指标的最佳方法是啥?

Posted

技术标签:

【中文标题】计算变压器结果指标的最佳方法是啥?【英文标题】:What is the best way to compute metrics for the transformers results?计算变压器结果指标的最佳方法是什么? 【发布时间】:2021-12-20 07:30:24 【问题描述】:

以下是 NER 拥抱面部转换器的简单示例:

from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import pipeline

tokenizer = AutoTokenizer.from_pretrained("dslim/bert-large-NER")
model = AutoModelForTokenClassification.from_pretrained("dslim/bert-large-NER")

nlp = pipeline("ner", model=model, tokenizer=tokenizer)
example = "My name is jonathan davis and I live in Chicago, Illinois"

ner_results = nlp(example)
print(ner_results)

    output: ['entity': 'B-PER', 'score': 0.95571744, 'index': 4, 'word': 'j', 'start': 11, 'end':
 12, 'entity': 'B-PER', 'score': 0.6131773, 'index': 5, 'word': '##ona', 'start': 12, 'end': 
15, 'entity': 'I-PER', 'score': 0.6707376, 'index': 6, 'word': '##than', 'start': 15, 'end':
 19, 'entity': 'I-PER', 'score': 0.97754997, 'index': 7, 'word': 'da', 'start': 20, 'end': 22,
 'entity': 'I-PER', 'score': 0.4608973, 'index': 8, 'word': '##vis', 'start': 22, 'end': 25, 
'entity': 'B-LOC', 'score': 0.9990302, 'index': 13, 'word': 'Chicago', 'start': 40, 'end': 47]

例如我有关于我的句子的信息:

jonathan davis - PER
Chicago - LOC
Illinois - LOC (The model did not recognize this entity)

鉴于我的数据按如下方式拆分,我如何正确计算 PrecisionRecall

j, ##ona, ##than

在此之前,我使用了正则表达式并使用了一个度量,这点在article 中有描述。但我不知道它是否适合这个任务。

请帮助我找到计算指标的正确方法。也许我错过了拥抱脸中的一些内置功能?

【问题讨论】:

【参考方案1】:

在我看来,您使用的模型 (dslim/bert-large-NER) 有问题。根据文件,他们引入了一个名为aggregation_strategy 的参数,目的完全相同(full explanation)。

但由于某种原因,这在这里无法正常工作。现在有两个快速修复选项

FIRST:将模型更改为正常工作的模型。

from transformers import AutoTokenizer, AutoModelForTokenClassification
tokenizer = AutoTokenizer.from_pretrained("Jean-Baptiste/camembert-ner")
model = AutoModelForTokenClassification.from_pretrained("Jean-Baptiste/camembert-ner")
from transformers import pipeline
nlp = pipeline('ner', model=model, tokenizer=tokenizer, aggregation_strategy="simple")
sequence = "My name is jonathan davis and I live in Chicago, Illinois"
nlp(sequence)

输出:

['end': 25,
  'entity_group': 'PER',
  'score': 0.9983611,
  'start': 10,
  'word': 'jonathan davis',
 'end': 47,
  'entity_group': 'LOC',
  'score': 0.9982808,
  'start': 39,
  'word': 'Chicago',
 'end': 57,
  'entity_group': 'LOC',
  'score': 0.99840826,
  'start': 48,
  'word': 'Illinois']

SECOND 将输出转换为更舒适的格式以完成其余过程(可能借助状态机)。

【讨论】:

以上是关于计算变压器结果指标的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在变压器温度描述中:工作温度是105度,最高温升应小于60K 其中60K是啥意思?60K是怎么计算出来的?谢谢

使用拥抱面变压器只保存最佳重量

基于声音在线监测的变压器异常判别方法-论文阅读笔记

matlab变压器温度仿真

电力变压器状态评价方法研究-论文阅读笔记

变压器模型预测的意外结果