Маркировка последовательностей с помощью BERT

Я использую модель, состоящую из слоя встраивания и LSTM для выполнения маркировки последовательностей в pytorch + torchtext. Я уже обозначил предложения.

Если я использую самообучающиеся или другие предварительно обученные векторы встраивания слов, это просто.

Но если я использую преобразователи Huggingface BertTokenizer.from_pretrained и BertModel.from_pretrained, в начало и конец предложения добавляются токены '[CLS]' и '[SEP]' соответственно. Таким образом, выход модели становится последовательностью, которая на два элемента длиннее, чем последовательность метки / цели.

В чем я не уверен:

  1. Эти два тега необходимы для BertModel, чтобы "правильно" встраивать каждый токен предложения?
  2. Если они необходимы, могу ли я вынуть их после слоя встраивания BERT, перед вводом в LSTM, чтобы длина на выходе была правильной?

person Sig    schedule 10.05.2020    source источник


Ответы (1)


  1. Да, BertModel они были нужны, поскольку без добавления этих специальных символов выходные представления были бы другими. Однако, как показывает мой опыт, если вы точно настроите BertModel задачу маркировки без добавления маркеров [CLS] и [SEP], вы можете не увидеть значительной разницы. Если вы используете BertModel для извлечения фиксированных функций слова, вам лучше добавить эти специальные символы.

  2. Да, вы можете убрать вложения этих специальных символов. Фактически, это общая идея для задач маркировки или маркировки последовательностей.

Я предлагаю взглянуть на некоторые примеры маркировки последовательностей или тегов с использованием BERT, чтобы быть уверенным в своих решениях по моделированию. Вы можете найти пример тегов NER с использованием преобразователей Huggingface здесь.

person Wasi Ahmad    schedule 10.05.2020