newsmode
search
Меню
arrow_back Назад

Content Moderation & Fraud Detection - Patterns in Industry

auto_awesomeКраткое саммари

Юджин Янь разбирает паттерны построения систем модерации контента и обнаружения мошенничества на основе индустриальных статей и инженерных блогов Stack Exchange, LinkedIn, Uber, Meta, DoorDash, Airbnb, Cloudflare и Google. Он выделяет пять ключевых приёмов: сбор эталонных данных (ground truth) через human-in-the-loop, аугментацию данных синтетикой и поиском похожих образцов, каскадный паттерн для дробления задачи на части, сочетание обучения с учителем и без учителя, а также объяснимость моделей. Среди конкретных деталей: DoorDash использовал соотношение 100 синтетических меток к 1 реальной, эвристики Cloudflare классифицируют 15–30% трафика с низким уровнем ложноположительных срабатываний, а LinkedIn применяет каскад из трёх моделей (отправитель, сообщение, взаимодействие) для выявления домогательств. Автор аргументирует, почему несколько бинарных классификаторов (MBC) обычно превосходят единый многоклассовый (SMCC), и показывает роль unsupervised-методов вроде isolation forest для редких и состязательных задач. Подчёркивается, что объяснимость критична для Uber, Meta и Airbnb при принятии решений и понимании важности признаков.

Модерация контента и обнаружение мошенничества — паттерны в индустрии

[ teardown machinelearning production ] · чтение на 16 мин

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

Чтобы глубже разобраться в построении устойчивых систем модерации контента, я изучил индустриальные статьи и техноблоги о классификации, обнаружении аномалий и релевантности поиска. Вот пять паттернов, которые я заметил:

Сбор эталонных данных через human-in-the-loop

Независимо от того, какое решение выбрано — на эвристиках, с учителем или без учителя, — мы обычно начинаем со сбора набора эталонных данных (ground truth). Этот эталон затем можно использовать как для обучения ML-моделей с учителем, так и для оценки качества эвристик и моделей без учителя. Эталон также служит начальными данными для наращивания числа меток через активное или полу-контролируемое обучение.

Самый прямой способ собрать эталон — спросить пользователей. Для блокировки спама на сайтах Stack Exchange ценным источником данных стали жалобы пользователей, помечающих посты как спам. Эти отметки затем использовались для выявления спамеров и принятия мер — блокировки или ограничения скорости. Они же служили обучающими данными для моделей машинного обучения.

Ещё один пример — усилия LinkedIn по предотвращению домогательств. Пользователи могут пожаловаться на сообщения как на домогательство, и такие сообщения становятся эталоном. Иногда вместо прямой жалобы пользователь просто блокирует обидчика, косвенно решая проблему, — это тоже источник эталона, хотя и более размытый.

Аналогично, в рамках работы Uber по снижению платёжного мошенничества пользователи сообщают о мошенничестве, оспаривая списания и оформляя возвратный платёж (chargeback, чтобы вернуть деньги). После расследования и подтверждения мошенничества такие инциденты становятся эталоном.

Второй, менее распространённый подход — использовать метки, которые естественным образом порождаются конвейерами данных и кодом. Мы видим это в инициативе Meta по классификации чувствительных данных, таких как адреса и номера телефонов, для соблюдения политик хранения и контроля доступа. Источником эталона стало происхождение данных (data lineage): нижестоящие данные наследовали классификации от вышестоящих таблиц. Они также отслеживали данные при прохождении через участки кода, работающие с известными типами данных, и использовали это как эталон.

Третий, самый распространённый подход — размечать данные через сервисы аннотации, например Mechanical Turk, или силами внутренних команд. Когда DoorDash решал проблему холодного старта в тегировании пунктов меню, они построили очередь разметки на базе сервисов аннотации. Очередь была нацелена на высокую точность (чтобы аннотаторы не помечали образцы неверно), высокую полноту (чтобы они проставляли все релевантные метки) и репрезентативность (чтобы размеченные образцы отражали реальные данные).

Для обеспечения высокой точности и пропускной способности они использовали бинарные вопросы, упрощая задачу для аннотаторов. DoorDash также добавил метку «Не уверен», чтобы аннотаторы могли пропускать задачи, в которых не уверены, вместо того чтобы вынужденно выбирать потенциально неверный ответ. Для высокой пропускной способности они варьировали требуемый уровень консенсуса по каждому тегу, требуя более высокого согласия только для тегов с низкой согласованностью между аннотаторами.

Чтобы обеспечить качество меток, при онбординге новых аннотаторов они подмешивали эталонные («золотые») данные. Цель — измерить базовую точность, прежде чем переходить к разметке новых образцов.

Аннотирование «кофе» через сначала разметку «напиток», затем «алкогольный»

Airbnb также полагался на human-in-the-loop для категоризации объявлений. Объявления распределялись по достопримечательностям (например, побережье, национальный парк), занятиям (например, лыжи, сёрфинг), типам жилья (например, амбар, замки) и удобствам (например, потрясающие бассейны, кухня шеф-повара).

Для выбора первых образцов на разметку они построили эвристики на основе отзывов гостей, данных объявления (например, описание, атрибуты, изображения), списков желаний, местоположения и т. д. После аннотации подтверждённые категории легли в основу нового пользовательского опыта, где гости могли просматривать объявления по категориям. Метки категорий также использовались как эталон для машинного обучения.

Аналогично, у Uber были внутренние эксперты, которые анализировали тренды мошенничества. Эти эксперты могли выявлять новые паттерны мошенничества, которые ML-модели, обученные на прошлых данных, упустили бы. В рамках процесса они подтверждали, действительно ли помеченные транзакции были мошенническими, а затем разрабатывали эвристики для программного выявления мошеннических транзакций.

Последний подход — размечать или отбирать образцы для разметки с помощью высокоточных эвристик или моделей. Когда Cloudflare блокирует нежелательный или вредоносный бот-трафик, у них были эвристики, размечавшие данные, которые затем использовались для обучения ML-моделей. Эти эвристики могли классифицировать 15–30% трафика с низким уровнем ложноположительных срабатываний.

Аналогично, когда DoorDash хотел отобрать больше образцов для аннотации, они полагались на высокоточную модель, обученную на исходном эталоне. Чтобы повысить точность, они находили образцы, где предсказание модели расходилось с меткой аннотатора, и отбирали похожие образцы. Чтобы повысить полноту, они использовали предсказания модели для отбора образцов с высокой неопределённостью (то есть вероятностью ≈ 0,5).

Подытоживая: единого способа собрать эталон нет. Надёжная программа сочетает несколько перечисленных подходов — начинают с опроса пользователей или аннотаторов, а затем используют начальные данные для наращивания меток через активное или полу-контролируемое обучение.

Отступление о написании руководств по разметке: я пообщался с ML-практиками, имеющими опыт построения процессов аннотации для сбора эталона. Вот краткая выжимка их советов:

Ответы на вопросы должны быть бинарными. Вместо шкалы или множественного выбора упростите задачу. Критерии разметки должны быть как можно объективнее. Например, «Это нагота?» объективнее, чем «Это контент для взрослых?». Добавьте метку «Не уверен», чтобы аннотаторы не выбирали вынужденно потенциально неверную метку. Тем не менее это может просто откладывать решение по сложным образцам. Измеряйте согласованность между аннотаторами и калибруйте их между собой — с бинарными метками это проще. Для внутренних аннотаторов рассмотрите метрики вроде WTF@k.

Полезные ресурсы по написанию руководств по разметке включают рассказ DoorDash о лучших практиках построения таксономии и правил разметки. А также руководство Google по релевантности поиска, где они аннотируют результаты поиска по качеству страницы и удовлетворению потребности.

Разделение разметки релевантности поиска на качество страницы (Page Quality) и удовлетворение потребности (Needs Met)

Аугментация данных для устойчивости

После того как мы собрали некоторый исходный эталон, его можно аугментировать, чтобы получить больше эталонных данных — пусть и более низкого качества. Больше данных, особенно более репрезентативных и разнообразных, помогает ML-моделям обучаться устойчивее.

Типичный подход — генерировать синтетические данные на основе имеющегося эталона. DoorDash делал это через случайную аугментацию текста: они меняли порядок предложений в описании и случайным образом удаляли информацию, например категорию меню. Это помогало имитировать разнообразие меню, где у мерчантов нет подробных описаний или категорий. При обучении модели они использовали соотношение 100 синтетических меток к 1 реальной.

Аналогично, Cloudflare генерировал синтетические данные, чтобы повысить разнообразие обучающей выборки. Это улучшило качество ML при классификации вредоносных HTTP-запросов (то есть полезных нагрузок). Цель была в том, чтобы заставить модель сосредоточиться на более высокоуровневых структурных, семантических и статистических аспектах нагрузки, а не на токенах и ключевых словах.

Чтобы создать негативные образцы, они генерировали псевдослучайные строки через распределение вероятностей по сложным токенам. Они также повышали сложность, добавляя такие элементы, как валидные URI, user-agent'ы, XML-контент и даже «опасные» ключевые слова или n-граммы, часто встречающиеся во вредоносных нагрузках. Цель была в том, чтобы десенсибилизировать модель к наличию вредоносных токенов, если у нагрузки нет соответствующей семантики или структуры.

Синтетические данные использовались для аугментации основного набора: сначала модель обучали на всё более сложных синтетических данных, а затем дообучали на реальных. Они также добавляли шум разной сложности к вредоносным и безвредным образцам, чтобы сделать модель устойчивее к атакам с подкладыванием (padding attacks).

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

Другой приём — искать образцы, похожие на размеченные данные. Это сродни активному обучению, где мы находим «самые» интересные образцы для разметки человеком.

В случае Airbnb, после того как проверка человеком подтверждала принадлежность объявления к определённой категории, они использовали предобученные эмбеддинги объявлений, чтобы найти 10 ближайших соседей (они называли это расширением кандидатов). Эти 10 объявлений затем отправлялись на проверку человеку, чтобы подтвердить их принадлежность к той же категории.

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

В другой работе Meta применила ближайших соседей к позитивным меткам перед активным обучением. Они отметили, что данные часто сильно перекошены — релевантна лишь малая доля (1 на 1000 и реже). Поэтому использование ближайших соседей как фильтра сокращало число образцов для рассмотрения при активном обучении. Это повышало эффективность аннотации.

Каскадный паттерн на меньших задачах

В большинстве приложений исходную задачу можно разбить на меньшие задачи и решить через каскадный паттерн. Преимущество в том, что это позволяет простым, дешёвым и низколатентным решениям — таким как эвристики — отсекать часть задачи на верхнем уровне. ML-модели затем выполняют инференс на оставшихся примерах, с которыми не удалось разобраться уверенно.

У Stack Exchange несколько уровней защиты от спама. Первая линия обороны срабатывает, когда спамер постит слишком часто, чтобы это было физически по силам человеку. Спамер получает ошибку HTTP 429 (Too Many Requests) и блокируется или ограничивается по скорости.

Вторая линия обороны основана на эвристиках. В частности, они прогоняют посты через «нечестивое количество регулярных выражений» и некоторые правила. Если пост попадается, он отправляется пользователям на проверку и возможную пометку как спам. Если шесть пользователей помечают его как спам (six flags, лол), пост помечается как спам, а пользователь блокируется, ограничивается по скорости или лишается возможности постить.

Финальная линия обороны — система (на машинном обучении?), которая выявляет посты, наиболее вероятно являющиеся спамом. Они тестировали её в теневом режиме и обнаружили, что она крайне точна. Она ловила почти весь откровенно очевидный спам. В итоге системе разрешили автоматически проставлять три флага, и это резко сократило время до удаления спам-постов.

Время до удаления спама падает: без авто-флага (красный), с 1 авто-флагом (зелёный), с 3 авто-флагами (оранжевый)

Cloudflare также сочетает эвристики и машинное обучение (и другие методы) для выявления бот-трафика. Они привели сравнение: если ML-инференс требует ~50 мс, то сотни эвристик можно применить за ~20 мс.

Их эвристики классифицируют 15% глобального трафика и 30% трафика клиентов сервиса управления ботами. У этих эвристик также самый низкий уровень ложноположительных срабатываний среди механизмов обнаружения — неплохо для кучки операторов if-else! Таким образом, входящий трафик можно сначала отфильтровать эвристиками, исключив 15–30%, прежде чем остаток отправится в машинное обучение.

Meta начала с эвристик на основе правил для классификации чувствительности данных. Эти эвристики использовали подсчёты и соотношения, чтобы оценивать столбцы данных по типам чувствительности. Однако одни лишь эвристики давали посредственную точность классификации, особенно для неструктурированных данных. Поэтому они дополнили правила моделями глубокого обучения, способными использовать дополнительные признаки, такие как имена столбцов и происхождение данных. Это сильно повысило точность.

Uber применил каскадный паттерн, разбив задачу платёжного мошенничества на две части: обнаружение того, есть ли рост тренда мошенничества, и защита от мошенничества в режиме 24/7.

Чтобы обнаружить рост атак мошенников, они обучили несколько прогнозных моделей по измерениям времени заказа (когда заказ выполнен) и времени проведения платежа (когда платёж обработан). Рост мошенничества проявляется как аномалия во временном ряду. Когда это происходит, это сигнализирует о появлении нового паттерна атаки, и аналитики по мошенничеству получают оповещение для расследования.

Для защиты от мошенничества они применяют поиск паттернов (pattern mining) для генерации высокоточных алгоритмов. Аналитики проверяют эти алгоритмы, чтобы минимизировать ложноположительные срабатывания и ненужные инциденты, прежде чем алгоритмы попадут в продакшен. Уже в продакшене эти алгоритмы сканируют входящие транзакции и помечают/блокируют потенциально мошеннические.

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

Сначала модель отправителя оценивает, вероятно ли, что отправитель совершит домогательство. Она обучена на данных участников, чьё домогательство было подтверждено. Признаки включают активность на сайте, поведение при приглашениях и т. д. Затем модель сообщения оценивает контент на предмет домогательства. Она обучена на сообщениях, на которые пожаловались и подтвердили домогательство. Наконец, модель взаимодействия оценивает, является ли разговор домогательством. Она обучена на исторических разговорах, которые привели к домогательству. Признаки включают время отклика, долю сообщений, предсказанных как домогательство, и т. д.

Каскад моделей для выявления домогательств: поведение, сообщение, взаимодействие

Обучение с учителем и без учителя

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

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

Аналогично, Airbnb обучает бинарный классификатор для каждой категории объявлений. Meta тоже использовала бинарные глубокие модели для предсказания классификации данных. Наконец, модель LinkedIn для выявления домогательств выдаёт бинарный результат — домогательство или нет.

На мой взгляд, обычно лучше использовать несколько бинарных классификаторов (MBC), чем единый многоклассовый (SMCC). Эмпирически MBC обычно превосходят SMCC. По опыту DoorDash, SMCC было сложнее калибровать под реальное распределение данных, чем MBC. (Мой опыт схож.)

Во-вторых, MBC более модульны, чем SMCC. Если добавляется новый класс, проще обучить и развернуть новый бинарный классификатор, чем обновлять SMCC новым классом и переобучать его. Это особенно удобно на ранних стадиях использования машинного обучения, когда мы только начали собирать эталон. Например, когда Airbnb собирал метки, они обучали новые бинарные классификаторы только при наличии достаточного объёма обучающих данных.

Тем не менее у MBC есть и недостатки. При классификации элемента нам нужно выполнить инференс по разу через каждый бинарный классификатор. С SMCC достаточно одного инференса. Более того, с ростом числа бинарных классификаторов поддерживать и мониторить MBC может быть операционно сложнее, чем один SMCC.

Если меток достаточно для машинного обучения — обучаем модель; иначе — находим больше образцов для разметки

Ещё один применяемый приём — обнаружение аномалий без учителя. LinkedIn рассказал о преимуществах использования isolation forest без учителя для выявления случаев злоупотреблений.

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

Cloudflare также рассказал об использовании обучения без учителя для выявления плохих ботов. Главное преимущество в том, что, поскольку методы без учителя не зависят от наличия известных меток ботов, они могли обнаруживать ботов, которых никогда не видели раньше. Более того, методы без учителя труднее обойти, потому что аномальное поведение часто является прямым следствием цели бота.

Объяснимость модели и её результатов

Менее упоминаемый, но не менее важный компонент в индустриальных приложениях — объяснимость. Она помогает понять модель и интерпретировать её предсказания.

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

Meta также делала упор на важность признаков. При добавлении нового признака они хотели понять его общее влияние на модель. Они также хотели знать, на что модель обращает внимание, предсказывая ту или иную метку. Чтобы реализовать это, они разработали важность признаков по классам для своих PyTorch-моделей, где важность признака измеряется ростом ошибки предсказания после случайной перестановки этого признака.

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

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

• • •

Уф, это было немало! Спасибо, что прошли со мной этот путь по распространённым паттернам в модерации контента. Коротко напомню:

Собирайте эталон от пользователей, аннотаторов и высокоточных эвристик/моделей. Аугментируйте эталон синтетическими данными или похожими примерами ради устойчивых моделей. Используйте каскадный паттерн, чтобы разбить задачу на части с помощью правил и ML. Сочетайте лучшее из точного обучения с учителем и устойчивого обучения без учителя. Применяйте объяснимость, чтобы понять, как помочь модели и очеловечить вывод.

Какие ещё полезные паттерны есть в этой предметной области? Поделитесь!

Источники

Если это оказалось полезным, пожалуйста, цитируйте эту заметку так:

Yan, Ziyou. (Feb 2023). Content Moderation & Fraud Detection - Patterns in Industry. eugeneyan.com. https://eugeneyan.com/writing/content-moderation/.

или

@article{yan2023content, title = {Content Moderation & Fraud Detection - Patterns in Industry}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2023}, month = {Feb}, url = {https://eugeneyan.com/writing/content-moderation/} }



Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.