Настройка порога уверенности и фильтрация результатов

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

Порог уверенности (Confidence Threshold)

Порог уверенности — это значение, определяющее, какие предсказания модели считаются достаточными для дальнейшей обработки. В ml5.js каждая модель классификации возвращает массив объектов, содержащих метку (label) и вероятность (confidence). Например, при использовании модели imageClassifier:

const classifier = await ml5.imageClassifier('MobileNet');
const results = await classifier.classify(img);
console.log(results);

Структура results выглядит так:

[
  { "label": "cat", "confidence": 0.85 },
  { "label": "dog", "confidence": 0.10 },
  { "label": "fox", "confidence": 0.05 }
]

Чтобы учитывать только надёжные предсказания, используется порог уверенности:

const threshold = 0.7;
const reliableResults = results.filter(r => r.confidence >= threshold);

Ключевые моменты:

  • Значение confidence варьируется от 0 до 1.
  • Порог можно динамически менять в зависимости от контекста: для критичных задач лучше использовать высокий порог (0.8–0.9), для менее строгих — низкий (0.5–0.6).
  • Фильтрация по порогу снижает вероятность ложных срабатываний, но может уменьшить количество доступных результатов.

Фильтрация и сортировка результатов

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

const sortedResults = reliableResults.sort((a, b) => b.confidence - a.confidence);
console.log(sortedResults[0]); // Наиболее надёжное предсказание

Таким образом достигается несколько целей одновременно:

  1. Отбрасываются маловероятные варианты.
  2. Получается отсортированный список, готовый к отображению или дальнейшей обработке.
  3. Повышается стабильность работы приложения.

Настройка порога при потоковой классификации

Для моделей, работающих в реальном времени (например, с веб-камерой), порог уверенности можно использовать для уменьшения «шумного» вывода:

function gotResult(error, results) {
  if (error) {
    console.error(error);
    return;
  }

  const threshold = 0.6;
  const filtered = results.filter(r => r.confidence >= threshold);
  
  if (filtered.length > 0) {
    displayLabel(filtered[0].label, filtered[0].confidence);
  }
}

classifier.classify(video, gotResult);

Здесь displayLabel — функция, которая обновляет пользовательский интерфейс только при уверенных предсказаниях. Такой подход позволяет сократить ложные срабатывания и сделать визуализацию более стабильной.

Комбинированная фильтрация

Для более сложных сценариев можно комбинировать порог уверенности с дополнительными правилами, например, исключать определённые метки или учитывать только топ-N результатов:

const topN = 3;
const forbiddenLabels = ['unknown', 'background'];

const filteredTop = results
  .filter(r => r.confidence >= threshold && !forbiddenLabels.includes(r.label))
  .slice(0, topN);

Эта техника позволяет:

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

Настройка порога в зависимости от задачи

  • Распознавание изображений: высокий порог (0.75–0.9) уменьшает риск ложных совпадений.
  • Классификация аудио: средний порог (0.6–0.8), так как данные часто шумные.
  • Обработка текста: порог может быть низким (0.5–0.7), если важна полнота результатов, а последующая обработка их уточняет.

Практические рекомендации

  • Всегда проверять распределение значений confidence для конкретной модели на реальных данных.
  • Для интерактивных приложений рекомендуется динамически адаптировать порог в зависимости от качества входного потока.
  • Визуализировать уверенность предсказаний помогает понять поведение модели и отладить фильтры.

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