Today

Отбор новостей для блога: фильтр тем вместо стоп-слов

Отбор новостей для блога по смыслу темы — почему фильтр тем работает лучше списка стоп-слов

Коротко: любой контент-конвейер начинается с отбора: какие новости брать в работу. Список стоп-слов кажется простым решением, но он ошибается в обе стороны — выкидывает нужное и пропускает лишнее. Замена — вопрос к модели с вероятностным ответом и три порога вместо жёсткого «да или нет».

Где ломаются стоп-слова

Реальный случай из нашего же конвейера. В списке исключений было слово, которое встретилось в заголовке новости про стратегию рекламной системы, — и важный материал улетел в архив. Обратная ситуация: новость по «разрешённой» теме оказалась короткой заметкой ни о чём, но фильтр её пропустил, и время ушло на бессмысленную статью.

Причина одна: слово в заголовке не равно теме материала.

Что спрашивать у модели

Три вопроса за один вызов:

  1. Подходит ли под наши темы? — да или нет, ответом приходит вероятность.
  2. Какая это тема? — выбор из вашего списка рубрик.
  3. Насколько ценно читателю? — оценка по шкале, которую вы описали словами: от «пустая заметка» до «меняет работу специалиста».

Дальше решает не модель, а ваш код:

Вероятность Что делаем выше 0,8 берём в работу автоматически 0,4–0,8 показываем человеку ниже 0,4 в архив с пометкой причины

Пошаговая настройка

Что нужно заранее: список ваших тем и антитем, доступ к Jev, 30–50 заголовков с ручной разметкой «брали / не брали».

  1. Выпишите рубрики так, как понимает их читатель, а не так, как называется раздел на сайте-источнике.
  2. Для каждой рубрики добавьте поле «не для этого случая» — именно оно разводит похожие темы. Например: «обновления рекламных стратегий — да, новости конструктора сайтов — нет».
  3. Соберите состояние: заголовок, подзаголовок, первые абзацы. Этого достаточно, полный текст не нужен.
  4. Задайте три вопроса одним вызовом.
  5. Прогоните размеченную выборку и подберите пороги. Смотрите не на среднюю точность, а на две ошибки отдельно: сколько нужного потеряли и сколько мусора пропустили.
  6. Запишите в базу решение и причину — потом будете понимать, почему материал не взяли.
  7. Раз в месяц пересматривайте спорную зону: то, что попадало в интервал 0,4–0,8, показывает, где рубрики описаны нечётко.

Что это даёт

  • Ничего не теряется по случайному слову. Решение принимается по смыслу материала.
  • Меньше ручного просмотра. Человеку остаётся только спорная зона, обычно это единицы материалов в неделю.
  • Тема сразу известна. Ответ на второй вопрос — это готовая рубрика для будущей статьи.

Следующий шаг конвейера — проверка готового текста перед публикацией. Как она устроена, в статье про автоматический ОТК статей.

Что записывать в базу

Одного решения мало — нужен след, по которому потом можно разобраться:

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

Эта же таблица потом превращается в отчёт: сколько новостей прошло, сколько ушло в архив, по каким темам публикуетесь чаще всего.

Коротко в цифрах

  • Три вопроса задаются одним вызовом: тема, рубрика, ценность для читателя.
  • Пороги из практики: выше 0,8 — в работу, 0,4–0,8 — человеку, ниже 0,4 — в архив.
  • Для оценки достаточно заголовка и первых абзацев, полный текст не нужен.
  • Настройка порогов — на 30–50 размеченных заголовках.
  • Спорная зона обычно составляет единицы материалов в неделю.

FAQ

Нужен ли полный текст новости для оценки? Нет, хватает заголовка и первых абзацев. Это дешевле и быстрее.

Что делать со спорной зоной? Показывать человеку. Это и есть главная экономия: решения принимаются автоматически там, где всё ясно.

Как часто менять пороги? Когда меняется тематика блога или появляются новые рубрики. В спокойном режиме — раз в пару месяцев.

Можно ли так же отбирать источники? Да, тот же приём работает для лент, каналов и рассылок: вопрос «нам это вообще нужно?» задаётся на уровне источника.

Нужно настроить Яндекс Директ или контент-завод? Пишите мне лично: @albert_dzh