BertForSequenceClassification и BertForMultipleChoice для многоклассовой классификации предложений - PullRequest
3 голосов
/ 10 марта 2020

Я работаю над проблемой классификации текста (например, анализ настроений), где мне нужно классифицировать текстовую строку в один из пяти классов.

Я только начал использовать Huggingface Transformer пакет и BERT с PyTorch. Что мне нужно, так это классификатор со слоем softmax сверху, чтобы я мог выполнить 5-стороннюю классификацию Смущает, что в пакете Transformer есть два соответствующих параметра: BertForSequenceClassification и BertForMultipleChoice .

Какой из них следует использовать для моей 5-позиционной классификации задача? Каковы подходящие варианты их использования?

В документации для BertForSequenceClassification вообще не упоминается softmax, хотя в ней упоминается кросс-энтропия. Я не уверен, что этот класс предназначен только для 2-классовой классификации (т. Е. Логистика c регрессия).

Преобразователь модели Берта с головкой классификации / регрессии последовательности сверху (линейный слой поверх объединенного вывода), например, для задач GLUE.

  • метки (torch.LongTensor формы (batch_size,), необязательно, по умолчанию: Нет) - метки для расчета последовательности классификации / потери регрессии. Индексы должны быть в [0, ..., config.num_labels - 1]. Если config.num_labels == 1, вычисляется потеря регрессии (среднеквадратичная потеря), если config.num_labels> 1, вычисляется классификационная потеря (кросс-энтропия).

Документация для BertForMultipleChoice упоминает softmax, но, как описано для меток, похоже, что этот класс предназначен для классификации по нескольким меткам (то есть двоичной классификации для нескольких меток).

Модель Берт с классификационной головкой с множественным выбором сверху (линейный слой над выходом пула и softmax), например, для задач RocStories / SWAG.

  • метки (torch.LongTensor of shape (batch_size,), необязательно, по умолчанию None) - метки для расчета потерь классификации с множественным выбором. Индексы должны быть в [0, ..., num_choices], где num_choices - это размер второго измерения входных тензоров.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 10 марта 2020

Ответ на этот вопрос лежит в (по общему признанию, очень кратком) описании задач:

[BertForMultipleChoice] [...], например, для задач RocStories / SWAG.

Если посмотреть на бумагу для SWAG , кажется, что задача на самом деле - научиться выбирать из различных вариантов . Это в отличие от вашей «классической» задачи классификации, в которой «выбор» (т. Е. Классы) не меняется по вашим выборкам, а это именно то, для чего BertForSequenceClassification предназначен.

Оба варианта могут фактически быть для произвольного числа классов (в случае BertForSequenceClassification), соответственно вариантов (для BertForMultipleChoice), путем изменения параметра labels в конфигурации. Но, поскольку кажется, что вы имеете дело со случаем «классической классификации», я предлагаю использовать модель BertForSequenceClassification.

Кратко рассмотрим отсутствующий Softmax в BertForSequenceClassification: поскольку задачи классификации могут вычислять потери во всех классы, независимые от образца (в отличие от множественного выбора, где ваше распределение меняется), это позволяет вам использовать Cross-Entropy Loss, который учитывает Softmax на шаге обратного распространения для увеличенной численной стабильности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...