是什么导致深度学习模型中的F1得分高而准确性低?

时间:2019-03-08 08:06:01

标签: deep-learning ner

我正在使用BERT基本无大小写模型在conll-2003数据集上训练NER。我只是使用BertForTokenClassification(来自拥抱面)进行训练,这是一种考虑最终序列层,然后添加最终线性层的训练。我能够产生以下结果的地方。

with 6 epoch with train/dev data size::  6973/1739
Test F1-Score: 0.8455102584598987
{'test_loss': 0.18759359930737468, 'test_accuracy': 0.42335164835164835, 'global_step': 1308, 'loss': 0.03054473980611891}
Validation F1-Score: 0.8771035676507356
{'eval_loss': 0.13038920708013477, 'eval_accuracy': 0.4910168195718655, 'global_step': 1308, 'loss': 0.03054473980611891}

为了寻找损失,我正在使用以下功能。

def flat_accuracy(preds, labels):
    pred_flat = np.argmax(preds, axis=2).flatten()
    labels_flat = labels.flatten()
    return np.sum(pred_flat == labels_flat) / len(labels_flat)
for each_batch:
    tmp_eval_accuracy = flat_accc(pred_xx, label_ids_xx)
    eval_accuracy += tmp_eval_accuracy
    nb_eval_steps += 1
eval_accuracy = eval_accuracy / nb_eval_steps

如果您看到了上述结果,那么就准确性而言确实很差。我的问题是我用来寻找准确性的方法是对还是错?我认为这是正确的,因为它只是匹配标签总数中匹配的标签数量。最后将每个小批量精度的总和除以总批数。

但如果您看到的话,F1得分就很高。对于我使用的F1分数(from seqeval.metrics import f1_score

请告诉我其背后的可能原因/含义是什么? 我怎么知道我的模型是否正确学习?就像它应该面对任何偏差-偏差的权衡。

请让我知道您是否需要更多信息以保持清晰度。 预先感谢。

0 个答案:

没有答案