Введение

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

В статье представлено пошаговое руководство по тонкой настройке модели ELECTRA на наборе данных SST-2 с использованием кода, содержащегося в репозитории GitHub «https://github.com/aryafikriii/ELECTRA-Finetuned-SST2- Английский".

Архитектура трансформатора:

Архитектура преобразователя — это популярная архитектура нейронной сети для обработки естественного языка, в которой используются механизмы внимания для соединения токенов в текстовой последовательности, что позволяет модели изучать представления строгого языка. Преобразователь состоит из взаимосвязанных блоков преобразователя, и каждый блок состоит из многоуровневых уровней внимания и прямой связи. Уровень внимания с несколькими заголовками фокусируется на взаимодействии между токенами в тексте, в то время как уровень прямой связи обрабатывает информацию для каждого токена отдельно.

Трансформеры — это тип архитектуры нейронной сети, который набирает популярность в последние годы. Недавно они использовались OpenAI в своих языковых моделях, а также использовались DeepMind для AlphaStar, их программы для победы над лучшим профессиональным игроком в Starcraft. Преобразователи предназначены для простой обработки долгосрочных зависимостей и полностью полагаются на собственное внимание для вычисления представлений своих входных и выходных данных без использования выровненных по последовательности RNN или свертки.

Архитектура преобразования — это двигатель ChatGPT, который действительно хорошо учится тому, как применять контекст. Например, при обработке предложения значение слова или фразы может полностью измениться в зависимости от контекста, в котором оно используется. Чтобы решить эту проблему, модели преобразователя используют нейронные сети для генерации вектора, называемого запросом, и вектора, называемого ключом, для каждого слова. Когда запрос из одного слова соответствует ключу из другого слова, это означает, что второе слово имеет соответствующий контекст для первого слова. Чтобы обеспечить соответствующий контекст от второго слова к первому слову, генерируется третий вектор, называемый значением, который затем объединяется с первым словом, чтобы получить более контекстуализированное значение первого слова.

Электра Модель:

Модель ELECTRA представляет собой реализацию архитектуры трансформатора, разработанную Google. Он использует подходы предварительной подготовки и тонкой настройки для изучения сильных языковых представлений. Во время предварительной подготовки модель ELECTRA использует метод «обнаружения замененных токенов», при котором некоторые токены в тексте заменяются генератором токенов, а модель классифицирует, является ли токен исходным или сгенерированным. Это позволяет модели ELECTRA учиться лучше и эффективнее. Модель ELECTRA — это самоконтролируемый метод обучения языковому представлению, который может предварительно обучать трансформаторные сети с использованием относительно небольших вычислительных ресурсов. Он отличает «настоящие» входные токены от «поддельных» входных токенов, сгенерированных другой нейронной сетью, подобно дискриминатору GAN. Модель ELECTRA доступна на Hugging Face и может быть точно настроена для последующих задач, таких как классификация, контроль качества и маркировка последовательностей.

SST-2 (Стэнфордское дерево настроений):

Для наших экспериментов мы использовали набор данных SST-2, который является одним из самых популярных наборов данных для классификации текстов. Набор данных содержит предложения, отнесенные к разным категориям в соответствии с задачей классификации текста. Он состоит из обучающих данных, данных разработки (набора разработчиков) и тестовых данных. Каждая выборка в наборе данных SST-2 помечена соответствующим классом. Набор данных SST-2 основан на наборе данных, представленном Пангом и Ли (2005), и состоит из 11 855 отдельных предложений, извлеченных из обзоров фильмов. Он был проанализирован с помощью синтаксического анализатора Стэнфорда и включает в себя в общей сложности 215 154 уникальных фразы из этих деревьев синтаксического анализа, каждая из которых аннотирована тремя судьями-людьми. Корпус со всеми 5 метками обозначается как SST-5 или SST мелкозернистый. Эксперименты по бинарной классификации полных предложений (отрицательные или несколько отрицательные по сравнению с несколько положительными или положительными с отброшенными нейтральными предложениями) относятся к набору данных как SST-2 или SST двоичный. Набор данных SST-2 доступен на Hugging Face и может использоваться для задач анализа настроений.

Подводя итог, можно сказать, что набор данных SST-2 является популярным набором данных в текстовой классификации, который содержит помеченные предложения, отнесенные к разным категориям. Он состоит из данных обучения, разработки и тестирования, и каждый образец помечен соответствующим классом. Набор данных основан на наборе данных, представленном Пангом и Ли (2005), и состоит из 11 855 отдельных предложений, извлеченных из обзоров фильмов. Набор данных SST-2 доступен на Hugging Face и может использоваться для задач анализа настроений.

Реализация функций, которые были выполнены:

  • unfreeze_last_layer(model):
def unfreeze_last_layer(model):
    for param in model.parameters():
        param.requires_grad = False
    for param in model.classifier.parameters():
        param.requires_grad = True

Эта функция используется для разморозки слоя классификации в модели. Это делается путем установки для атрибута required_grad параметров модели значения True. Это позволяет обновлять слой классификации во время обучения модели, в то время как другие слои остаются неизменными.

  • unfreeze_last_layer_last_block(model):
def unfreeze_last_layer_last_block(model):
    for param in model.parameters():
        param.requires_grad = False
    
    for param in model.classifier.parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[11].parameters():
        param.requires_grad = True

Эта функция похожа на unfreeze_last_layer(model), но также размораживает последний блок модели ELECTRA. После запуска этой функции во время обучения модели можно обновить как классификационный слой, так и последний блок.

  • unfreeze_last_layer_last_2block(model):
def unfreeze_last_layer_last_2block(model):
    for param in model.parameters():
        param.requires_grad = False
        
    for param in model.classifier.parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[11].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[10].parameters():
        param.requires_grad = True

Эта функция похожа на unfreeze_last_layer_last_block(model), но также размораживает последние два блока модели ELECTRA. Запустив эту функцию, во время обучения модели можно обновить как слой классификации, так и последние два блока.

  • unfreeze_last_layer_last_3block(model) to unfreeze_last_layer_last_11block(model):
def unfreeze_last_layer_last_3block(model):
    for param in model.parameters():
        param.requires_grad = False
        
    for param in model.classifier.parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[11].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[10].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[9].parameters():
        param.requires_grad = True
def unfreeze_last_layer_last_11block(model):
    for param in model.parameters():
        param.requires_grad = False
        
    for param in model.classifier.parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[11].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[10].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[9].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[8].parameters():
        param.requires_grad = True 

    for param in model.electra.encoder.layer[7].parameters():
        param.requires_grad = True 

    for param in model.electra.encoder.layer[6].parameters():
        param.requires_grad = True            

    for param in model.electra.encoder.layer[5].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[4].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[3].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[2].parameters():
        param.requires_grad = True

    for param in model.electra.encoder.layer[1].parameters():
        param.requires_grad = True            

    for param in model.electra.encoder.layer[0].parameters():
        param.requires_grad = True

Эти функции аналогичны unfreeze_last_layer_last_2block(model), но размораживают последние три-одиннадцать блоков модели ELECTRA. Запустив эти функции, можно обновить как слой классификации, так и указанные последние блоки во время обучения модели.

По сути, эти функции используются для обеспечения гибкости обновлений модели. Разморозив последний слой или блоки, мы можем позволить модели настроить последние функции в соответствии с конкретной задачей классификации текста. Важно отметить, что при использовании этих функций необходимо учитывать размер набора данных и доступные вычислительные ресурсы, поскольку размораживание дополнительных слоев может увеличить время обучения и требования к памяти.

Эксперимент с набором данных SST-2:

Набор данных SST-2 — популярный набор данных, используемый для анализа настроений. Эксперимент проводился с использованием различных подходов тонкой настройки. Результаты точности на наборе для разработчиков и тестовом наборе следующие:

Из полученных результатов видно, что метод точной настройки путем замораживания начальных слоев, за исключением последнего блока, обеспечивает более высокую точность на наборе для разработки и на тестовом наборе. Это указывает на то, что обновление последнего блока в модели ELECTRA может значительно повысить эффективность классификации текста. Кроме того, этот метод может снизить риск переобучения и улучшить обобщение модели за счет адаптации только наиболее релевантной части к конкретной задаче классификации текста. Таким образом, тонкая настройка может быть эффективным и действенным выбором для применения модели ELECTRA к различным задачам классификации текста.

Сравнение с обычным трансферным обучением:

Метод тонкой настройки, используемый в модели ELECTRA, демонстрирует превосходство по сравнению с обычным трансферным обучением. Обычное трансферное обучение предполагает использование модели, которая была обучена другой задаче, а затем ее адаптацию к задаче классификации текста. Однако с тонкой настройкой модели ELECTRA мы можем обновить параметры модели более конкретно для задачи классификации текста, включая последний слой, непосредственно связанный с классификацией текста. Таким образом, метод тонкой настройки модели ELECTRA обеспечивает большую гибкость в оптимизации производительности классификации текста. Кроме того, этот метод также использует функции, изученные моделью ELECTRA из большого количества текстовых данных, тем самым улучшая способность модели понимать значение и контекст текста. Поэтому метод тонкой настройки можно считать одним из лучших способов применения модели ELECTRA к задачам классификации текста.

Заключение:

В этой статье мы обсудили подход к тонкой настройке модели ELECTRA для повышения производительности классификации текста. Благодаря внедрению и оценке различных методов тонкой настройки, включая замораживание начальных слоев и обновление только последнего блока, мы добились хорошей точности набора данных SST-2. Мы также сравнили этот метод точной настройки с обычным трансферным обучением и показали, что точная настройка имеет преимущества с точки зрения гибкости и оптимизации производительности. Мы надеемся, что эта статья может дать информацию и вдохновение для читателей, заинтересованных в применении модели ELECTRA к задачам классификации текста или другим задачам НЛП.

Использованная литература:

  1. Трансформеры в НЛП: объяснение для начинающих | На пути к науке о данных
  2. Более эффективное предварительное обучение модели НЛП с помощью ELECTRA — блог исследований Google (googleblog.com)
  3. Набор данных SST | Документы с кодом
  4. Точная настройка больших языковых моделей (sebastianraschka.com)
  5. Компьютерное зрение — тонкая настройка, трансферное обучение и обучение с нуля — перекрестная проверка (stackexchange.com)