Коротко
Большой список тегов не обязательно отправлять модели целиком и просить выбрать подходящие. Есть более устойчивый подход: сначала дать LLM придумать смысловую метку, а затем найти ей ближайший вариант в существующей базе.
Проблема не в том, что LLM не умеет выбирать теги. Проблема в масштабе: когда в блоге 1856 меток, передавать весь словарь в одном запросе становится неудобно и ненадёжно. Модель может потерять часть вариантов или начать выбирать слишком случайно.
Simon Willison описывает другой ход, предложенный Doug Turnbull: не заставлять модель классифицировать текст по закрытому списку. Пусть она сначала предложит новую, «воображаемую» метку — обычным языком и без необходимости точно совпасть с существующим названием.
Затем эта метка превращается в векторное представление — набор чисел, описывающий её смысл. По нему можно найти в уже существующей базе наиболее близкие теги. Например, модель для запроса про коричневый журнальный столик может придумать понятную категорию, а поиск по embeddings сопоставит её с конкретной веткой каталога вроде Coffee Tables.
В этом и заключается неожиданный выигрыш: LLM используется не как справочник, который обязан помнить весь каталог, а как генератор хорошего смыслового запроса к каталогу. Это особенно удобно для старых материалов, которые накопились без разметки: модель помогает понять тему, а финальное название берётся из вашей системы тегов.
Но автоматической точности здесь никто не обещает. Модель может придумать слишком расплывчатую или странную метку, а векторный поиск — подобрать ближайший, но всё же неправильный тег. Поэтому такой конвейер лучше воспринимать как способ резко сократить ручную работу, а не как замену проверке спорных случаев.
Если бы вы выбирали между точным закрытым списком из 1856 тегов и свободной гипотезой с последующим поиском совпадения, какой подход доверили бы архиву своего проекта? Источник: Simon Willison's Weblog