Определение минимального размера LLM для классификации: граф со-встречаемости | AiManual
AiManual Logo Ai / Manual.
23 Апр 2026 Гайд

Как определить минимальный размер LLM для классификации: метод на основе графа со-встречаемости слов

Научитесь вычислять минимальное количество параметров LLM для задач классификации без перебора. Метод на графе со-встречаемости слов: шаги, метрики, подводные к

Больше не значит лучше

Вы серьезно собрались запускать 405B модель, чтобы отличать спам от не спама? Или ставить тональность на отзывах? Бросьте. В 2026 году у нас есть десятки моделей от 1.5B до 7B, которые справляются с узкой классификацией не хуже GPT-4, но стоят копейки. Проблема в другом: как заранее, до обучения и даже до выбора архитектуры, понять, сколько параметров вам реально нужно? Тыкать пальцем в небо — дорого. Перебирать все подряд — долго.

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

Суть: не количество данных, а сложность лексических связей определяет, сколько нейронов нужно, чтобы их выучить.

Граф со-встречаемости: что это и зачем он вам сдался

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

Зачем нужна эта конструкция? Потому что размерность пространства признаков — это не размер словаря. Реальная сложность задачи — это то, как слова переплетаются между собой. Если в вашем датасете слова почти не пересекаются (каждое предложение про свою тему), то граф распадется на изолированные компоненты. И для их разделения хватит крошечного персептрона. Но если слова перепутаны — один контекст плавно перетекает в другой — вам нужна модель с глубиной и шириной, способная уловить эти сложные взаимодействия.

Геометрия внутренних представлений LLM напрямую связана с топологией этого графа. Если граф со-встречаемости — разреженный и слабо связный, то модель может выучить его и мелкой «линейкой». Если же граф плотный, с маленьким диаметром и высокой кластеризацией — придется раскошелиться на параметры.

Ключевые метрики графа, которые скажут правду

Мы не просто так строим граф. Нам нужны три характеристики, которые лягут в основу формулы минимального числа параметров.

  1. Количество вершинV. Размер словаря после удаления стоп-слов и редких токенов. Чем больше слов, тем шире должен быть первый embedding-слой.
  2. Средняя степень узлаk_avg. Среднее количество различных соседей у слова. Грубо говоря, сколько разных контекстов слово умеет создавать. Высокая средняя степень — признак полисемии и необходимости в большем числе скрытых состояний.
  3. Коэффициент кластеризацииC. Мера того, насколько соседи слова сами являются соседями друг другу. Высокая кластеризация — локальные шаблоны, низкая — глобальные зависимости. Для классификации важна и та, и другая.

Есть ещё диаметр графа — максимальное кратчайшее расстояние между вершинами. Но для задач классификации он редко играет решающую роль, так как трансформеры могут «видеть» всё предложение сразу.

Ошибка: считать только количество вершин. Я видел проекты, где брали DistilBERT (67M) для датасета с 50k уникальных слов, а граф со-встречаемости имел среднюю степень 120. Результат — accuracy на уровне случайного угадывания. Модель просто не могла «уместить» столько связей.

Формула минимального размера: от графа к параметрам

Эмпирически, число параметров N_params для трансформера-классификатора должно удовлетворять неравенству:

N_params ≥ α · V · k_avg · C

Где α — коэффициент, подбираемый экспериментально (обычно от 0.3 до 1.5). Если у вас бинарная классификация с ярко выраженными признаками, берите α = 0.3. Если многоклассовая с пересекающимися темами — α = 1.0 и выше.

Почему именно такое произведение? V · k_avg — это общее число ребер в графе. Грубо — количество контекстных связей, которые модель должна запомнить. C добавляет поправку на запутанность: чем выше кластеризация, тем больше нейронов нужно, чтобы разделить локальные группы.

Пример. Допустим, у вас датасет техподдержки. V = 15k, k_avg = 50, C = 0.2, α = 0.5. Получаем N_params = 0.5 · 15000 · 50 · 0.2 = 75 000. Странно мало, правда? Но это только память для матрицы весов первого слоя — а на самом деле в трансформере есть многоголовое внимание, FFN, нормы. Реальная модель будет в 10-20 раз больше. Поэтому результат надо умножить на коэффициент, учитывающий архитектуру (назовем его β). Для базового трансформера β ≈ 12. Итого 900k — порядка 1M параметров. Уже похоже на правду.

Сравните: TinyBERT (14.5M) или DistilBERT (67M). Ваша задача может быть решена моделью в 1-2M, если граф не плотный. А значит — экономия ресурсов в десятки раз.

💡
Чтобы быстро визуализировать граф и проверить распределение степеней, можно использовать LLMPlot.com — там есть режим графов для NLP.

Пошаговый план: от сырых данных до выбора модели

1 Сбор и очистка корпуса

Соберите репрезентативную выборку ваших текстов. Не всю генеральную совокупность — достаточно 10-20 тысяч предложений. Удалите стоп-слова (их почти всегда можно выбросить из графа — они и так не несут смысла для классификации). Оставьте только слова с частотой > 5, чтобы избавиться от мусора.

2 Построение графа со-встречаемости

Для каждого предложения (или окна длины 10) проходите по всем парам слов, увеличивая вес ребра. Итоговый граф — взвешенный, но для метрик мы часто используем бинарную версию (если вес > 0). Не забудьте про симметрию: граф неориентированный.

3 Вычисление метрик и подстановка в формулу

Используйте сетевые библиотеки (NetworkX, iGraph) для подсчета V, k_avg, C. Затем подставьте в формулу с α=0.5 (начальное значение), не забудьте умножить на β=12. Получите оценку числа параметров.

4 Выбор ближайшей модели

Округлите вверх до ближайшего известного размера: 1M, 5M, 10M, 50M, 100M. Сверьтесь с актуальными моделями на апрель 2026: Qwen2.5-0.5B, Llama-3.2-1B, SmolLM-360M и т.д. Если ваша оценка дала 3M — берите SmolLM-360M (360M) с дообучением. Звучит как overkill? Нет, потому что формула дает нижнюю границу для классификации на уровне логистической регрессии над эмбеддингами. Трансформер с attention требует запаса.

5 Валидация

Дообучите выбранную модель и замерьте accuracy. Если результат хуже ожидаемого — увеличьте α на 0.2 и повторите. Если переобучение сильное — можно даже уменьшить α. Быстрый чит: если модель сходу даёт >95%, значит, задача слишком простая, и вы могли бы взять модель ещё меньше. Но для production лучше оставить запас.

Типичные грабли (наступил лично)

  • Игнорирование встроенных стоп-слов. Граф со-встречаемости без удаления стоп-слов даёт среднюю степень, завышенную в 2-3 раза. Потом модель учит шум, а не признаки.
  • Окно слишком маленькое или слишком большое. Окно = 2 токена — это биграммы, окно = всё предложение — теряется локальность. Экспериментально: окно 5-7 токенов оптимально для классификации.
  • Путаница между глобальным и локальным графом. Если ваша задача — классификация целого документа, а не предложения, стройте граф на уровне документа. Иначе связи между далекими предложениями потеряются.
  • Самонадеянность. Формула даёт лишь приблизительную оценку. Я видел случаи, когда граф был простой, а задача — с подвохом (например, сарказм). Тут без тестирования разными промптами и дообучения не обойтись.

Почему это работает (короткое объяснение для тех, кому нужно доказательство)

Граф со-встречаемости кодирует структуру совместных вхождений, которую модель вынуждена имитировать. Каждый слой трансформера, по сути, выполняет операцию агрегации по этому графу (self-attention — это динамическая версия графа). Если статический граф (ваш корпус) содержит определённое топологическое разнообразие, то для его представления нужно примерно столько же скрытых размерностей, сколько рёбер в среднем на узел. А количество параметров — это произведение размерностей. Отсюда формула.

Подробнее про геометрию представлений можно почитать в статье «Как мыслят Llama-3 и Qwen-2.5» — там наглядно показано, как трансформеры искажают пространство под задачу.

Где брать маленькие модели для экспериментов

Не обязательно гонять огромные модели. Для классификации отлично подходят SmolLM (135M, 360M), TinyLlama-1.1B, Qwen2.5-0.5B. Если нужно совсем микро — DistilBERT или даже BERT-Tiny (4M). Большинство из них можно запустить локально через Ollama или llama.cpp. Обзор фреймворков для локального запуска LLM в 2025 поможет выбрать подходящий.

И да, я знаю, что многие сразу лепят LoRA на Llama-3-8B, даже если задача — отличать «хорошо» от «плохо». Не делайте так. Сначала постройте граф. Посчитайте. Удивитесь.

А что, если граф не помог? (FAQ / Типичные вопросы)

Вопрос Ответ
Формула дала 0.5M, но модель с 1M не сходится. Почему? Скорее всего, коэффициент α выбран слишком низким. Попробуйте 1.0. Или пересчитайте граф с другим окном.
Граф получился с одним гигантским компонентом (диаметр 3). Что это значит? Задача очень связная — каждый токен достигает любого за 3 шага. Это требует широких матриц attention. Поднимайте β до 20.
Можно ли автоматизировать подбор модели через граф? Да, напишите скрипт, который строит граф, вычисляет метрики и выдает список моделей с нужным числом параметров. Встройте его в пайплайн CI/CD.

Последний совет: не оптимизируйте преждевременно

Да, графовый метод помогает не переплачивать за гигантские модели. Но помните: в production важнее стабильность, а не минимализм. Если у вас есть бюджет на 7B модель — используйте её. Но теперь вы знаете, как обосновать, что вам хватит 70M, и сэкономить деньги команде. И если вам начнут рассказывать про «уникальные паттерны» в данных — покажите им граф со-встречаемости. Пусть докажут, что их задача сложнее, чем случайный лес на мешке слов.

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

Подписаться на канал