Curating LLM data – Hamel’s Blog - Hamel Husain
Hamel Husain рассказывает, почему стоит создавать собственные инструменты для разметки и курирования данных при работе с LLM, а не полагаться на готовые вендорские решения. Он перепробовал Spacy Prodigy, Argilla и Lilac, но столкнулся с ограничениями: либо сложно адаптировать под конкретные задачи, либо не хватает базовых функций сортировки и фильтрации. Автор подчёркивает, что великие AI-исследователи (как Andrej Karpathy с ImageNet) лично смотрят на данные и строят инфраструктуру для быстрой ручной инспекции. После сравнения Gradio, Panel, Streamlit и Shiny For Python он выбрал последний за нативную интеграцию с Quarto, реактивную модель, компактный API и поддержку WASM. По его опыту, приложения на Shiny требуют меньше кода и понятнее, чем альтернативы.
TLDR
Я считаю, что многим стоит создавать собственные инструменты для разметки и курирования данных для LLM. Во многих ситуациях выгоды значительно перевешивают затраты, особенно при использовании универсальных фронтенд-фреймворков. Эта задача слишком критична, чтобы отдавать её на аутсорс без тщательного обдумывания. Кроме того, не стоит на раннем этапе оказываться в плену ограничений вендорского инструмента.
Я рекомендую Shiny For Python по причинам, обсуждаемым здесь. Я бы не рекомендовал Streamlit по причинам, обсуждаемым здесь.
Предыстория
Один паттерн, который я заметил: великие AI-исследователи готовы вручную изучать массу данных. И более того, они строят инфраструктуру, которая позволяет им быстро инспектировать данные вручную. Хотя это и не выглядит престижно, ручное изучение данных даёт ценные интуиции о задаче. Канонический пример — Andrej Karpathy, который сам выполнял задачу 2000-классовой классификации на ImageNet. — Jason Wei, AI-исследователь в OpenAI
Я полностью согласен с Jason. Думаю, люди недостаточно смотрят на свои данные. Создание собственных инструментов, позволяющих быстро сортировать и курировать данные, — одно из самых высокоэффективных занятий при работе с LLM. Изучение и курирование собственных данных критично как для оценки, так и для дообучения.
Что я пробовал
Изначально я старался избежать создания чего-либо самостоятельно. Я попробовал следующих вендоров, предоставляющих инструменты для курирования и ревью данных:
Вендоры
Эти инструменты находятся на разных стадиях зрелости. Я общался с разработчиками всех этих продуктов — они очень отзывчивы, дружелюбны и осознают свои ограничения. Ожидаю, что эти инструменты значительно улучшатся со временем.
Spacy Prodigy: Это был мой любимый «готовый» инструмент/фреймворк. У них самый чистый UI. Однако мне было довольно сложно быстро адаптировать его под мои конкретные нужды. У них отличные возможности для множества разных NLP-задач. В итоге я вдохновился их UI и построил свой собственный инструмент. Argilla: У этой платформы много функциональности, однако LLM-функциональность меня не устроила. Я не мог делать простых вещей вроде сортировки, фильтрации и разметки. Их LLM- и не-LLM-функциональность имеют очень разные API, что на данный момент делает всё довольно фрагментарным. Думаю, у платформы есть потенциал, когда она дозреет. Lilac: Я обнаружил, что это скорее просмотрщик датасетов, чем инструмент, позволяющий размечать и курировать данные. Поэтому он не подошёл под мои нужды. Пользовательский интерфейс не показался мне особенно хакабельным/расширяемым.
При работе с этими вендорами мне стало ясно одно: важно иметь возможность дорабатывать эти инструменты под свои конкретные нужды. У каждой компании, с которой вы работаете, будет идиосинкразический технологический стек и инструменты, которые вы, возможно, захотите интегрировать в инструмент разметки данных. Это привело меня к созданию собственных инструментов на универсальных фреймворках.
Универсальные фреймворки
В Python есть действительно отличные фронтенд-фреймворки, которыми легко пользоваться, например Gradio, Panel и Streamlit. Появился новичок — Shiny For Python, и после оценки всех вариантов он стал моим фаворитом.
Причины, по которым Shiny понравился мне больше всего:
Нативная интеграция с Quarto. Мощная и шустрая реактивная модель. Небольшой API, который легко выучить и держать в голове. Потрясающая поддержка WASM — например, я встроил версию приложения прямо в этот блог-пост!
Я обнаружил, что приложения на Shiny всегда требовали значительно меньше кода и были проще для понимания, чем на других фреймворках.