Удалось побывать DS-ментором на одном из хакатонов в конце прошлого года, где моя команда заняла 3-е место 🎉 . Исходный проект был посвящён кластеризации событий брокера сообщений/логов.
Коллективным разумом были предложены следующие идеи ниже. Ожидаемо хотелось применить трансформеры, но из-за объёма данных и доступных ресурсов был выбран другой подход. Как вы думаете, какой?
1. Baseline: scaNN + любимый эмбеддер
• ScaNN — супербыстрый на CPU алгоритм поиска ближайших соседей (быстрее Faiss)
• Benchmarks алгоритмов кластеризаций
2. Готовый алгоритм ранжирования текстов: Rank-BM25 — улучшенный tf-idf, который может плохо выделять если признаков мало, и очень быстро растет размер словаря при увеличении кол-во n-gramm
3. Алгоритм с кастомным эмбеддингом
• Используем токенизатор (например, BPE). Обучаем его на логах
• Переводим логи в последовательность токенов
• Генерируем tf-idf для 1-, 2-, 3-грамм (размер словаря ~10⁶)
• Создаём эмбеддинги для токенов (например, с помощью предобученной модели)
• Кластеризуем эмбеддинги (например, на 100-800 кластеров)
• Для нового текста создаём вектор, учитывающий частоту кластеров
• Результат — компактные векторы, подходящие для кластеризации и обнаружения аномалий
4. Быстрая работа со строками + dbstream clustering
• RapidFuzz — библиотека с быстрыми реализациями функций string similarity.
• Jaro-Winkler Distance — быстрее Левенштейна на коротких строках.
5. Итеративное выделение кластеров с помощью LLM
• Генерируем ключевые слова и типы ошибок по существующим кластерам
• Покрываем базу кейвордами (~50%)
• Обрабатываем оставшиеся данные, выделяя новые кластеры
• Повторяем процесс, пока покрытие не станет полным
• Удобно выделяем ключевые виды ошибок (например, SQLException, JavaException, Timeout и т.д.)
6. Имплентация от Jetbrains (📕Статья: Aggregation of Stack Trace Similarities for Crash Report Deduplication, ⭐️ код на GitHub)
Внутри решение k-NN с хитрой агрегацией stack trace логов ошибок с временными метками
Коллективным разумом были предложены следующие идеи ниже. Ожидаемо хотелось применить трансформеры, но из-за объёма данных и доступных ресурсов был выбран другой подход. Как вы думаете, какой?
1. Baseline: scaNN + любимый эмбеддер
• ScaNN — супербыстрый на CPU алгоритм поиска ближайших соседей (быстрее Faiss)
• Benchmarks алгоритмов кластеризаций
2. Готовый алгоритм ранжирования текстов: Rank-BM25 — улучшенный tf-idf, который может плохо выделять если признаков мало, и очень быстро растет размер словаря при увеличении кол-во n-gramm
3. Алгоритм с кастомным эмбеддингом
• Используем токенизатор (например, BPE). Обучаем его на логах
• Переводим логи в последовательность токенов
• Генерируем tf-idf для 1-, 2-, 3-грамм (размер словаря ~10⁶)
• Создаём эмбеддинги для токенов (например, с помощью предобученной модели)
• Кластеризуем эмбеддинги (например, на 100-800 кластеров)
• Для нового текста создаём вектор, учитывающий частоту кластеров
• Результат — компактные векторы, подходящие для кластеризации и обнаружения аномалий
4. Быстрая работа со строками + dbstream clustering
• RapidFuzz — библиотека с быстрыми реализациями функций string similarity.
• Jaro-Winkler Distance — быстрее Левенштейна на коротких строках.
5. Итеративное выделение кластеров с помощью LLM
• Генерируем ключевые слова и типы ошибок по существующим кластерам
• Покрываем базу кейвордами (~50%)
• Обрабатываем оставшиеся данные, выделяя новые кластеры
• Повторяем процесс, пока покрытие не станет полным
• Удобно выделяем ключевые виды ошибок (например, SQLException, JavaException, Timeout и т.д.)
6. Имплентация от Jetbrains (📕Статья: Aggregation of Stack Trace Similarities for Crash Report Deduplication, ⭐️ код на GitHub)
Внутри решение k-NN с хитрой агрегацией stack trace логов ошибок с временными метками
🔥11👍8⚡4❤2
📣 Хорошая обзорная статья про то, что нового появилось в OCR (подготовка документов для LLM) в 2024 в контексте GenAI от Игоря Галицкого – OCR Development as Part of GenAI for Documents: 2024 Year-End Summary (linkedin)
Выделяется три подхода к решению задач OCR:
• Pipeline-Based Approach - использование множества специализированных моделей, а также компактных VLM, для каждой подзадачи OCR (распознавание текста, таблиц, формул)
• Expert OCR VLMs – применение специализированных OCR VLM моделей, например, GOT-OCR2.0 (580M) для конвертации img-> md
• General VLMs, крупные универсальные VLM модели, например, GPT-4o или Qwen2-VL.
🤔 Почему это важно?
Большинство кейсов в Enterprise сейчас представляют поиск информации по коллекциям документов (RAG), где качество распознавания сильно влияет на финальный результат.
📌 Узкоспециализированные модели OCR пока продолжают показывать лучшие результаты. По деталям – лучше ознакомиться с исходной статьей.
Выделяется три подхода к решению задач OCR:
• Pipeline-Based Approach - использование множества специализированных моделей, а также компактных VLM, для каждой подзадачи OCR (распознавание текста, таблиц, формул)
• Expert OCR VLMs – применение специализированных OCR VLM моделей, например, GOT-OCR2.0 (580M) для конвертации img-> md
• General VLMs, крупные универсальные VLM модели, например, GPT-4o или Qwen2-VL.
🤔 Почему это важно?
Большинство кейсов в Enterprise сейчас представляют поиск информации по коллекциям документов (RAG), где качество распознавания сильно влияет на финальный результат.
📌 Узкоспециализированные модели OCR пока продолжают показывать лучшие результаты. По деталям – лучше ознакомиться с исходной статьей.
Linkedin
OCR Development as Part of GenAI for Documents: 2024 Year-End Summary
As we wrap up 2024, it's a perfect time to review the progress in Optical Character Recognition (OCR) within the context of document processing, particularly with the rapid advancements in Large Language Models (LLMs) and Vision-Language Models (VLMs). These…
🔥6👍4🤔1
Прошлую субботу в офисе VK прошла Дата-Ёлка 🎄🎅, запись тут. В 2019 году там выступал Спайдермен 🕷, сейчас не так весело. Лично я не дошёл ногами, но посмотрел доклады онлайн, а коллега сходил вживую. В начале мероприятия было мало людей, большинство начало приходить ближе к афтепати 🍷, про еду не забыли)
интересные треки
🧠 1. Reliable ML. Первая часть: обсуждали старые материалы и дали ссылку на классную книгу 📖 по интерпретации моделей. Основной фокус — важность оценки uncertainties моделей. Например, как оценивать не только вероятность события, но и доверительный интервал 📊. Вот полезная библиотека для этого: https://github.com/scikit-learn-contrib/MAPIE.
Вторая часть: обсудили бизнес-аспекты Reliable ML и вспомнили про system design (ссылка на гитхаб). Не хватило конкретных разборов бизнес-кейсов 🤔
🤖 2. Что нового в NLP? LLM стали лучше. Занавес
🔍 3. Итоги PyData. Было много интересных проектов, многие используют LLM. Запомнились:
- Briefer: новый Jupyter Notebook с интерактивными визуализациями.
- Quak: профайлер данных.
📈 4. Карьерный трек в IT Основан на аналитике с hhru (ссылка тут)
- Динамика роста вакансий превышает динамику роста резюме (вторая производная). В абсолютных значениях: 7+ активных резюме на вакансию. И тут конечно вопрос к аналитикам из hh, вывод на 1й картинке ошибочный
- Сильный дисбаланс у джунов: 10x резюме на вакансию, тогда как у сеньорных позиций — 1x.
- Почему не стоит становиться тимлидом: статья (больше ответственности, сложнее рост, прирост 💵 меньше чем от перехода от джуна к мидлу.
⭐️ 5. Отдельно рекомендовали почитать про аномалии временных рядах Dive into Time-Series Anomaly Detection: A Decade Review Как раз есть задача по временным рядам, правда не дошли руки почитать еще статью. Обзорные статья классная тема, чтобы изучить и резюмировать что придумали за последнее время, все работу по агрегации материалов там уже делают за тебя.
+обзоры решений в рекомендациях
интересные треки
🧠 1. Reliable ML. Первая часть: обсуждали старые материалы и дали ссылку на классную книгу 📖 по интерпретации моделей. Основной фокус — важность оценки uncertainties моделей. Например, как оценивать не только вероятность события, но и доверительный интервал 📊. Вот полезная библиотека для этого: https://github.com/scikit-learn-contrib/MAPIE.
Вторая часть: обсудили бизнес-аспекты Reliable ML и вспомнили про system design (ссылка на гитхаб). Не хватило конкретных разборов бизнес-кейсов 🤔
🤖 2. Что нового в NLP? LLM стали лучше. Занавес
🔍 3. Итоги PyData. Было много интересных проектов, многие используют LLM. Запомнились:
- Briefer: новый Jupyter Notebook с интерактивными визуализациями.
- Quak: профайлер данных.
📈 4. Карьерный трек в IT Основан на аналитике с hhru (ссылка тут)
- Динамика роста вакансий превышает динамику роста резюме (вторая производная). В абсолютных значениях: 7+ активных резюме на вакансию. И тут конечно вопрос к аналитикам из hh, вывод на 1й картинке ошибочный
- Сильный дисбаланс у джунов: 10x резюме на вакансию, тогда как у сеньорных позиций — 1x.
- Почему не стоит становиться тимлидом: статья (больше ответственности, сложнее рост, прирост 💵 меньше чем от перехода от джуна к мидлу.
⭐️ 5. Отдельно рекомендовали почитать про аномалии временных рядах Dive into Time-Series Anomaly Detection: A Decade Review Как раз есть задача по временным рядам, правда не дошли руки почитать еще статью. Обзорные статья классная тема, чтобы изучить и резюмировать что придумали за последнее время, все работу по агрегации материалов там уже делают за тебя.
+обзоры решений в рекомендациях
👍11🔥5🤔2
Dive into Time-Series Anomaly Detection: A Decade Review (link)
📌 Обзорная статья, которая собрала ключевые наработки в области поиска аномалий за последние 10 лет. Так как по работе пришлось плотнее заняться временными рядами, думаю написать несколько постов по этой теме.
📈 Что такое временные ряды и аномалии?
- Временные ряды 𝑋(𝑡) это данные, в которых значения зависят от времени. Пример – курс валют
- Поиск аномалий – это обнаружение отклонений, при которых временной ряд ведёт себя существенно иначе, чем ожидается. Это полезно для:
• Мониторинга и прогнозирования технического обслуживания оборудования.
• Выявления мошенничества (fraud detection).
• Обнаружения DDoS-атак через анализ сетевого трафика
🏷 Виды аномалий
- Точечные выбросы (point anomalies) – одиночные аномальные значения
- Контекстные аномалии (contextual anomalies) – выбросы, которые кажутся аномальными только в определённом окне (например, аномально высокая температура зимой)
- Sequence-based аномалии – аномальные последовательности данных
📊 Типы и особенности временных рядов
- Univariate vs Multivariate – одиночный или множественные временные ряды
- Тренды и сезонность
- Циклические флуктуации (Cyclical fluctuations)
- Шумы (Irregular variations)
🔬 Виды детекции аномалий
- Supervised – обучающая выборка содержит стандартные и аномальные кейсы
- Unsupervised – обучение без разметки
- Semi-supervised – известны только стандартные временные ряды, без аномалий
- Self-supervised – используются дополнительные сигналы для обучения без явной разметки
В целом все методы стремятся спрогнозировать ожидаемое значение в данный момент и, если оно сильно отличается от фактического, то можно говорить об аномалии.
📌 Подходы к детекции аномалий
Классические методы
Используются прогнозирующие модели для дальнейшего сравнения план/факт:
- Деревья решений и бустинг (например, LightGBM, XGBoost)
- Рекуррентные сети (RNN) с LSTM и трансформерами
- Методы SVM (вспомнили даже его 🫡)
- Скользящее среднее😐
Нестандартные методы
🔹 Reconstruction-based методы. Используют автоэнкодеры, где временной ряд:
1. Сжимается в латентное пространство энкодером
2. Восстанавливается декодером
3. Если получившиеся временной ряд сильно отличается от ожидаемого => аномалия
Популярные методы:
- Autoencoder-based (Buzz, EncDec-AD и т. д.).
- GANs и диффузионные сети (в статье почему-то забыты, хотя, например, в статье Time Series Anomaly Detection using Diffusion-based Models утверждают, что они SOTA - верим?)
🔹 Clustering-based методы. Как можно догадаться аномалии ищутся с помощью кластеризации:
- Distance-based (по расстоянию).
- Density-based (по плотности).
В статье упоминается 10+ примеров, но суть одна:
1. Временной ряд разбивается скользящим окном.
2. Каждый кусок сравнивается с остальными.
3. Используется кластеризация (например, DAG, деревья).
Популярные методы:
- Discord Detection using Matrix Profile (DAD).
- Adjacent Mean Difference (AMD).
- KNN – за счёт малого количества гиперпараметров оказался одним из лучших. Проверил на игрушечных кейсах (см. пример ниже)
📏 Метрики
Часто используются адаптированные метрики классификации:
- ROC AUC и его вариации, есть свои адаптации под каждый тип аномалий
- Precision и Recall
- True Positive Rate (TPR) и другие
📊 Бенчмарки. Популярные датасеты:
- NAB, KDD21, TODS, TimeEval и другие.
Однако в статье не приводится, какие методы лучшие
🎯 Рекомендация. Лучше строить бейзлайны на скользящих средних и бустингах и только потом пробовать deep learning
📌 Обзорная статья, которая собрала ключевые наработки в области поиска аномалий за последние 10 лет. Так как по работе пришлось плотнее заняться временными рядами, думаю написать несколько постов по этой теме.
📈 Что такое временные ряды и аномалии?
- Временные ряды 𝑋(𝑡) это данные, в которых значения зависят от времени. Пример – курс валют
- Поиск аномалий – это обнаружение отклонений, при которых временной ряд ведёт себя существенно иначе, чем ожидается. Это полезно для:
• Мониторинга и прогнозирования технического обслуживания оборудования.
• Выявления мошенничества (fraud detection).
• Обнаружения DDoS-атак через анализ сетевого трафика
🏷 Виды аномалий
- Точечные выбросы (point anomalies) – одиночные аномальные значения
- Контекстные аномалии (contextual anomalies) – выбросы, которые кажутся аномальными только в определённом окне (например, аномально высокая температура зимой)
- Sequence-based аномалии – аномальные последовательности данных
📊 Типы и особенности временных рядов
- Univariate vs Multivariate – одиночный или множественные временные ряды
- Тренды и сезонность
- Циклические флуктуации (Cyclical fluctuations)
- Шумы (Irregular variations)
🔬 Виды детекции аномалий
- Supervised – обучающая выборка содержит стандартные и аномальные кейсы
- Unsupervised – обучение без разметки
- Semi-supervised – известны только стандартные временные ряды, без аномалий
- Self-supervised – используются дополнительные сигналы для обучения без явной разметки
В целом все методы стремятся спрогнозировать ожидаемое значение в данный момент и, если оно сильно отличается от фактического, то можно говорить об аномалии.
📌 Подходы к детекции аномалий
Классические методы
Используются прогнозирующие модели для дальнейшего сравнения план/факт:
- Деревья решений и бустинг (например, LightGBM, XGBoost)
- Рекуррентные сети (RNN) с LSTM и трансформерами
- Методы SVM (вспомнили даже его 🫡)
- Скользящее среднее
Нестандартные методы
🔹 Reconstruction-based методы. Используют автоэнкодеры, где временной ряд:
1. Сжимается в латентное пространство энкодером
2. Восстанавливается декодером
3. Если получившиеся временной ряд сильно отличается от ожидаемого => аномалия
Популярные методы:
- Autoencoder-based (Buzz, EncDec-AD и т. д.).
- GANs и диффузионные сети (в статье почему-то забыты, хотя, например, в статье Time Series Anomaly Detection using Diffusion-based Models утверждают, что они SOTA - верим?)
🔹 Clustering-based методы. Как можно догадаться аномалии ищутся с помощью кластеризации:
- Distance-based (по расстоянию).
- Density-based (по плотности).
В статье упоминается 10+ примеров, но суть одна:
1. Временной ряд разбивается скользящим окном.
2. Каждый кусок сравнивается с остальными.
3. Используется кластеризация (например, DAG, деревья).
Популярные методы:
- Discord Detection using Matrix Profile (DAD).
- Adjacent Mean Difference (AMD).
- KNN – за счёт малого количества гиперпараметров оказался одним из лучших. Проверил на игрушечных кейсах (см. пример ниже)
📏 Метрики
Часто используются адаптированные метрики классификации:
- ROC AUC и его вариации, есть свои адаптации под каждый тип аномалий
- Precision и Recall
- True Positive Rate (TPR) и другие
📊 Бенчмарки. Популярные датасеты:
- NAB, KDD21, TODS, TimeEval и другие.
Однако в статье не приводится, какие методы лучшие
🎯 Рекомендация. Лучше строить бейзлайны на скользящих средних и бустингах и только потом пробовать deep learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5❤2🙏1