Я использую базовую модель BERT для обучения NER в наборе данных conll-2003.я просто использовал BertForTokenClassification (из huggingface) для обучения, которое вроде рассматривает финальный слой последовательности и затем добавляет финальный линейный слой.где я могу получить результаты ниже.
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
)
, скажите, пожалуйста, каковы возможные причины / смысл этого?и как я могу узнать, правильно ли изучена моя модель или нет?как будто он должен был столкнуться с любым компромиссом отклонения.
пожалуйста, дайте мне знать, если вам нужна дополнительная информация для ясности .. Заранее спасибо.