Примечание редактора. Диллон Боствик и Авинаш Соорияраччи выступят на конференции ODSC Europe 2023, которая пройдет с 14 по 15 июня. Обязательно ознакомьтесь с их выступлением Ускорение машинного обучения в реальном времени здесь!

Преимущества машинного обучения в реальном времени становятся все более очевидными. Цифровые компании уже давно доказали, что такие варианты использования, как обнаружение мошенничества, системы рекомендаций и динамическое ценообразование, выигрывают от более низких задержек обработки. В недавнем документе KDD Booking.com обнаружил, что даже 30-процентное улучшение модели обслуживания с задержкой привело к снижению конверсии пользователей на 0,5 %, что является значительными затратами для их бизнеса.

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

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

Использование вложений для обнаружения аномалий

Рис. 1. Используя обученную глубокую нейронную сеть, можно преобразовать неструктурированные данные в числовые представления, т. е. встраивание

Внедрения — это числовые представления, созданные из неструктурированных данных, таких как изображения, текст и аудио, и они сильно влияют на подходы машинного обучения к обработке таких данных. Хотя вложения стали популярным способом представления неструктурированных данных, их также можно создавать для категориальных и числовых переменных в наборах табличных данных. Это позволяет встраивать мультимодальные неструктурированные и структурированные данные в общее пространство вложения, где сходные наблюдения расположены близко друг к другу, а разнородные — далеко друг от друга.

Рисунок 2. В пространстве встраивания вложения, соответствующие похожим элементам, расположены ближе, а разнородные — далеко друг от друга. [источник]

Мультимодальные вложения, такие как те, которые создаются моделью Meta’s ImageBind, являются новой тенденцией, в которой архитектуры нейронных сетей отображают данные из различных модальностей в общее пространство встраивания. Этот подход предлагает свежий взгляд на проблемы обнаружения аномалий. Например, выбросы могут быть обнаружены в пространстве встраивания, включающем изображения, текст и табличные данные.

Имея это в виду, мы можем использовать платформу потоковой передачи событий в реальном времени для отслеживания дрейфа внедрения между функциями, чтобы определить дрейф основной концепции или обнаружить аномальные события. Чтобы продемонстрировать возможности объединения потоковой передачи с внедрением, мы представим пример использования комбинации Apache Spark Structured Streaming и преобразователей BERT для обнаружения дрейфа внедрения в реальном времени и более быстрого и точного поиска скрытых аномалий. Это захватывающее сочетание двух мощных технологий, традиционно используемых разными людьми в организации. Это может быть дополнительно применено к мультимодальным встраиваниям, чтобы найти новые закономерности в данных организации, которые ранее остались бы незамеченными.

Использование структурированной потоковой передачи Spark для обработки встраивания в режиме реального времени

Мы будем в значительной степени полагаться на высокоуровневую семантику Apache Spark Structured Streaming для обработки с отслеживанием состояния. Spark поддерживает 3 различных вида оконных операций во время события:

Мы можем объединить одну из этих функций окна времени события с applyInPandas(), новой функцией Spark, добавленной в версии 3.2.1 (октябрь 2022 г.). Эта функция упрощает определение пользовательских функций агрегирования в Python. В сочетании с окнами времени события анализ вложений в реальном времени становится намного более осуществимым.

При объединении этих возможностей мы можем увидеть, насколько аномальным является событие по сравнению с другими событиями, которые произошли незадолго до или даже вскоре после события, благодаря возможностям структурированной обработки с отслеживанием состояния. Это означает, что нам больше не нужна статическая наземная истина для определения аномального поведения с помощью неконтролируемых моделей без этапа обучения. Spark Structured Streaming предоставляет семантику и гарантии, необходимые для этого, а конечным результатом является более точная и надежная система обнаружения мошенничества, которая может сократить убытки на миллионы долларов.

Обнаружение аномалий с помощью встраивания в реальном времени

Представьте, что у нас есть текст, изображения или табличные данные, поступающие в таблицу Delta Lake каждые несколько секунд. Несмотря на то, что данные меняются каждую секунду, мы можем выполнить согласованный статический запрос текущего состояния таблицы с помощью Databricks. В этом примере мы будем использовать текст для простоты, но мы можем легко распространить его на мультимодальные вложения:

Во-первых, мы хотим использовать Pandas UDF Spark для применения SBERT, современного кодировщика предложений, к потоку текста в реальном времени. Здесь Pandas UDF упрощает передачу сложной распределенной потоковой передачи событий и функций Python с локальной областью действия.

Когда мы работаем с серией Pandas, мы просто берем модель SBERT из HuggingFace Model Hub:

@pandas_udf(ArrayType(DoubleType()))
def get_embeddings(texts: pd.Series) -> pd.Series:
 model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2')
 embeddings = model.encode(texts.to_numpy())
 return pd.Series(embeddings.tolist())

Далее мы будем использовать Spark Structured Streaming для чтения необработанных данных и создания вложений из текстового столбца. При использовании Databricks это все, что нам нужно сделать, чтобы начать работу с потоком вложений в реальном времени:

embedding_stream = spark.readStream \
 .table('raw_records') \
 .withColumn('embeddings', get_embeddings('text'))

Теперь мы хотим определить функцию, которая получает и возвращает кадр данных Pandas (pdf). Spark предоставляет этот уровень абстракции, чтобы инженер данных мог легко передать этот интерфейс инженеру машинного обучения для реализации. В этой функции мы определяем евклидово среднее значение всех вложений в данном фрейме данных, затем вычисляем евклидово расстояние, чтобы определить, насколько далеко каждое вложение от этого среднего. Инженер машинного обучения может использовать этот интерфейс для дальнейших экспериментов с кластеризацией KMeans или поиском ближайших соседей или попробовать другие методы измерения расстояния, такие как cподобие синуса:

def get_dists_to_mean(pdf):
    # Stack embeddings as a 2D array
    embeddings = np.vstack(pdf["embeddings"].values)
    # Perform K-means clustering
    kmeans = KMeans(n_clusters=K, random_state=42)
    cluster_labels = kmeans.fit_predict(embeddings)
    cluster_centers = kmeans.cluster_centers_
    dist_to_cluster_mean = []
    for i in range(len(embeddings)):
        # Calculate distance to the mean of the cluster
        cluster_idx = cluster_labels[i]
        dist_to_cluster_mean.append(
            pairwise_distances(
                [embeddings[i]],
                [cluster_centers[cluster_idx]]).min())
    pdf["kmeans_dist"] = dist_to_cluster_mean
    return pdf

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

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

from pyspark.sql.functions import *
WINDOW_LENGTH = '10 minutes' # How long the window should wait for data
WINDOW_SLIDE = '5 minutes' # How much overlap between windows
ranked_stream = embedding_stream \
    .withWatermark('ts', '5 minutes') \
    .groupBy(window(embedding_stream['ts'], WINDOW_LENGTH, WINDOW_SLIDE)) \
    .applyInPandas(get_dists_to_mean,
     'text string, ts timestamp, embeddings array<double>, kmeans_dist double'
 )

Несмотря на то, что поток является непрерывным, мы можем использовать функцию Databrick display() для просмотра потока и сортировки по текущим результатам. Мы ясно видим, что необычный текст имеет намного более высокий kmeans_dist, который мы можем использовать в качестве оценки мошенничества. Spark определил, что они произошли во времени близко друг к другу, и создал одно окно для данных. Чтобы узнать больше о механике функций с отслеживанием состояния в Spark Structured Streaming, см. здесь.

Заключение

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

Если вам интересно узнать больше о машинном обучении в реальном времени, присоединяйтесь к нашему докладу Ускорение работы с машинным обучением в реальном времени в ODSC London (доступен виртуальный просмотр). В разговоре вы узнаете:

  • Важные шаблоны для вывода модели в реальном времени
  • Как расставить приоритеты в наиболее распространенных случаях использования машинного обучения в реальном времени в вашем бизнесе
  • Как оценить инструменты потоковой передачи и почему потоковая передача ценна при любой задержке
  • Операционные проблемы, такие как мониторинг, обнаружение дрейфа и хранилища функций

Об авторах/спикерах ODSC Europe 2023:

Диллон Боствик — архитектор решений в компании Databricks, где он провел последние пять лет, консультируя клиентов, начиная от стартапов и заканчивая предприятиями из списка Fortune 500. В настоящее время он помогает руководить группой полевых представителей потоковых продуктов и заинтересован в повышении осведомленности отрасли об эффективных шаблонах потоковой передачи для интеграции данных и производственного машинного обучения. Ранее он работал инженером по продуктам в области автоматизации инфраструктуры.

Авинаш Соорияраччи — старший архитектор решений в Databricks. Его текущая работа связана с работой с крупными организациями розничной торговли и потребительскими товарами в Соединенных Штатах и ​​​​предоставлением им возможности создавать системы на основе машинного обучения. Его особые интересы включают системы потокового машинного обучения и создание приложений с использованием базовых моделей. Ави имеет степень магистра машиностроения и прикладной механики Пенсильванского университета.

Первоначально опубликовано на OpenDataScience.com

Читайте другие статьи по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от начального до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг. Вы также можете пройти обучение по науке о данных по запросу, где бы вы ни находились, с нашей платформой Ai+ Training. Подпишитесь также на нашу быстрорастущую публикацию на Medium, ODSC Journal, и узнайте, как стать писателем.