Сегодня расскажем про пару статей, которые не получили пока большой популярности, но идеи или подходы, предлагаемые в них, кажутся интересными.
Extracting Training Data from Large Language Models
Nicholas Carlini, Florian Tramer, Eric Wallace, Matthew Jagielski, Ariel Herbert-Voss, Katherine Lee, Adam Roberts, Tom Brown, Dawn Song, Ulfar Erlingsson, Alina Oprea, Colin Raffel
Google, Stanford, UC Berkeley, Northeastern University, OpenAI, Harvard, Apple
Статья:
https://arxiv.org/abs/2012.07805#NLP #dataleak #security #transformers
Стандартный вопрос в контексте больших языковых моделей — насколько модель в процессе обучения действительно учится обобщать, а насколько просто запоминает входные данные? Авторы статьи исследуют, как можно, работая с моделью как с чёрным ящиком, извлечь из неё в точности те данные, которые были использованы для обучения, а в особенности — редкую и уникальную информацию. (До тех пор, пока вы учитесь на публичных датасетах, это выглядит не очень серьезной проблемой, но если вы, например, использовали обучение модели, скажем, на медицинских картах пациентов, это уже потенциальный риск.)
В качестве бейзлайна предложена простая схема из двух этапов:
- генерация — сэмплим из модели много строк без кондишенинга по стратегии top-k.
- фильтрация — считаем для каждой строки perplexity согласно модели и оставляем только некоторый top (т.е. строки с самой низкой perplexity).
Анализ бейзлайна показывает, что в результате действительно получаем довольно много точно запомненного текста (авторы упоминают MIT public license, какие-то популярные гайдлайны, адреса и ники популярных людей), но это не очень интересно, т.к. очевидно, что все эти тексты встречались в обучающих данных чаще других, ну и в целом, предложенная схема сэмплинга часто давала очень однообразные результаты. Кроме того, в результатах очень много случаев, когда генерация вырождалась в повторение одного или нескольких слов (стандартная для жадного сэмплинга проблема).
Дальше авторы предлагают пару улучшений схемы сэмплирования: сэмплинг с кондишенингом на случайные строки из интернета и сэмплинг с постепенным понижением температуры (чтобы повысить разнообразие начала текста, но не потерять в последующей связности); а также способы более качественной фильтрации:
- сравнение perplexity с другими моделями (мы ищем именно заученный контент, а вероятность, что две разные модели заучат одно и то же, довольно мала)
- важный частный случай -- сравнение с такой же моделью, но меньшего размера (меньшие модели меньше склонны к заучиванию)
- сравнение perplexity на той же модели того же текста, но lowercased (опять же, шансов, что модель заучит два варианта написания, довольно мало)
- сравнение perplexity с сжимаемостью текста zlib-ом (позволяет фильтровать случаи с повторением одного слова)
- усреднение perplexity скользящим окном.
Прогнав различные комбинации предложенных методов, авторы взяли по 100 топовых примеров и вручную проверили их присутствие в обучающих данных/в интернете. В итоге получили примерную оценку эффективности каждого из методов — лучший дал около 60%, в среднем по всем методам около 30%. Среди выявленных данных нашлись ФИО, контактные данные, UUIDs, конфиги, цитаты IRC-переписки и прочее. Часть из выделенных данных встречалась лишь в одном документе обучающем датасета (хотя и несколько раз). Из курьезного нашлись последовательности квадратов чисел, числа Фибоначчи, цифры числа pi.
К слову, на цифрах числа pi показывают, что выбор стратегии сэмплинга и обуславливающего префикса сильно влияет на результат — простейший подход даёт 25 цифр, а правильно подобранный префикс позволяет вытащить до 824 правильных цифр числа pi. Также показывают, что способность/склонность к заучиванию напрямую связана с размером модели.
В целом, кажется, что это далеко не последняя работа на эту тему — чем больше публикуемые модели, тем больше они требуют разных данных для обучения, и тем больше повода искать в них интересные заученные строки.