Turbo ML Conf 2024 — по следам
В формате разбора содержания докладов я, автор канала по безопасности ИИ »Борис_ь с ml», приведу три интереснейших из тех, что мне довелось посетить на данной конференции. Они привлекли меня не только как дата саентиста, но и как сотрудника вендора решений по кибербезопасности. И по каждому докладу в конце я расскажу, почему.
1. NLP в RecSys («Тайны трансформерной персонализации», Кирилл Хрыльченко)
Ссылка на презентацию.
Прикладной кейс доклада
Преобразование истории действий пользователя в вектор и использование ее как признака в задаче ранжирования предметов (треков, товаров и т.д.) для этого пользователя.
Содержание
Основные вопросы, которые поставила перед собой команда:
как сформировать историю?
как закодировать события?
как связать кандидата и пользователя? (Прим.: кандидат — это термин из recsys, значит один из выбранных предварительно до ранжирования объект с ненулевым соответствием пользователю)
на что учить модель? (Прим.: модель создания эмбеддинга событий истории пользователя)
Исходные данные — события пользователей различного типа, в зависимости от сервиса:
Клики, показы, поисковые запросы
Лайки, просмотры, прослушивания, скипы
Покупки, добавления в корзину, избранное
Отзывы, комментарии, подписки
Некоторое внимание уделили тому, как формировать историю пользователя на этапе фильтрации данных. Какие сложности при обработке информации о показах товаров, почему таргет-события хороши (событие покупки, например), про прямые запросы пользователей Яндекс Маркет и так далее. Это не очень интересно с точки ИБ, поэтому останавливаться подробно на этом не буду.
Был проведен анализ количества событий, используемой для описания истории пользователя. Смотрели 64, 128, и так далее по степеням двойки (или их суммам, типа 1536). Выводы:
профит в метриках модели затухает с увеличением длины истории экспоненциально
брать n последних событий выбранных типов — хорошо. В среднем работает лучше, чем отбирать фиксированное кол-во событий каждого типа. Хотя и важно в зависимости от задачи пробовать более хитрые техники подбора.
Закономерности отличаются по доменам: в музыке отрицательные события (пропуски треков) важны, а в e-com (показы без кликов) — нет.
Потом задались вопрос о способе кодирования текстового содержимого событий пользователя. LLM оказалась слишком тяжелой, а униграммы, биграммы и чартриграммы слишком простыми. Пришли к использованию wordpiece-токенов со словарем, построенным по доменному корпусу.
Инсайт: токенезированный url веб-документа дает профит при пуллинге (sum, avg и т.д.) поверх заголовка документа. Для файла хорошо подмешивать в вектор контента вектор айдишника файла (созданный отдельно обученной моделью, я так понимаю).
Агрегация эмбеддингов различных атрибутов объекта (названия, описания, …) может производиться либо стандартным пуллингом, либо простой нейросеткой.
Полный эмбеддинг истории действий получаются благодаря сложению информации о позиции, типе события и его контенте.
Итоговая архитектура модели создания эмбеддингов объектов истории пользователя приняла двухбашенный вид.
CLS — вектор, задаваемый случайными числами.
Вектор пользователя также стали считать в оффлайне, а не под каждое событие, что позволило очень увеличить производительность.
Следующий вопрос — на что учить модель создания эмбеддингов событий?
Начали с ранжирования:
Будем генерировать нейросетью признак для ранжирования
Ранжирующая модель — градиентный бустинг
Ранжирование чаще всего учится на pointwise / pairwise лосс
Учимся на показанных рекомендациях: Р (клик | показ), а не Р (клик)
Инсайт: надо учиться также, как ранжирующая модель
Next Item Prediction выучивает P (click) и дает гораздо меньше профита как признак
Минимизируем ту же функцию потерь
Используем то же самое распределение объектов для обучения
Для повышения информативности вердикта модели о релевантности объекта относительно истории пользователя использовали двухголовую архитектуру нейросети-трансформера.
А потом пришли к тому, что можно агрегировать несколько выходов нейросети при обучении, а на инференсе подавать их как отдельные признаки в Catboost. И лучше агрегировать вероятности, а не логиты.
Предпоследним слайдом расписали некоторые подробности по этапу получения подвыборки кандидатов для ранжирования, но я оставлю этот сегмент уже без комментариев.
А последним — советы и некоторые подробности реализации подобной системы.
Дообучение моделей
Чем индуктивней модель, тем менее это важно
Каждую неделю дообучаемся на новых данных с warm start’ом
Контекст важен
Про внедрения
Кросс-чеки помогают, логируйте всё: входные данные, предсказания, etc
Оффлайн-модели пересчитываем ежедневно
Толк для кибербезопасности
В сторону того, что подходы из RecSys могут быть полезны в информационной безопасности, впервые сказали коллеги еще в прошлом году на конференции PHDays, и потом отразили в статье.
На конференциях от заказчиков довольно часто можно услышать вопрос «А как вы учитываете поведение пользователей? Проводите ли вы кластеризацию пользователей по поведению?», и так далее. Что, на самом деле, наполовину представляет собой как раз рассмотренную в докладе задачу. Разве что ранжировать при кластеризации не надо, в дело вступают свои модели, но тем не менее. Механизм получения векторного представления профиля поведения пользователя по его событиям в Windows Security Log, Sysmon и так далее играет роль не менее важную, чем модель машинного обучения дальше. И важно понимать, что события по типу Process Creation/Exit, Account Logon/Logoff, — это полный аналог всяких прослушиваний, лайков, пропусков и прочего в стандартных доменных областях рекомендательных систем.
И если с умом применить соответствующие подходы, можно получить очень интересные результаты, как я думаю.
2. Презентация T-lite («Строим сильную базовую LLM на основе открытых моделей», Анатолий Потапов)
Прикладной кейс доклада
Презентация Большой Языковой Модели — дообученной Llama 3 с применением PoSE и YaRN. Цель была — улучшить открытую LLM для максимальной полезности в заданных приложениях и на русском языке.
Содержание
Постановка проблемы — мультиязычные модели проигрывают заточенным под конкретный язык. А также — открытые мультиязычные проигрывают проприетарным. Говоря точнее, ограничения открытых и мультиязычных моделей следующие:
У них есть проблемы с русской грамматикой («все равно готов пицца», «опасно для твоей здоровья», …)
Отсутствуют доменные знания для решения специальных задач
Относительно низкая доля русского в претрейне (0.1–4%)
Авторы работы выдвигают гипотезу: причина может крыться в том, сколько символов покрывается одним токеном модели. Если в токен входит мало символов, то информация получается разрозненной, способность к пониманию ухудшается. Также это влияет на количество информации, попадающей в контектст. На фиксированном количестве токенов в контексте чем меньше информации в них содержится, тем, соответственно, ее меньше и в окне целиком.
Помимо этого, предобученные с нуля для русского языка модели на 20–100% дешевле (и быстрее) в инференсе, чем мультиязычные.
Более подробно читайте об плотности токенизации русскоязычных моделей в этой статье.
Как можно самостоятельно доработать открытую модель? Есть три варианта.
Для маленьких команд:
Для средних команд:
Допретрен на язык
Допретрен на домен
Свой generic-alignment
Для «OpenAl»:
Мы с вами живем в реальном мире, OpenAI не являемся. На текущем уровне целесообразно заниматься допретрейном на нашем языке и нашем домене, а потом претрейном на конкретных инструкциях по задаче.
Итого, пайплайн будет выглядеть следующим образом:
Обучаем новый токенизатор (емкий с точки зрения русского языка)
Адаптируем модель с новым токенизатором
Допретрейн на русском языке
Допретрейн на корпусе документов из доменной области
General instruction tuning
Preference tuning
Результаты реализации описанного выше подхода:
Выросла эффективность инференса на 60%
Чистый русский язык, за которой не стыдно
Бенчмарки на русском хорошие (будут ниже)
Ответы лучше, чем у GPT-3.5 turbo. Результат при side-by-side сравнении: 55/45.
Отдельно скажем, что данные для допретрейна надо правильным образом чистить. На эту тему были уже доклады (например, вот), поэтому ограничусь картинкой со слайда.
Важно также организовать достаточно репрезентативные данные с точки зрения их структуры и разнообразия. Например, с точки зрения стиля, очень много текстов вида новостей, рекламы, форумных записей. При ребалансировке важно учесть стили, которые мы хотим передать модели в большей мере.
В итоге команда пришла к тому, чтобы проводить обучения в два этапа. Сначала данные из разных источников и типов (код, вики, книги, и тд), а потом — данные с максимальной образовательной ценностью.
Что за образовательная ценность? Она получалась благодаря прогону через LLM текстовых документов следующим промптом:
Источники данных для этой стадии использовались следующие:
Школьные учебники (stem и гуманитарные предметы)
Common Crawl, отфильтрованный на образовательную ценность с помощью промпта выше
Инструктивные сеты на английском и переведенные
Много книг и вики
Математические сеты
Код и инструктивные сеты про написание кода
Параллельные тексты
Синтетические сеты типа cosmopedia
Теперь о хитростях на этапе обучения.
Во-первых, вместо обычного большого лернинг рейт использован маленький (зеленый), чтобы при дообучении на русском языке модель не забыла английский. Это также привело к общему повышению ее качества.
Был доработан слой внимания, и это тоже улучшило качество. Однако о том, как именно, докладчик особо не пояснил, насколько я помню.
Для оптимальной работы с русском языком требовалось создать свой токенизатор (более плотный, чем обычные мультиязычные). За основу был взят TikToken от OpenAI, и доведен до размеров словаря в 50 000. Мерджились с основным словарем с помощью процедуры из QWEN, инициализировали значения токенов усреднениями из старых токенов.
Новые эмбеддинги обучались постепенно. Сначала замораживались все старые слои, и меняли новые с русскоязычными токенами, потом заморозили их меняли только новые головы аттеншена. Потом вместе, и так далее. Подробнее об этой технике читайте здесь.
Далее, удлинение контекста. Наиболее эффективным методом решения этой задачи показало себя применение ротационных позиционных эмбеддингов (RoPe, вот статья). Суть в том, что позиционные эмбеддинги зашили напрямую в self-attention. Теперь там не только Query-Key-Value матрицы, но и position-aware матрица, которая называется rotary matrix. Более того, у этого метода уже появилось развитие. Для еще более значительного увеличения размера окна были использованы методы PoSe (статья) и Theta Scaling (или LongRoPe, статья тут), а для увеличения производительности расчета эмбеддингов — YaRN (статья).
По итогу на задаче нахождения факта из массива информации (тест «иголка в стоге сена») модель справилась практически идеально на длинах контекста вплоть до 131к токенов.
Еще был проведен алайнмент на переведенных с английского датасетах.
Алгоритм был такой:
Генерируем синтетические инструкции из данных пре-трейна
Фильтруем некачественные (классификатор на оценках людей)
Подбираем правильные пропорции и гиперпараметры
Для этих целей модель также подтягивали с использованием следующих техник: DPO, IPO, ORPO, TR-DPO, SLIC-HF, и т. д.
Итак! Каков результат?
На продуктовых кейсах отлично
На русских бенчмарках отлично
Чистый и грамотный русский язык
Впрочем, смотрите сами.
И последнее — она же опенсорс, где скачать?
Тут: Модели T-lite от Т-Банк — Telegraph.
И вопросы задавать тут: https://t.me/zheltyi_aimeetup.
А напоследок, несколько инсайтов от докладчика, эксклюзивно для этой статьи.
Позже выложим расширенный токенизатор и длинный контекст
По ссылке вы найдете использованную разработчиками либу алаймента
Возможно будут обновления и другие модели
Толк для кибербезопасности
С применением LLM в целях поддержки аналитиков SOC при реагировании на инциденты, при анализе многочисленных TI-отчетов, при обработке требований регуляторных документов и мер их реализации, всплывает одна и та же проблема — модель плохо понимает специфику ИБ. То что powershell и commandline — близкие по смыслу слова, APT29 и APT39 — имена собственные одной категории, но совершенно разные по содержанию, и что не любой инцидент лечится антифишинговыми мерами, без дообучения LLM просто не знает. Да и вообще у кибербезопасности в России есть свои нюансы реагирования хотя бы в части порядка информирования НКЦКИ — никакая общая модель не может этого знать сама по себе.
Представленный способ — можно сказать, готовая методичка по тому, как сделать свою LLM с ИБ-компетенцией. Возможно только, что для достижения достаточной планки качества на боевых задачах потребуется еще подключить RAG, но это уже стадия пройденная. Реализованные и эффективные системы на русском языке уже есть (хоть и не в открытом доступе пока, поэтому просто поверьте).
3. «Генерация синтетических временных рядов для решения задачи поиска аномалий», Владислав Власов
Ссылка на презентацию.
Прикладной кейс доклада
Улучшение качества моделей определения аномалий путем их обучения на синтетических данных.
Содержание
В начале докладчик вкратце раскрывает суть и сложности задачи поиска аномалий.
Когда рядов единицы или десятки,
Модель можно построить чуть-ли не вручную без МЛ, прописать эвристики для поиска аномалий
Легко получить экспертный фидбек по качеству найденных аномалий
Низкие требования к ресурсам
Когда рядов сотни или тысячи,
Уже не получится построить модели вручную на эвристиках
Можно сделать разбиение на типы
Фидбек собирать сильно сложнее, но за определенное количество итераций все еще реально
Требования к ресурсам все еще не высокие
Когда рядов — сотни тысяч или миллионы,
Временные ряды могут быть абсолютно разной природы и вида
Нет единой модели, единого подхода, нужен полноценный AutoML
Очень жесткие требования к скорости алерта
(Главное) очень тяжело оценить качество алгоритма
Было проведено исследование подходов по генерации синтетических временных рядов. Выделены были следующие:
Mixture autoregressive model
GAN
Layer Modelling
Паттерн задается покомпонентно (тренд, сезонность, цикличность, шум)
Плюсы:
Минусы:
В случае с Авторегрессионными моделями или GAN проблемой стало придумать формальный критерий аномалии, на котором бы обучалась модель-детектор.
Однако при послойной генерации мы сами задаем, где и какая аномалия расположена, и генерируем их при помощи определенной линии тренда со случайными параметрами.
Подход с layer modelling можно итеративно дорабатывать. Если появляются новые случаи аномалий, они алгоритмически добавляются в алгоритм создания линии тренда, дальше заново генерируется датасет и модели-детекторы обучаются заново.
Стоит отметить, что используются различные виды шума, однако на деле почти все кейсы временных рядов покрываются первыми двумя видами (в их прикладной задаче). Виды генерации аномалий — единичный, множественный и по условию.
Даже предоставили сниппет с параметрами, которые составляли возможную сетку синтетических временных рядов.
Как итог, докладчик обозначил следующие моменты:
Умеем валидировать модели
Наконец-то можем приступить к решению supervised задачи на большом объеме данных
Используем в разных задачах
Подняли f1-score в задаче классификации с 0.57 до 0.88
Толк для кибербезопасности
Уже классической является задача детектирования аномалий в сетевом трафике или потоке системных событий. И главная проблема, как и обозначенная в данном докладе — нет разметки аномалий. Чтобы преобразовать точечную экспертную компетенцию в данные больших объемов, необходимо по сути построить имитационную модель, как показано в данном докладе на примере layer modelling. И, если в каких-то прикладных кейсах это работает, то, может, сработает и в ИБ?…