Skip to content
Guides6 min read

Модели принятия решений как дешёвый первый уровень разметки

Модель принятия решений оценивает все варианты за один прямой проход без генерации текста. Это первый уровень разметки перед LLM для вопросов с немногими вариантами.

Potato Team

Модель принятия решений размечает вопрос с фиксированным выбором за один прямой проход и возвращает вероятность для каждого варианта, ничего не генерируя. Ставьте её первым уровнем каскада разметки на вопросах «один из N» с несколькими вариантами, отправляйте объекты, в которых она не уверена, в LLM и сертифицируйте её порог на слепой человеческой выборке, потому что её уверенность может оставаться высокой на входах, где она ошибается.

Модель принятия решений представляет собой классификатор, который принимает фрагмент текста и набор типизированных вопросов и возвращает вероятность каждого ответа. Она не генерирует текст, поэтому не может написать промпт, обоснование или правило. Laya является одной из открытых моделей такого рода. Её карточка модели указывает английский чекпойнт на энкодере ModernBERT-large с 421 млн параметров под лицензией Apache 2.0 и многоязычный чекпойнт с 322 млн параметров. API /v1/systemone отдаёт ответ того же рода по HTTP, от хостингового Jev, OpenJev или собственного сервера Laya.

Где первый уровень экономит деньги

Каскад разметки опрашивает модели по порядку, обычно от самой дешёвой к самой способной, и передаёт объект дальше, только если текущая модель недостаточно уверена. Когда в корпусе велика доля лёгких объектов, дешёвая модель, уверенно размечающая их, оставляет LLM меньший и более трудный остаток. Экономия зависит от этой доли, поэтому измерьте её на своих данных, прежде чем строить на ней планы.

Модель принятия решений подходит для первого уровня, потому что отвечает на все варианты за один проход, и вопрос с пятью метками стоит одного прямого прохода без генерации текста. Её выходные вероятности и служат оценкой уверенности, поэтому ей не нужны ни уточняющий вопрос, ни повторная выборка. Кроме того, она работает на CPU. Карточка модели сообщает от 193 до 464 мс на запрос на CPU с заранее загруженными чекпойнтами и 39,5 мс для английского чекпойнта на GPU T4.

Ограничения, указанные для Laya

Четыре из этих ограничений взяты из карточки модели Laya, а пятое, о шкалах оценок, из документации Potato:

  • Много вариантов. На бенчмарке намерений Banking77 карточка сообщает для Laya точность 0,425 на 77 метках против 0,870 у Jev на 72. Варианты делят фиксированный бюджет токенов, поэтому длинные списки меток вытесняют друг друга. Документация Potato также отмечает, что на вопросах с 11 и более вариантами Laya предупреждает, что её температура вне допустимого диапазона, и обрезает её.
  • Другие письменности на английском чекпойнте. Карточка сообщает для английского чекпойнта точность 0,000 и уверенность 0,952 на кхмерском тексте. Порог уверенности не может поймать ошибку, в которой модель уверена.
  • Точность в режиме zero-shot. Карточка сообщает, что базовые чекпойнты в режиме zero-shot находятся около уровня случайности на её бенчмарке типизированных решений: 0,362 против 0,318 у случайного и 0,461 у базового уровня мажоритарного класса, и называет Laya «быстрой основой для специализации, а не движком решений zero-shot».
  • Сырая калибровка. Карточка сообщает, что laya поставляется излишне уверенной, со средней ожидаемой ошибкой калибровки 0,466, которая падает до 0,081 после переподбора температур на ваших собственных данных. Калибровка зависит от предметной области, поэтому порог, выбранный на чужих данных, не переносится.
  • Шкалы оценок. Документация Potato отмечает, что на схемах likert и slider оценки Laya едва следуют шкале, как бы ни был сформулирован вопрос.

В совокупности эти ограничения говорят о том, что модель принятия решений стоит держать на вопросах «один из N» с несколькими вариантами и на том языке, на котором обучен её чекпойнт. Выбирайте её порог по человеческим меткам на своём корпусе.

Модель принятия решений в Potato

Potato 2.11 добавляет два типа эндпоинтов для моделей принятия решений. laya запускает Laya внутри процесса Potato и требует extra decision, pip install 'potato-annotation[decision]', который тянет за собой torch и transformers. systemone обращается к любому серверу с API /v1/systemone и требует только base_url. Оба работают на схемах radio, select, likert и slider, а Solo Mode не запускается, если такая модель назначена размечать схему multiselect, спанов или свободного текста.

В движке разметки модель принятия решений становится источником decision, стоящим первым в каскаде. Этот фрагмент текстового примера, поставляемого с Potato, ставит Laya перед небольшой LLM в Ollama и сертифицирует пару на цель в 10% ошибок при доверии 90%, которое в Potato используется по умолчанию:

yaml
labeling_engine:
  enabled: true
  sources:
    - id: laya
      kind: decision
      endpoint_type: laya
      model: convaiinnovations/laya
      options:
        device: cpu
    - id: llm
      kind: llm
      endpoint_type: ollama
      model: llama3.2:3b
      base_url: http://localhost:11434
      max_tokens: 200
  cascade: [laya, llm]
  contracts:
    - id: accuracy
      kind: selective_risk
      schema: sentiment
      error: 0.1
      confidence: 0.9

Движок выбирает порог уверенности Laya на одной половине слепой человеческой выборки и проверяет его на другой, так что порог берётся из вашего корпуса, а не из карточки модели. Пока dev-половина выборки не зафиксирует порог для Laya, LLM размечает каждый объект. После этого LLM видит только объекты, в которых Laya не уверена, и калибровочную выборку.

В прогоне, описанном в README примера, с Gemma 12B в роли LLM, порог Laya так и не был зафиксирован, и все принятые метки дала LLM, поэтому прежде чем рассчитывать на первый уровень, измерьте его вклад на своём корпусе. Поскольку движок проверяет принятые метки каждого уровня отдельно, уверенный провал вроде случая с кхмерским текстом проявится как ошибки в сертификационной выборке, если выборка охватывает такие входные данные. Контракт distributional также может использовать полный вектор вероятностей Laya, что подходит для субъективных вопросов, где разметчики расходятся.

В Solo Mode модель принятия решений стоит в labeling_models и служит первым уровнем confidence_routing. Solo Mode также нужна генеративная модель в revision_models, потому что модели принятия решений не могут писать промпты и правила, которые создаёт его цикл ревизии.

Проверка модели принятия решений перед полным прогоном

Прежде чем пропускать через модель весь корпус, запустите её на нескольких десятках объектов, которые вы уже разметили. Кнопка Try on 10 items в Solo Mode делает это для промпта, а в движке potato label run с последующим potato label status показывает, сколько ещё меток нужно порогу каждого уровня и какой источник дал ошибки. Уровень, не прошедший сертификацию, ничего не принимает и отправляет объекты выше своего порога людям, а не в LLM, и тогда бюджет человеческих меток уходит на объекты, которые могла бы разметить LLM. Если уровень модели принятия решений раз за разом не проходит сертификацию, уберите его из каскада.

Что дальше