От класификация към контекст: еволюцията на текстовия анализ
• Как автоматичната класификация на текст еволюира от статистически модели до големи езикови модели (LLM)
• Практическите ограничения на BERT и трансформър подходите в многоезична и домейн-специфична среда
• Реален опит от изграждане на система за анализ на енергийни новини на няколко езика
• Преминаването от категоризация към контекстно разбиране и оценка на информация
• Защо генеративните AI модели се оказват по-гъвкави от класическите NLP решения
В продължение на години автоматичната класификация на текст премина през няколко технологични етапа - от статистически модели до контекстуални езикови архитектури. Ранните подходи като Naive Bayes и логистичната регресия работеха с честоти и вероятности, без да улавят смисъла на текста. По-късно word embeddings и модели като Word2Vec и GloVe въведоха семантична близост, но класификацията остана обвързана с фиксирани категории и конкретни домейни. Transformer моделите като BERT, RoBERTa и XLM-R подобриха разбирането на контекста, но изискваха специализирано обучение за всяка отделна задача.
В практическа среда това се превръщаше в сложен и ресурсоемък процес. Подготовката на данните, етикетирането и поддръжката на отделни модели за различни типове съдържание бяха постоянен ангажимент. Всяка промяна - нова категория, нов източник или различен език - означаваше повторение на целия цикъл по обучение и тестване.
Практики и приложениеВ края на 2024 г. трябваше да изградя система, която да извлича информация от специализирани медии в областта на енергетиката, да я превежда на български (с DeepL) и да категоризира всяка статия в няколко предварително дефинирани категории. На пръв поглед задачата изглеждаше сравнително проста, но на практика се оказа пълна с подводни камъни. Източниците бяха на шест езика, с различен стил, терминология и ниво на техническа дълбочина. Една и съща тема можеше да бъде описана като „енергийна сигурност“, „пазарен риск“ или „геополитически натиск“ в зависимост от изданието, езика или идеологическата принадлежност на автора.
Споделих с колеги какво точно възнамерявам да направя и всички, в един глас, ми препоръчаха да разгледам Ground News - платформа, която показва как една и съща новина се отразява в медии с различна политическа ориентация (ляво, център, дясно). След като задълбах в технологията зад нея, реших да изградя подобна архитектура за новия си проект. Свалих модел на BERT, създадох pipeline за скрейпване и подаване на изтеглената информация към модела, както и за запис в базата данни. Всичко заработи относително бързо - в рамките на един ден имах функциониращ цикъл.
Следващият ден дойде време за истината - тестовете. Хаос. Пълен хаос. Резултатите бяха, меко казано, плачевни. Причината беше ясна - моделът можеше да обработва само английски текст.
Прелистих наличните опции и намерих BERT-Base (Multilingual Cased) - 100 езика в един модел. Звучеше перфектно. Докато не видях един детайл в документацията: речник от само 120 хиляди думи. Помислих си - активният речник на българския е около 80 хиляди, английският е със стотици хиляди. Да, не всички думи са нужни, но когато работиш с шест езика, от които два (български и гръцки) не са дори латински, 120 хиляди изведнъж стават малко. А и имаше друг проблем - моят скромен MacBook с 8 GB RAM просто нямаше да издържи този модел.
Отново отворих списъка с transformer модели в Hugging Face. Бяха десетки. Може би трябваше да измисля друг вариант, вместо да прилагам утвърденото правило проба-грешка.
Нови възможностиВ края на 2024 г., ентусиазмът около новите GenAI модели беше в пика си, реших да изпробвам различен подход. Какво ще стане, ако просто задам на LLM да категоризира новина в предварително дефинирана категория? Моделът трябваше само да прочете текста и да избере подходящата категория - звучеше логично и потенциално работещо. Тъй като според първоначалната концепция системата трябваше да работи с локални изчислителни ресурси, без външни API услуги с изключение на DeepL за превод, избрах да използвам LM Studio с популярния модел Mistral 7B - европейски произход, open source, превежда всички европейски езици и най-важното - работеше на моя лаптоп без дори да включи вентилатора. Резултатът надмина очакванията: не само работеше отлично, но даваше по-добри резултати от BERT (на английски текст), а времето за обработка беше почти идентично. Също така вече не ми трябваше DeepL за превод. Воала.
След седмица на тествания и анализиране на резулатите ги предоставих на клиента. Оказа се, че категоризацията не е ключова за него, превода му стигаше и то само в резюмиран вариант. Да, ама аз вече бях обсебен от възможността LLM-а да взима решения на база контекст. Какво ще стане ако му се зададе десет критерия за оценка на важността на новината? Как ще оцени аварийно спиране на тока за час спрямо строителството на нов ядрен реактор? Предложих на клиента още една седмица за експерименти. Прибрах се ентусиазиран - не само защото завърших основната работа, но и защото виждах възможност да интегрирам абстрактна функционалност, която досега не бях срещал никъде.
Добавих допълнителна стъпка в pipeline-а - втори промпт слой (думата "Agent" набираше популярност по това време), който се изпълняваше преди превода. Идеята беше системата да оценява всеки от десетте критерия по петобална скала, след което да агрегира резултата в процентна оценка, придружена с обяснение. Резултатът? Катастрофа. Грешни оценки, нестабилна работа, crash-ове. Проблемът не беше в логиката, а в самия модел. Детайлният промпт с десетте критерия, комбиниран с дългите аналитични текстове от източниците, генерираше прекалено много токени. Освен това тематика за енергетика се оказа твърде сложна за Mistral 7B.
Решението се оказа интеграцията на платформата с API на голям езиков модел. Логичния избор беше OpenAI — по това време нямаше зряла европейска алтернатива (не че сега има), имах предишен опит с ChatGPT от експериментите си с писане на роман, а цената на токените беше приемлива за целите на проекта.
Интегрирах Chat Completions API с GPT-4o, и резултатите бяха впечатляващи: преводи, надминаващи по качество както DeepL, така и Mistral; точни оценки; логични и обосновани обяснения. Изведнъж се отвориха нови възможности - как модела може да се използва за текстов анализ или за вземане на обосновани решения само на база на предоставения контекст. Проблемът с халюцинациите беше минимизиран, тъй като при задачи като „Оцени ценовите колебания в текста“ моделът не измисля отговори, а просто оценява наличната информация - например с 1 точка, ако не намери информация за ценови колебания в текста, което е напълно достатъчно за анализа. Ами, ако му задам да изкара участниците и организациите от текста и ги запише в базата данни и след това да ги използваме за търсене?
Разширих функционалността, като интегрирах няколко допълнителни AI-модула: анализ на текст и извличане на участници. Свързах ги с Wikipedia API, след което модела генерираше кратко резюме на резултатите и записваше отговора в базата данни.
За по-малко от месец платформата за анализ на енергийни новини беше готова. Тя предоставяше толкова подробна и структурирана информация, че дори аз - човек без никакво предварително познание в енергетиката - започнах да разбирам как функционира индустрията, кои са ключовите играчи и как анализираната и категоризирана информация се превръща в продукт, който след това се търгува.
Изводи
Проектът за автоматизиран анализ на енергийни новини демонстрира как еволюцията на езиковите модели променя подхода към обработка на текстови данни. От класическите статистически методи до трасформърите и най-накрая - до генеративните AI модели, всеки етап разкрива нови възможности, но и нови предизвикателства.
Основни уроци:1. Гъвкавостта на LLM-моделите надминава специализираните решения. Докато BERT и подобните модели изискват сложна подготовка и обучение за всяка нова задача, големите езикови модели като GPT-4o позволяват бързо адаптиране към различни домейни и езици без нужда от преобучение. Това е особено ценно в динамични среди, където терминологията и контекстът се променят бързо.
2. Контекстът е по-важен от категоризацията. Първоначалната цел - автоматична категоризация на новини - се оказа по-малко критична от способността на модела да разбира, оценява и обобщава информацията. Клиентът в крайна сметка се интересуваше не толкова от етикетите, колкото от аналитичната стойност на данните - какви са ключовите събития, кои са основните участници и как те влияят на индустрията.
3. Интеграцията с външни източници (като Wikipedia API) улеснява обогатяването на резултатите, но изисква баланс между автоматизация и човешка валидация. Извличането на участници и организации от текстове, комбинирано с данни от външни бази, създава мощна основа за анализ, но рисковете от грешни интерпретации остават - особено при сложни теми.
4. Ресурсите и мащабируемостта са критични. Опитът с Mistral 7B показа, че локалните модели могат да се окажат недостатъчни за специфични задачи, особено при работа с многоезични данни и сложна терминология. Преходът към облачни API-та (като OpenAI) разреши проблема с изчислителните ограничения, но постави нови въпроси за разходите и зависимостта от външни услуги.
5. AI-моделите не са „магически“ - те са инструменти. Халюцинациите и грешните оценки не изчезват напълно, но могат да бъдат контролирани чрез ясно дефинирани задачи и контекст. Например, при оценка на ценови колебания моделът не измисля данни, а просто отбелязва липсата им - това е достатъчно за аналитични цели, но изисква предварително проектиране на процеса.
