Отбор новостей для блога: фильтр тем вместо стоп-слов
Коротко: любой контент-конвейер начинается с отбора: какие новости брать в работу. Список стоп-слов кажется простым решением, но он ошибается в обе стороны — выкидывает нужное и пропускает лишнее. Замена — вопрос к модели с вероятностным ответом и три порога вместо жёсткого «да или нет».
Где ломаются стоп-слова
Реальный случай из нашего же конвейера. В списке исключений было слово, которое встретилось в заголовке новости про стратегию рекламной системы, — и важный материал улетел в архив. Обратная ситуация: новость по «разрешённой» теме оказалась короткой заметкой ни о чём, но фильтр её пропустил, и время ушло на бессмысленную статью.
Причина одна: слово в заголовке не равно теме материала.
Что спрашивать у модели
- Подходит ли под наши темы? — да или нет, ответом приходит вероятность.
- Какая это тема? — выбор из вашего списка рубрик.
- Насколько ценно читателю? — оценка по шкале, которую вы описали словами: от «пустая заметка» до «меняет работу специалиста».
Дальше решает не модель, а ваш код:
Вероятность Что делаем выше 0,8 берём в работу автоматически 0,4–0,8 показываем человеку ниже 0,4 в архив с пометкой причины
Пошаговая настройка
Что нужно заранее: список ваших тем и антитем, доступ к Jev, 30–50 заголовков с ручной разметкой «брали / не брали».
- Выпишите рубрики так, как понимает их читатель, а не так, как называется раздел на сайте-источнике.
- Для каждой рубрики добавьте поле «не для этого случая» — именно оно разводит похожие темы. Например: «обновления рекламных стратегий — да, новости конструктора сайтов — нет».
- Соберите состояние: заголовок, подзаголовок, первые абзацы. Этого достаточно, полный текст не нужен.
- Задайте три вопроса одним вызовом.
- Прогоните размеченную выборку и подберите пороги. Смотрите не на среднюю точность, а на две ошибки отдельно: сколько нужного потеряли и сколько мусора пропустили.
- Запишите в базу решение и причину — потом будете понимать, почему материал не взяли.
- Раз в месяц пересматривайте спорную зону: то, что попадало в интервал 0,4–0,8, показывает, где рубрики описаны нечётко.
Что это даёт
- Ничего не теряется по случайному слову. Решение принимается по смыслу материала.
- Меньше ручного просмотра. Человеку остаётся только спорная зона, обычно это единицы материалов в неделю.
- Тема сразу известна. Ответ на второй вопрос — это готовая рубрика для будущей статьи.
Следующий шаг конвейера — проверка готового текста перед публикацией. Как она устроена, в статье про автоматический ОТК статей.
Что записывать в базу
Одного решения мало — нужен след, по которому потом можно разобраться:
Поле Зачем ссылка и дата новости чтобы не брать дубли вероятность по каждому вопросу видно, насколько уверенной была оценка выбранная тема сразу готовая рубрика для статьи решение и порог понятно, почему материал взяли или отложили кто подтвердил если решение принимал человек
Эта же таблица потом превращается в отчёт: сколько новостей прошло, сколько ушло в архив, по каким темам публикуетесь чаще всего.
Коротко в цифрах
- Три вопроса задаются одним вызовом: тема, рубрика, ценность для читателя.
- Пороги из практики: выше 0,8 — в работу, 0,4–0,8 — человеку, ниже 0,4 — в архив.
- Для оценки достаточно заголовка и первых абзацев, полный текст не нужен.
- Настройка порогов — на 30–50 размеченных заголовках.
- Спорная зона обычно составляет единицы материалов в неделю.
FAQ
Нужен ли полный текст новости для оценки? Нет, хватает заголовка и первых абзацев. Это дешевле и быстрее.
Что делать со спорной зоной? Показывать человеку. Это и есть главная экономия: решения принимаются автоматически там, где всё ясно.
Как часто менять пороги? Когда меняется тематика блога или появляются новые рубрики. В спокойном режиме — раз в пару месяцев.
Можно ли так же отбирать источники? Да, тот же приём работает для лент, каналов и рассылок: вопрос «нам это вообще нужно?» задаётся на уровне источника.
Нужно настроить Яндекс Директ или контент-завод? Пишите мне лично: @albert_dzh