не бейте. Такой вопрос: как выровнять токены, полученные от NER-модели под токены изначальных данных, чтобы оценить качество модели (если их вообще нужно выравнивать)?
Например, предложение в датасете разбито так (датасет nerus):
Вице-премьер O
по O
социальным O
вопросам O
Татьяна B-PER
Голикова I-PER
А модель выдала следующее:
'Вице',
'-',
'премьер',
'по',
'социальным',
'вопросам',
'Татьяна',
'Голикова',
'O',
'O',
'O',
'O',
'O',
'O',
'B-PER',
'E-PER',
Что делать с разными обозначениями (I-PER, E-PER) - понятно (либо переобозначить под BIO или вообще единичные, как I-PER -> PER), а вот с токенами на ум приходит что-то типа просмотр изначальных и складывание нескольких токенов от модели в один, только тут куча оговорок, например, попадание тегов 'O' в новое слово, или модель наоборот что-то разобьет не до конца, непонятно как гарантировать одинаковую длину. Мне кажется, есть какой-то более-менее простой подход, который я не могу найти.
И еще вопрос, если использовать другие датасеты, в которых размечены непосредственно только сами сущности (например, загрузить ne5 с помощью corus), то как потом считать метрики для того же slovnet, который на выходе дает тоже спаны? Видел статью на этот счет, там предлагается использовать метрики для точного совпадения, частичного и т.д. И здесь не очень понятно, как тогда считать общий F1 и другие метрики как в seqeval.
попробуй на исходном тексте использовать токенизатор модели
А где найти токенизатор, например, для ner_collection3_bert от deeppavlov? Поискал в документации - не нашел (возможно, просто плохо искал). Если все-таки его найти, то что это даст? Модель же возвращает токенизированный ей текст, или это не то, что нужно?
Обсуждают сегодня