Обязательно ли нужны специальные токены [CLS] [SEP] при тонкой настройке BERT?

Я следую руководству https://www.depends-on-the-definition.com/named-entity-recognition-with-bert/, чтобы выполнить распознавание именованных сущностей с помощью BERT.

Во время тонкой настройки перед тем, как скармливать жетоны модели, автор делает:

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt) for txt in tokenized_texts],
                          maxlen=MAX_LEN, dtype="long", value=0.0,
                          truncating="post", padding="post")

Согласно моим тестам, это не добавляет специальных токенов к идентификаторам. Так я что-то упускаю или мне не всегда нужно включать [CLS] (101) [SEP] (102)?


person N G    schedule 29.09.2020    source источник


Ответы (1)


Я тоже следую этому руководству. У меня это сработало без добавления этих токенов, однако я нашел в другом руководстве (https://vamvas.ch/bert-for-ner), что их лучше добавить, потому что модель обучалась в этом формате.

[Обновление] Собственно только что проверил, оказалось, что после добавления токенов точность улучшилась на 20%. Но обратите внимание, что я использую его в другом наборе данных.

person Татьяна Дембелова    schedule 05.11.2020
comment
Их можно безопасно добавлять. Хотя это может не понадобиться для NER, pooler_output BertModel основан на первом токене, которым должен быть CLS. Спасибо за отличную статью. - person N G; 12.11.2020