ДокументацияПрактические руководства (Cookbooks)Иерархическая классификация документов

Иерархическая классификация документов

Classifies documents through deep patent, retail product, biomedical, and source-code hierarchies using parallel beam search over TypeSafe Choice probabilities.

Классификация документов по глубоким иерархиям патентов, товарных категорий, биомедицинских терминов и исходного кода с использованием параллельного лучевого поиска (beam search) по вероятностям TypeSafe Choice.

Огромный объем данных существует в виде структурированных иерархий: таксономии, структуры файловых систем, каталоги веб-сайтов, кодовые базы, организационные структуры, биологические онтологии, навыки LLM, политики модерации и т. д. Задача иерархической классификации заключается в прохождении по дереву к правильному листовому узлу (leaf node), который и представляет собой итоговый класс. Это идеальный сценарий для примитива TypeSafe Choice. Наиболее вероятный лист можно найти, классифицируя документ в каждом узле (начиная с корня) и итеративно переходя к следующему наиболее вероятному дочернему узлу вплоть до достижения листа (жадный поиск / Greedy Search).

Параллельная природа API TypeSafe также позволяет исследовать сразу несколько путей одновременно с помощью параллельных вопросов в рамках лучевого поиска (Beam Search) для повышения точности. Вызовы API TypeSafe в этом руководстве параллельно оценивают K путей иерархии. Лучевой поиск сохраняет лучшие K путей по среднему геометрическому вероятностей переходов: product(edge_probabilities) ** (1 / decisions), отсекая остальные. Вероятность нормализуется по длине пути, благодаря чему поверхностные и глубокие листья сравниваются справедливо.

Декомпозиция задачи на иерархию дает дополнительные преимущества:

  • Наблюдаемость (Observability)
    • выявление узлов, в которых чаще всего возникают ошибки классификации;
    • измерение частоты прохождения каждого узла и ребра.
  • Тестируемость (Testability)
    • модульное тестирование и оценка влияния обновлений структуры иерархии на качество классификации.
  • this is the way

Иерархии, используемые в этом руководстве

  • CPC 2026.05: патентная классификация, от общих технологических разделов до конкретных изобретений.
  • Shopify 2026-02: таксономия розничных товаров, от отделов магазина до специфических типов продуктов.
  • MeSH 2026: медицинские предметные рубрики (Medical Subject Headings), от широких областей до конкретных заболеваний. MeSH представляет собой направленный ациклический граф (DAG), поэтому один дескриптор может находиться под несколькими родителями; в демо развернуты его официальные пути по номерам деревьев.
  • Файлы CookSafe: иерархия репозитория примеров TypeSafe, поиск от каталогов к файлам исходного кода.

Методы

  • Жадный поиск (Greedy search): выбирает дочерний узел с наибольшей локальной вероятностью и отбрасывает все альтернативы. Ошибку, допущенную на раннем этапе, исправить невозможно.
  • Лучевой поиск (Beam search): сохраняет K правдоподобных путей и параллельно классифицирует каждый фронтир. Дополнительные свидетельства на глубоких уровнях способны исправить неоднозначное решение, принятое в начале пути. Лист пути с наибольшей средней геометрической вероятностью становится итоговой классификацией.
  • TypeSafe Choice: каждый узел представляет собой вопрос Choice, полное распределение вероятностей которого соответствует исходящим ребрам. Каждая ветвь луча выполняется параллельными вопросами, поэтому дополнительное ветвление практически не увеличивает общее время ответа (wall-clock latency).
  • Формулы:
    • path_score = product(edge_probabilities) ** (1 / decisions)
      • используется для отсечения (прунинга) и сравнения путей.
    • separation = top_path_score / second_path_score
      • полезная метрика уверенности (не используется для отсечения).
      • соотношение сравнивает среднее геометрическое лучшего пути с его ближайшим соперником: значение близкое к означает неопределенность, большое значение говорит об уверенном отрыве.
  • Замечания по метрикам:
    • можно использовать другие метрики, например min(top_prob/second_top_prob), оптимизирующую пути с однозначными решениями на каждом шаге;
    • используйте exp(mean(log(probs))) вместо product(edge_probabilities) ** (1 / decisions) во избежание потери точности чисел с плавающей точкой в очень глубоких иерархиях (>10 уровней).

Загрузка и визуализация примеров иерархий

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

PYTHON EXPANDABLE THEME={NULL} api.wedstack.ru/v1

Реализация жадного и лучевого поиска

Каждый набор узлов-братьев (siblings) превращается в один вопрос Choice, после чего реализуются обе стратегии обхода дерева и сохраняются вероятности, необходимые для построения диаграмм.

PYTHON EXPANDABLE THEME={NULL} api.wedstack.ru/v1

Сравнение методов

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

PYTHON EXPANDABLE THEME={NULL} api.wedstack.ru/v1

Результаты

Для каждого примера известен эталонный лист. Лучевой поиск совпал с эталоном в 4 из 4 случаев; жадный поиск — в 2 из 4. Сохранение трех путей луча позволило восстановить правильную классификацию для CPC patents и Shopify products.

Иерархия Ожидаемый лист Лист Greedy Лист Beam K=3 Greedy верен Beam верен
CPC patents A01K31/12 Perches for poultry or birds, e.g. roosts E99Z99/00 Subject matter not otherwise provided for in this section A01K31/12 Perches for poultry or birds, e.g. roosts нет да
Shopify products Cat Window Beds & Perches Pet Chairs Cat Window Beds & Perches нет да
MeSH biomedical subjects C06.405.469.432.500 Crohn Disease C06.405.469.432.500 Crohn Disease C06.405.469.432.500 Crohn Disease да да
CookSafe files retrievers.py retrievers.py retrievers.py да да

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

CPC patents

Shopify products

MeSH biomedical subjects

CookSafe files