В предыдущем посте мы рассмотрели классификацию нулевого выстрела в обработке естественного языка и ее силу для маркировки с небольшим количеством данных или без них. Основным строительным блоком классификации нулевого выстрела является вывод на естественном языке (NLI). Имея сильную модель NLI для любого языка, вы можете выполнить классификацию с нулевым выстрелом. Мотивация этой работы заключалась в том, чтобы опубликовать лучшую модель вывода на естественном языке с полной прозрачностью, чтобы вдохновить больше людей работать в этой области. В следующем разделе мы сначала рассмотрим NLI, а затем опишем наборы данных, которые мы используем для этой задачи, после чего мы рассмотрим постепенное размораживание и сглаживание меток — два метода, которые мы использовали во время этого обучения. В последней части мы завершаем все и даем ссылку на блокнот для обучения этому заданию.

Логический вывод на естественном языке

Эта проблема определяется путем получения двух предложений: основного предположения (посылки) и второго предположения (гипотезы). Модель должна распознавать, что второе предложение является истинным (последствие), ложным (противоречие) или нейтральным на основе первого предложения.

Например, если предпосылка «Джо профессионально играет в теннис». и гипотеза «Джо — спортсмен». Вывод правильный (заключение). Но учитывая гипотезу «Джо не знает тенниса». для той же предпосылки, вывод неверен. Также, если гипотеза «Джо — банковский служащий». для той же посылки, это предложение является нейтральным по сравнению с предыдущим предложением.

Набор данных WikiNLI

Набор данных, который мы здесь используем, — Wiki D/Similar, опубликованный в репозитории Sentence-Transformers. Этот набор данных, вдохновленный Реймерс и Гуревич, 2019, использует просканированный текст из Википедии для создания образцов следствия или противоречия для NLI.
Как сообщается в репозитории, предложения из одного и того же раздела документа определяются как образцы следствия. , а с другой стороны, предложения из разных разделов документа определяются как противоречия.
Как вы понимаете, проблема, с которой мы можем столкнуться во время обучения, — это шумные метки. Поскольку набор данных собирается без какого-либо контроля, в данных могут легко существовать неправильные метки, и нам нужно что-то с этим делать в процессе обучения. Здесь может помочь сглаживание меток, мы поговорим об этом в следующем разделе.

Сглаживание меток

В задачах классификации наши цели для вычислительных потерь — это горячее кодирование. Поэтому мы хотим, чтобы наша модель возвращала 0 для отрицательных категорий и 1 для положительных. Проблема с этим подходом заключается в том, что модель будет продолжать обучение даже на выборке, дающей 0,99 для правильной метки, чтобы довести ее до 1. К сожалению, это сделало бы нашу модель слишком самоуверенной для выборок в обучении, а веса имеют тенденцию заставлять модель агрессивно изменяться между классы с высокой вероятностью. Кроме того, когда у нас есть несколько зашумленных выборок (неправильная метка) в нашем наборе данных, мы заставляем модель иметь 100% уверенность в этом.
Чтобы решить эту проблему, сглаживание меток делает модель менее уверенной, изменяя целевые переменные. С параметром ε сглаживание меток уменьшит вероятность помеченной категории и повысит вероятность другой категории, как описано ниже. N — размер целевых категорий.

Например, с ε = 0,1 и двумя категориями наши целевые переменные изменятся с [0, 1] на [0,05, 0,95]. Сглаживание меток сделает обучение более надежным, даже если данные неправильно помечены (Howard & Gugger, 2020, стр. 249).

Постепенное размораживание

Мы использовали HooshvareLab/bert-fa-base-uncased для нашей базовой модели, чтобы построить нашу задачу NLI поверх нее. Предварительно обученные модели обучаются на огромном наборе данных и сохраняют эти знания в своих весах, однако новая голова, которую мы должны добавить поверх этой для NLI, инициализируется случайным образом.

Существует техника, называемая постепенным размораживанием, которая не будет обучать все веса нейронной сети одновременно. Таким образом, мы могли бы получить более надежные и обобщенные модели. Чтобы получить лучшие результаты, мы просто обучили только что добавленную голову, а затем обучили каждый слой модели.

Заключение

С помощью двух методов, описанных выше, мы точно настроили нашу модель и получили современные результаты по сравнению с исходной моделью, опубликованной в этом наборе данных. Результаты доступны в следующей таблице:

Вы можете использовать выпущенную модель или перестроить модель, используя репозиторий Github, связанный с этим постом.

В этом состоянии моделей НЛП для персидского языка существует множество оппортунистов, и вы можете получить лучшие результаты общедоступных моделей, просто объединив несколько методов. Надеюсь, что эта работа даст вам некоторые идеи для работы над этой или другими опубликованными моделями. Я хочу поблагодарить Мердада Фарахани за создание этого набора данных и предоставление моделей, а также огромное спасибо Google Colab за предоставление бесплатного ресурса, который использовался для обучения.