Предварителната обработка на ИИ е всичко, което правите със суровите данни преди (а понякога и по време на) обучение или извод, за да може моделът действително да се учи от тях. Не е просто „почистване“. Това е почистване, оформяне, мащабиране, кодиране, допълване и пакетиране на данни в последователно представяне, което няма да обърка тихо вашия модел по-късно. [1]
Статии, които може да ви харесат след тази:
🔗 Как да тестваме AI модели за реална производителност
Практични методи за бърза оценка на точността, устойчивостта и отклоненията.
🔗 Изкуствен интелект ли е преобразуването на текст в реч и как работи
Обяснява основите на синтеза на говор, ключовите приложения и често срещаните ограничения днес.
🔗 Може ли изкуственият интелект да чете точно ръкописния текст днес?
Обхваща предизвикателствата при разпознаване, най-добрите инструменти и съветите за точност.
🔗 Колко точен е изкуственият интелект при изпълнението на често срещани задачи
Разбива факторите за точност, бенчмарковете и надеждността в реалния свят.
Предварителна обработка с изкуствен интелект на разбираем език (и какво не е) 🤝
Предварителната обработка с изкуствен интелект е трансформирането на суровите входни данни (таблици, текст, изображения, лог файлове) в готови за модел функции. Ако суровите данни са разхвърлян гараж, предварителната обработка е етикетиране на кутиите, изхвърляне на счупени боклуци и подреждане на неща, така че действително да можете да преминете през тях без да се нараните.
Не е самият модел. Става въпрос за нещата, които правят модела възможен:
-
превръщане на категориите в числа (еднозначни, порядкови и др.) [1]
-
мащабиране на големи числови диапазони в разумни диапазони (стандартизация, мин-макс и др.) [1]
-
токенизиране на текст във входни идентификатори (и обикновено маска за внимание) [3]
-
преоразмеряване/изрязване на изображения и подходящо прилагане на детерминистични спрямо случайни трансформации [4]
-
изграждане на повтарящи се тръбопроводи, така че обучението и входните данни от „реалния живот“ да не се разминават по фини начини [2]
Една малка практическа забележка: „предварителната обработка“ включва всичко, което се случва последователно, преди моделът да види входните данни . Някои екипи разделят това на „инженерство на функции“ срещу „почистване на данни“, но в реалния живот тези граници се размиват.

Защо предварителната обработка с изкуствен интелект е по-важна, отколкото хората признават 😬
Моделът е съпоставител на шаблони, а не четец на мисли. Ако вашите входни данни са непоследователни, моделът научава непоследователни правила. Това не е философско, а болезнено буквално.
Предварителната обработка ви помага:
-
Подобрете стабилността на обучението, като поставите характеристики в представяния, които оценителите могат да използват надеждно (особено когато е включено мащабиране/кодиране). [1]
-
Намалете шума, като направите разхвърляната реалност да изглежда като нещо, от което моделът може да обобщи (вместо да запомняте странни артефакти).
-
Предотвратяване на тихи повреди, като изтичане и несъответствия между обучението и обслужването (от типа, който изглежда „невероятно“ при валидиране и след това при внедряване в производство). [2]
-
Ускорете итерацията, защото повтаряемите трансформации са по-добри от сложните „спагети“ от тетрадки всеки ден от седмицата.
Освен това, оттам идва и голяма част от „моделното представяне“. Като… изненадващо много. Понякога се струва несправедливо, но това е реалността 🙃
Какво прави един добър AI канал за предварителна обработка ✅
„Добрата версия“ на предварителната обработка обикновено има следните качества:
-
Възпроизводимо : същият вход → същият изход (няма мистериозна случайност, освен ако не е умишлено увеличаване).
-
Последователност при обслужване на обучение : каквото и да правите по време на обучение, се прилага по същия начин по време на извод (едни и същи параметри, едни и същи карти на категориите, една и съща конфигурация на токенизатора и т.н.). [2]
-
Безопасност от течове : нищо в оценката/теста не влияе на която и да е
от напасването. (Повече за този капан след малко.) [2] -
Наблюдаемо : можете да проверите какво се е променило (статистика на функции, липсващи данни, брой категории), така че дебъгването не е инженерство, базирано на вибрации.
Ако вашата предварителна обработка е купчина клетки от тетрадка, наречени final_v7_really_final_ok ... знаете как е. Работи, докато не спре 😬
Основни градивни елементи на предварителната обработка на ИИ 🧱
Мислете за предварителната обработка като за набор от градивни елементи, които комбинирате в конвейер.
1) Почистване и валидиране 🧼
Типични задачи:
-
премахване на дубликати
-
обработка на липсващи стойности (изтриване, импутиране или изрично представяне на липсващите стойности)
-
прилагане на типове, мерни единици и диапазони
-
откриване на неправилно оформени входни данни
-
стандартизиране на текстови формати (празни пространства, правила за главни и малки букви, особености на Unicode)
Тази част не е бляскава, но предотвратява изключително глупави грешки. Казвам го с любов.
2) Кодиране на категорични данни 🔤
Повечето модели не могат директно да използват сурови низове като "red" или "premium_user" .
Често срещани подходи:
-
Еднократно кодиране (категория → двоични колони) [1]
-
Ординално кодиране (категория → целочислен идентификатор) [1]
Ключовото не е кой енкодер ще изберете, а картографирането да остане последователно и да не „променя формата си“ между обучението и извода. Така ще получите модел, който изглежда добре офлайн и се държи като „призрачен“ онлайн. [2]
3) Мащабиране и нормализиране на характеристиките 📏
Мащабирането е от значение, когато обектите се намират в коренно различни диапазони.
Две класики:
-
Стандартизация : премахване на средната стойност и мащабиране до единична дисперсия [1]
-
Мащабиране от минимум до максимум : мащабиране на всяка функция в зададен диапазон [1]
Дори когато използвате модели, които „предимно се справят“, мащабирането често прави тръбопроводите по-лесни за разсъждение и по-трудни за случайно прекъсване.
4) Инженеринг на функции (известен още като полезна измама) 🧪
Тук улеснявате работата на модела, като създавате по-добри сигнали:
-
съотношения (кликвания / импресии)
-
подвижни прозорци (последните N дни)
-
брой (събития на потребител)
-
логаритмични трансформации за разпределения с тежки опашки
Тук има цяло изкуство. Понякога създаваш нещо, горд си... и то не води до нищо. Или още по-лошо, боли. Това е нормално. Не се привързвай емоционално към някои неща - те не те обичат в замяна 😅
5) Разделяне на данните по правилния начин ✂️
Това звучи очевидно, докато не се окаже съвсем очевидно:
-
случайни разделяния за IID данни
-
разделяне на времеви серии, базирано на време
-
групирани разделяния, когато обектите се повтарят (потребители, устройства, пациенти)
И най-важното: разделете преди напасване, предварителна обработка, която се учи от данни . Ако вашата стъпка на предварителна обработка „изучава“ параметри (като средни стойности, речници, карти на категории), тя трябва да ги научи само чрез обучение. [2]
Предварителна обработка с изкуствен интелект по тип данни: таблични, текстови, изображения 🎛️
Предварителната обработка променя формата си в зависимост от това какво захранвате модела.
Таблични данни (електронни таблици, регистрационни файлове, бази данни) 📊
Често срещани стъпки:
-
стратегия за липсваща стойност
-
категорично кодиране [1]
-
мащабиране на числови колони [1]
-
обработка на отклонения (правилата на домейна превъзхождат „случайното изрязване“ през повечето време)
-
производни характеристики (агрегации, забавяния, актуални статистики)
Практически съвет: дефинирайте изрично групите колони (числови срещу категорийни срещу идентификатори). Бъдещото ви аз ще ви благодари.
Текстови данни (НЛП) 📝
Предварителната обработка на текст често включва:
-
токенизация в токени/поддуми
-
преобразуване във входни идентификатори
-
допълване/отрязване
-
изграждане на маски за внимание за групиране [3]
Малко правило, което спестява болката: за конфигурации, базирани на трансформатори, следвайте очакваните настройки на токенизатора на модела и не правете фрийстайл, освен ако нямате причина. Фрийстайлингът е начинът, по който в крайна сметка се получава „тренира, но е странно“
Изображения (компютърно зрение) 🖼️
Типична предварителна обработка:
-
преоразмеряване/изрязване до еднакви форми
-
детерминистични трансформации за оценка
-
случайни трансформации за допълване на обучението (напр. случайно изрязване) [4]
Един детайл, който хората пропускат: „случайните трансформации“ не са просто вибрация - те буквално семплират параметри всеки път, когато бъдат извикани. Чудесно за обучение на разнообразие, ужасно за оценка, ако забравите да изключите случайността. [4]
Капанът, в който всички попадат: изтичане на данни 🕳️🐍
Изтичането е когато информация от данни за оценка се промъква в обучението - често чрез предварителна обработка. Това може да накара вашия модел да изглежда магически по време на валидирането, а след това да ви разочарова в реалния свят.
Често срещани модели на течове:
-
мащабиране с помощта на статистически данни от пълен набор от данни (вместо само обучение) [2]
-
изграждане на карти на категориите чрез съвместно използване на train+test [2]
-
всяка
fit()илиfit_transform(), която „вижда“ тестовия набор [2]
Емпирично правило (просто, брутално, ефективно):
-
Всичко, което има подходяща стъпка, трябва да е подходящо само за тренировка.
-
След това трансформирате валидирането/тестването, използвайки този подходящ трансформатор. [2]
И ако искате да проверите „колко лошо може да бъде?“: документацията на scikit-learn показва пример за изтичане, при който неправилен ред на предварителна обработка дава точност около 0,76 върху произволни цели, след което пада обратно до ~ 0,5, след като изтичането е коригирано. Ето колко убедително погрешно може да изглежда изтичането. [2]
Влизане в производство без хаос 🏗️
Много модели се провалят в производството не защото моделът е „лош“, а защото входната реалност се променя – или вашият конвейер се променя.
Производствено ориентирана предварителна обработка обикновено включва:
-
Запазени артефакти (съпоставяния на енкодер, параметри на скалера, конфигурация на токенизатора), така че изводът използва абсолютно същите научени трансформации [2]
-
Строги входни договори (очаквани колони/типове/диапазони)
-
Мониторинг за отклонения и отклонения , тъй като производствените данни ще се отклоняват [5]
Ако искате конкретни дефиниции: Vertex AI Model Monitoring на Google разграничава отклонението при обучение (разпределението на продукцията се отклонява от обучението) и отклонението от извода (разпределението на продукцията се променя с течение на времето) и поддържа наблюдение както за категорични, така и за числови характеристики. [5]
Защото изненадите са скъпи. И не са от забавните.
Сравнителна таблица: често срещани инструменти за предварителна обработка + мониторинг (и за кого са предназначени) 🧰
| Инструмент / библиотека | Най-добро за | Цена | Защо работи (и малко честност) |
|---|---|---|---|
| предварителна обработка на scikit-learn | Таблични машинно-колонни конвейери | Безплатно | Солидни енкодери + скалери (OneHotEncoder, StandardScaler и др.) и предвидимо поведение [1] |
| Токенизатори за прегръщащи лица | Подготовка за входни материали за НЛП | Безплатно | Създава входни идентификатори + маски за внимание последователно във всички изпълнения/модели [3] |
| трансформации с факелно виждане | Трансформация + уголемяване на зрението | Безплатно | Чист начин за смесване на детерминистични и случайни трансформации в един конвейер [4] |
| Мониторинг на Vertex AI модел | Откриване на дрейф/изкривяване в продукта | Платено (облак) | Мониторите имат функция за изкривяване/отклонение и предупреждават при превишаване на праговете [5] |
(Да, масата все още има мнения. Но поне са честни мнения 😅)
Практичен контролен списък за предварителна обработка, който можете да използвате 📌
Преди тренировка
-
Дефиниране на входна схема (типове, мерни единици, разрешени диапазони)
-
Одит на липсващи стойности и дубликати
-
Разделяне на данните по правилния начин (случайно / базирано на време / групирано)
-
Предварителна обработка на напасване само при обучение (
fit/fit_transformостава при обучение) [2] -
Запазване на артефактите за предварителна обработка, така че изводът да може да ги използва повторно [2]
По време на обучение
-
Прилагайте произволно увеличаване само където е уместно (обикновено само тренировъчно разделяне) [4]
-
Поддържайте предварителната обработка на оценката детерминистична [4]
-
Проследявайте промените в предварителната обработка, като например промените в модела (защото са такива)
Преди разполагането
-
Уверете се, че изводът използва идентичен път за предварителна обработка и артефакти [2]
-
Настройте мониторинг на дрейфа/изкривяването (дори основните проверки на разпределението на характеристиките са от голяма полза) [5]
Дълбоко проучване: често срещани грешки в предварителната обработка (и как да ги избегнем) 🧯
Грешка 1: „Просто бързо ще нормализирам всичко“ 😵
Ако изчислявате параметрите за мащабиране върху целия набор от данни, изпускате информация за оценката. Настройте на влака, трансформирайте останалото. [2]
Грешка 2: категориите се носят в хаос 🧩
Ако вашето картографиране на категориите се променя между обучение и извод, вашият модел може незабелязано да разтълкува погрешно света. Поддържайте картографирането фиксирано чрез запазени артефакти. [2]
Грешка 3: произволно добавяне на информация, промъкващо се в оценката 🎲
Случайните трансформации са страхотни в обучението, но не бива да бъдат „тайно включени“, когато се опитвате да измерите производителността. (Случайно означава произволно.) [4]
Заключителни бележки 🧠✨
Предварителната обработка с изкуствен интелект е дисциплинираното изкуство за превръщане на обърканата реалност в последователни входни данни за модела. Тя обхваща почистване, кодиране, мащабиране, токенизация, трансформации на изображения и - най-важното - повтарящи се канали и артефакти.
-
Извършвайте предварителна обработка умишлено, а не небрежно. [2]
-
Разделете първо, прилягането се трансформира само при тренировка, избягвайте изтичане. [2]
-
Използвайте предварителна обработка, подходяща за модалността (токенизатори за текст, трансформации за изображения). [3][4]
-
Следете отклоненията/изкривяванията в производството, така че вашият модел бавно да не се отклонява към безсмислици. [5]
И ако някога се затрудните, запитайте се:
„Дали тази стъпка за предварителна обработка ще има смисъл, ако я изпълня утре с чисто нови данни?“
Ако отговорът е „ъъъ… може би?“, това е вашата улика 😬
Референции
[1] scikit-learn API:
sklearn.preprocessing (енкодери, скалери, нормализация) [2] scikit-learn: Често срещани клопки - Изтичане на данни и как да се избегне
[3] Документация за Hugging Face Transformers: Токенизатори (входни идентификатори, маски за внимание)
[4] Документация за PyTorch Torchvision: Трансформации (Преоразмеряване/Нормализиране + случайни трансформации)
[5] Документация за Google Cloud Vertex AI: Общ преглед на мониторинга на модели (изкривяване и отклонение на характеристиките)