Как использовать немаркированные данные для задачи с ответами на вопросы с помощью дистилляции знаний

Процесс маркировки данных довольно сложен, особенно для таких задач, как машинное чтение (ответы на вопросы). В этом посте я хочу описать один из методов, который мы использовали для адаптации модели ответов на вопросы к конкретной области с использованием ограниченного количества помеченных данных - Извлечение знаний. Оказалось, что мы можем использовать его не только для «сжатия» модели, но и для использования внутренних немаркированных данных.

Ответы на вопросы и SQuAD 📖

Одна из простейших форм системы ответов на вопросы - это машинное понимание чтения (MRC). Там задача - найти краткий ответ на вопрос в рамках предоставленного документа. Самым популярным эталоном для MRC является Стэнфордский набор данных вопросов и ответов (SQuAD) [1]. Он содержит 100 000 пар вопросов и ответов и 53 775 вопросов без ответа, написанных для 23 215 абзацев из популярных статей Википедии. Ответом на каждый вопрос является отрывок текста (отрывок) из соответствующего отрывка для чтения. Для вопросов, на которые нет ответа, система должна определять, когда абзац не поддерживает ответ, и воздерживаться от ответа.

Доступны также другие наборы данных с ответами на вопросы, такие как Natural Questions и MS MARCO, но SQuAD 2.0 - один из наиболее часто используемых, и он стал отправной точкой для нашего проекта.

Оценка предварительно обученных моделей 👩🏻‍🔬

Недавно мы работали над системой ответов на вопросы для интернет-магазина фото и видеокамер, где обучили модель машинного чтения. В нашем проекте мы протестировали различные предварительно обученные модели ответов на вопросы (благодаря 🤗 Hugging Face) на нашем небольшом помеченном наборе данных и обнаружили, что ALBERT-xxlarge [2] обучен на SQuAD 2.0 показывает многообещающие результаты в нашей области:

Но модель настолько медленная, что мы не можем использовать ее в производстве. Одним из часто используемых методов в таких случаях является использование дистилляции знаний.

Кистилляция знаний ⚗️

Извлечение знаний [3] обычно используется в качестве метода сжатия модели, когда мы хотим обучить более быструю или меньшую модель. В этом процессе мы обучаем меньшую модель (ученик), используя выходные вероятности из нашей основной большой модели (учитель), поэтому ученик начинает «имитировать» поведение своего учителя. Потери, основанные на сравнении выходных распределений, намного больше, чем от только жестких целей. Идея состоит в том, что, используя такие мягкие ярлыки, мы можем передать некоторые «темные знания» из модели учителя. Кроме того, обучение с помощью программных меток не позволяет модели быть слишком уверенной в своем прогнозе, что похоже на метод сглаживания меток [4].

Извлечение знаний - прекрасный метод, который на удивление хорошо работает и особенно полезен с трансформаторами: более крупные модели часто показывают лучшие результаты, но такие большие модели сложно запустить в производство.

Дистилляция с использованием немаркированных данных 🔮

Модели, обработанные или обученные в SQuAD, не показывают конкурентоспособных результатов в нашем наборе данных. Набор данных SQuAD не пересекается с нашим доменом, поэтому такая дистилляция не работает. Также кажется, что более крупные модели, обученные в SQuAD, намного лучше работают с данными вне домена. Чтобы процесс дистилляции работал, нам нужно использовать наборы данных из нашего домена. Помимо нашего небольшого помеченного набора данных, у нас также было около 30 000 непомеченных (без выделенных ответов) пар вопрос-документ, и мы думали, как их использовать.

Что нам нужно для перегонки? Учитель и помеченный набор данных. ALBERT-xxlarge может быть моделью учителя. У нас нет ярлыков для наших 30K примеров, но можем ли мы просто удалить часть потери, которая использует ярлыки? Конечно, мы унаследуем больше ошибок учителей во время извлечения знаний без сквозных ярлыков. Но на данный момент у нас нет моделей лучше, чем ALBERT-xxlarge, поэтому нам было бы полезно получить аналогичные результаты с меньшей моделью. Итак, мы попытались переместить знания из ALBERT-xxlarge в ALBERT-base, используя только немаркированные 30K примеров.

Как видите, у нас есть ALBERT-base с F1 / EM рядом с его учителем, и мы не использовали никаких помеченных данных для обучения. Конечно, это не означает, что нам больше не нужны маркированные данные, оценка все еще далека от идеала, и мы также унаследовали ошибки учителей, поэтому добавление помеченных данных может улучшить эту процедуру обучения.

Дистилляция как предварительная тренировка 🏋🏻‍♂️

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

Самостоятельная дистилляция 👯‍♀️

Чем лучше у вас будет учитель, тем лучше вы сможете обучать ученика. Итак, одним из основных направлений может стать совершенствование модели учителя. Помимо использования нашего помеченного набора данных, есть еще один захватывающий метод - самодистилляция, когда мы используем одну и ту же архитектуру модели и для ученика, и для учителя. Самодистилляция позволяет нам обучать модель ученика, которая может работать лучше, чем ее учитель. Это может показаться странным, но поскольку учащийся обновляет свои веса обучения на основе данных, которые не видел учитель, это может привести к несколько более высокой успеваемости учащегося (сопоставимого размера) по данным из этого распределения. Наши эксперименты также воспроизвели это поведение, когда мы применили самодистилляцию для ALBERT-xxlarge, а затем использовали его в качестве одного из наших учителей для дальнейшей дистилляции для меньшей модели.

Ансамбли 👯‍♀️️️👯‍♂️

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

Подождите, наши данные действительно без ярлыков? 🤔

Стоит сказать, что даже несмотря на то, что мы не промаркировали данные для дистилляции, у нас остались вопросы, что не всегда так. По сравнению с задачами НЛП, такими как классификация текста и NER, модель ответа на вопрос состоит из вопроса и документа. И хотя вопрос является входным, его можно рассматривать как часть процесса маркировки данных (вы должны написать вопрос, а не просто выделить ответ). Таким образом, действительно немаркированный набор данных QA - это когда у нас есть только документы без вопросов.

Но даже несмотря на то, что у нас были вопросы, мы не готовили каждый вопрос к конкретному документу вручную. Мы собрали эти 30 000 пар QA, сопоставив вопросы с набором независимых документов, используя предварительно обученную модель USE-QA. Таким образом, мы можем начать с предварительно обученной модели и приступить к дальнейшим улучшениям модели в производстве. После того, как мы начнем собирать реальные вопросы, которые задают пользователи, взаимодействующие с нашей системой, мы можем таким же образом найти документы-кандидаты на эти вопросы и использовать этот набор данных для обобщения знаний, не помечая множество примеров.

Экспериментальная установка 🛠

Мы использовали примеры из 🤗 Hugging Face Transformers для обобщения знаний и 1x NVIDIA 2080TI для всех наших экспериментов. Накопление градиента позволило нам работать с более крупными моделями, такими как ALBERT-xxlarge и RoBERTa-large, и со смешанной точностью (fp16) для более быстрого обучения моделей. Чтобы выполнить самодистилляцию ALBERT-xxlarge на одном 2080TI, мы сначала предварительно вычислили прогнозы учителя (мягкие метки).

Заключение

Извлечение знаний - это удобный метод, который позволяет нам сжимать огромные модели трансформаторов, чтобы использовать их в производстве. Мы также можем использовать его в форме предварительного обучения на немаркированных данных, что может помочь повысить эффективность выборки при точной настройке на помеченных примерах. Это может быть особенно полезно для таких задач, как машинное понимание прочитанного, где процесс маркировки данных довольно сложен. Дистилляция с использованием немаркированных данных не является новой идеей, и она уже показала хорошие результаты как в компьютерном зрении (SimCLRv2, Шумные студенты), так и в НЛП (Начитанные студенты учатся лучше).

Если вы хотите узнать больше о нашем пути создания системы ответов на вопросы, ознакомьтесь с нашим более подробным постом, в котором мы описываем, как мы собирали и помечали данные, настраивали модель и применяли различные методы, такие как извлечение знаний и обрезка:



Чтобы узнать больше о дистилляции знаний и других методах сжатия, я рекомендую следующие ресурсы:

А следующие ресурсы помогут вам погрузиться в задачу машинного чтения:

[1] Пранав Раджпуркар, Робин Джиа, Перси Лян,« Знай, чего не знаешь: вопросы, на которые нет ответа для SQuAD (2018), ACL 2018

[2] Чжэньчжун Лан, Минда Чен, Себастьян Гудман, Кевин Гимпель, Пиюш Шарма, Раду Сорикут, АЛЬБЕРТ: облегченный BERT для самостоятельного изучения языковых представлений (2019)

[3] Джеффри Хинтон, Ориол Виньялс, Джефф Дин, Извлечение знаний в нейронной сети (2015), семинар по глубокому обучению NIPS 2014

[4] Рафаэль Мюллер, Саймон Корнблит, Джеффри Хинтон, Когда помогает сглаживание этикеток? (2019), NeurIPS 2019