Як вдало застосувати AI у своєму проєкті: покрокова інструкція

Плануєш займатися АІ чи вже працюєш з ним? Виникають питання щодо етапів створення ML-проєкту? Цікавить, які бібліотеки та технології варто опанувати чи, можливо, хочеш дізнатися загальні закономірності та правила у створенні ML-проєкту?

Тоді вмощуйся зручніше та будемо знайомитись. Мене звати Максим, і я отримав достатньо досвіду для того, щоб зараз прокачати тебе. Уже понад 10 років активно працюю в IT. Я пройшов довгий і складний шлях — від Full Stack розробника до проджект-менеджера. Згодом почав реалізовувати себе і як Machine Learning експерт. Зараз здобуваю ступінь кандидата наук, пишу і публікаю статті та працюю над дисертацією з Text Mining. Також працюю викладачем на платформі SQL.ua Data Academy.

З роками я навчився бачити проєкти комплексно і готовий розказати тобі, як це робити. Оскільки машинне навчання зараз популярне, розповім, як створити ML-проєкт, навіщо це потрібно та з якими проблемами можна зіткнутися. Мій приклад стосуватиметься аналізу текстів.

Чому саме ця ніша? Бо в цій сфері в мене багато досвіду, і я вважаю, що цінно ділитися ним з іншими. У статті опишу, який вигляд має research ML-проєкт.

Ну що, поїхали!

Не бійся застосовувати штучний інтелект

Страх зникне, коли прийде розуміння.

Що ж ми розуміємо під словосполученням «штучний інтелект»? Іноді це поняття сприймають як щось недосяжне та незрозуміле. З погляду психології це нормально. Оскільки машинне навчання робить прогресивні кроки та має значні досягнення, багатьом важко зрозуміти, як воно працює. Ця сфера є terra incognita для нефахівців, однак навіть розробники, тестувальники та інші інженери деколи не до кінця розуміють суть.

Якщо ти теж робиш перші кроки в напрямі штучного інтелекту, я щиро рекомендую спочатку проаналізувати свої навички. Якщо не дуже тямиш у програмуванні, попрацюй над цим. Можеш почати з основ — Python, бібліотек NumPy, pandas.

Ще у цій сфері важливо мати аналітичний спосіб мислення. Його можна розвинути, стараючись повністю зануритись у проєкт, і стати хоча б частково доменним експертом у його застосуванні. Що для цього потрібно?

  1. Читати й дізнаватись усе про основи обраної сфери.
  2. Спілкуватися зі спеціалістами — крутий досвід, який принесе цінні інсайти.
  3. Аналізувати відповідні статті в інтернеті та робити висновки.

Адже з нульовим знанням і розумінням того, що робиш, створити якісний ML-проєкт якщо й можливо, то вкрай складно.

Наведу приклад із власної практики. Під час розробки аналізу функціональних стилів мови я спочатку з’ясував, що їх диференціація може здійснюватися на основі мовних ознак. Важливу роль відіграють і екстралінгвальні чинники — суспільна сфера функціонування текстів. Я вивчив, які стилі виділяють, і проаналізував їхні відмінності. І це суттєво вплинуло на підбір базових стилів (офіційно-діловий, науковий і публіцистичний) у моєму дослідженні. Вибір був зумовлений, з одного боку, високим рівнем «книжності» та стандартизації офіційно-ділового й наукового стилів, з іншого — чіткістю, логічністю та емоційно-експресивним спрямуванням публіцистики. Проте без попередньої підготовки та умовного ознайомлення з лінгвістикою я б не зміг побачити ці відмінності. А тим паче зрозуміти, що може впливати на них.

Крім того, необхідно опанувати мінімальні основи теорії статистики та ознайомитися зі спеціальними бібліотеками. Найпопулярнішими для Machine Learning є Keras, Scikit-learn і TensorFlow.

Але все-таки найбільше значення має зміна способу мислення. Адже штучний інтелект не просто так називається «штучним». Його завдання полягає у визначенні найоптимальніших рішень. На жаль, програмісти, які звикли самостійно розробляти алгоритми, часто цього не розуміють і не готові шукати рішення нетиповими шляхами.

Завдання ML-інженера — встановити, яка саме архітектура даватиме найвищу точність у конкретному проєкті. Для цього треба експериментувати з архітектурами, методами і, порівнюючи десятки підходів, знайти найкраще рішення. Якщо в програмуванні необхідно написати код так, щоб його було легко розуміти, перевикористовувати, масштабувати, то в машинному навчанні все це набуло другорядного значення. Тут важливо знайти гарний датасет і створити ML-проєкт, точність якого буде найвищою. Тому ти будеш більше науковцем, який проводить купу експериментів, ніж програмістом.

Варто зрозуміти, що ML-інженер — професія із глибоко захованим змістом. І якщо готовий стати експериментатором і новатором, тоді ти на правильному шляху.

Визнач цілі, стейкхолдерів та призначення проєкту

Насамперед потрібно зрозуміти, яку користь принесе конкретний ML-проєкт. Адже Аl — це передусім спосіб розв’язання проблеми. І кожен проєкт повинен мати практичне застосування для певної мети.

Окрім того, треба не тільки знайти певну проблему, а й розібратись у тому, як і чому вона виникла. Тут важливі деталі: які існують підтипи проблеми, яка аудиторія зацікавлена у її вирішенні тощо. Схожі нюанси дають змогу побачити картину повністю.

До прикладу, у спілкуванні з філологами я зрозумів, що для них важливо не тільки отримати готове рішення класифікації стилю тексту, а й глибокий аналіз того, за якими саме критеріями штучний інтелект виконав класифікацію. Адже висока точність і знання дають змогу фахівцям-лінгвістам робити необхідні висновки та узагальнення.

Збери конкретний датасет і не бійся працювати з іншими

Чудово! Вступні кроки ми проговорили. Але що ж робити далі?

Визначення проблеми, вивчення нюансів, аналіз, дослідження — це те, без чого ML-проєкт не зможе вийти у світ. Проте основа — це збір даних. Якщо на етапі розробки розумієш, що неможливо зібрати необхідну інформацію або ж її просто немає, проєкт не зможе функціонувати. Адже дані — це найважливіша річ для ML-проєктів.

Треба зібрати якомога більше даних, щоб штучний інтелект мав на чому навчатися. Тому після етапу визначення зі сферою застосування проєкту варто подумати, де знайти інформацію та з ким співпрацювати. Нерідко цікаві датасети є у вільному доступі, на kaggle.com, деякі є за замовчуванням у Python-бібліотеках. Однак, наприклад, для аналізу фейковості українських ЗМІ жоден із наявних у цих бібліотеках датасетів не підійде, тож доведеться створювати свій. Тому можна прямо попросити набори статей у ЗМІ або ж домовитися про використання датасетів громадських організацій, які займаються дослідженням медіа.

Напевне, у тебе закралось питання, для чого ж потрібна співпраця? Та погодься, що самостійно копіювати та додавати десятки тисяч статей у свій файл або робити парсер вебсайтів з нуля не дуже ефективно, та й надто часозатратно.

Хоча для аналізу стилів я збирав датасет вручну, підібравши 1000 статей. Для цього дослідження шукав тексти однієї тематики — про мову. Такий вузький вибір відіграє важливу роль, оскільки мінімізує ймовірність неправильного визначення належності тексту до певної групи за тематичною ознакою. Крім того, актуалізує власне лінгвальні критерії належності тексту до конкретного функціонального стилю.

Для кращого розуміння поділюсь своїми джерелами:

  • офіційно-ділові тексти відібрав із сайту Верховної Ради України (zakon.rada.gov.ua);
  • наукові тексти взяв з видання «Мовні права в сучасному світі (Збірник наукових праць)» (Ужгород, 2014. — 351 с.);
  • публіцистичні — з видань «Український тиждень», «Дзеркало тижня», «Українська правда», «Українська літературна газета».

Оброби дані

Здебільшого після отримання необхідної інформації та зібрання потрібного датасету усе це підлягає детальному аналізу та обробці даних.

Коли я займався проєктом з визначення авторства, то створив окрему невеличку програму, яка видаляє необхідні відступи та порожні частини тексту, формує файл csv, у якому вся інформація розбита й згрупована згідно з наперед заданими параметрами. Рекомендую і тобі зробити аналогічно.

Пам’ятай, що для різних проєктів ця програма працюватиме по-різному. Оскільки вона підлягає модифікаціям з урахуванням заданої специфіки. До прикладу, в іншому проєкті, де серед зібраних даних були наукові праці, ця ж програма видалила всі бібліографічні посилання до статей і додатки, у яких були розміщені документи. Усе це виконувалось для того, щоб залишився лише авторський текст, без зайвого. Отож відсіяти весь непотріб — ще одна запорука успіху проєкту.

Серед методів обробки даних в NLP (Natural Language Processing) популярним підходом є векторизація тексту й переформатування його в числові дані.

У моїх проєктах векторизація була надзвичайно важливою ланкою. Бо кінцевий результат роботи був чутливий до проведеного етапу векторизації вхідних даних. Наприклад, для визначення авторства я розглянув такі методи векторизації, як TfidfVectorizer та HashingVectorizer, тестував ASCII Converter та CountVectorizer.

Суттєво кращі результати з архітектурами штучних нейронних мереж показав HashingVectorizer. Цей метод векторизації працює у два етапи. Перший етап — перетворення колекції текстових документів на частотну матрицю лексеми. Другий — перетворення колекції текстових документів на двовимірну матрицю. Вона містить підрахунок кількості лексем (або двійкової інформації про появу), нормалізується як частота лексеми, якщо норма=’l1′, або проєктується на евклідову одиницю сфери, якщо норма=’l2′.

Ця реалізація текстового векторизатора використовує хеш-трюк, щоб знайти ім’я рядка маркера для зображення цілочислового індексу.

Однак уже під час визначення стилів метод векторизації HashingVectorizer показав точність на 2-3% меншу, ніж TfidfVectorizer. Водночас CountVectorizer разом з розгляданими ШНМ (штучними нейронними мережами) дав ще нижчі результати.

Тож варто підкреслити, що немає універсального методу. Твоє завдання — експериментально підібрати найкращий для свого проєкту, навіть якщо використовуєш уже готову архітектуру.

Окрім того, ще до етапу векторизації варто різними способами опрацьовувати текст. Наприклад, у моєму проєкті визначення стилів значну ефективність показало застосування стемінгу слів. Це процес скорочення слова до основи шляхом відкидання допоміжних частин, а в нашому випадку — закінчень. Це дало можливість поліпшити результат.

Визнач найоптимальнішу архітектуру

Експерименти — важлива частина на шляху до успіху.

Підбір найкращої архітектури працює так само, як вибір методу векторизації. Тобто тільки через численні експерименти можна знайти те, що буде підходити твоєму проєкту. Оскільки точно невідомо, як архітектура проявить себе з конкретним типом даних. Хоча буває, що для деяких завдань уже є вдалі рішення, завжди варто звертати увагу на всі особливості конкретного проєкту. Тільки так можна знайти найоптимальнішу архітектуру або ж модифікувати наявну для поліпшення якості даних.

Усе це вимагає зусиль, спроб та експериментів. Але якщо ти вже почав, то є сенс довести справу до кінця. Так, як зробив я із завданням з визначення стилів. На цьому етапі збагнув важливу річ: не потрібно порівнювати одразу все, достатньо виконувати роботу поступово та впорядковано, і це підвищить ефективність результату. Зробив я цей висновок тоді, коли побачив, що порівнювати три стилі водночас беззмістовно. Достатньо перевірити два рази по два стилі. Це підвищує точність і дає змогу провести швидке навчання нейронної мережі.

Уже в результаті експериментального підбору найоптимальнішої архітектури виявилось, що найкраще можна розрізнити науковий та офіційно-діловий стилі. Усі три розглянуті ШНМ у поєднанні з методом векторизації TfidfVectorizer забезпечили точність вище як 97%. Аналіз наукового і публіцистичного стилю цим же способом мав точність 93%. А ось виявити різницю між публіцистичним та офіційно-діловим стилем за допомогою ШНМ MLP можна лише з точністю 84,54%.

У кожному проєкті я експериментував з усім: кількістю шарів, способом активізації тощо. У результаті виходили цілі таблиці результатів, у які я записував структуру нейронних мереж, точність, похибку. І таким чином бачив, яка архітектура є найоптимальнішою.

Наведу приклад фрагмента таблиці для аналізу стилів:

K-FOLDСтруктура нейронів ШНММакс. кількість ітераційVALUESACCURACY
11|10[10, relu] [10, relu] [1, sigmoid]15F1≈0.86090.9161
21|10[10, relu][10, relu][10, relu] [1,sigmoid]15F1≈0.82750.9027
31|10[10, relu][1, sigmoid]15F1≈0.85650.9128
41|10[10, relu] [10, relu] [10, sigmoid] [1, sigmoid]15F1≈0.82310.9011

Після аналізу цього фрагменту, провівши десятки експериментів, я встановив крос-перевіркою 1/10 (10-fold cross validation), що найефективнішою є архітектура нейронів ШНМ [10, relu][10, relu][1, sigmoid].

Рекомендую й тобі створити таку таблицю, щоб побачити найкращий варіант під твій проєкт.

Підбери необхідну кількість ітерацій

Дуже важливим є питання кількості ітерацій для навчання штучної мережі. Не повіриш, але й тут немає чарівної універсальної цифри. Продовжуємо експериментувати. Також зверну увагу, що замість таблиці краще зробити графік. На нижченаведеному зображенні можна оцінити, як збільшується точність і зменшується похибка залежно від кількості ітерацій. Як бачимо, уже на 4-5 ітерації точність значно підвищується і потім не зростає так стрімко. Тобто в нашому випадку 4 ітерації — це оптимальний вибір.

Обери правильний алгоритм оптимізації

Чому я рекомендую Adam

Також важливо підібрати правильний алгоритм оптимізації для проєкту. Я використовував Adam як регуляризаційний алгоритм навчання нейронних мереж. Рекомендую його й тобі. Це алгоритм оптимізації на основі градієнтів першого порядку стохастичної цільової функції, що базується на адаптивних оцінках моментів нижчого порядку.

Чому я використав саме його?

  • Простий у реалізації.
  • Ефективний у застосуванні.
  • Має невеликі вимоги до пам’яті.
  • Інваріантний діагональному масштабуванню градієнтів.
  • Добре підходить для проблем, що мають дані великого розміру.
  • Підходить для нестаціонарних цілей і завдань, пов’язаних із шумними або розрідженими градієнтами.
  • Гіперпараметри потребують незначного налаштування та мають інтуїтивну інтерпретацію.

Однак варто пам’ятати, що цей алгоритм не є універсальний. Тому при виборі експериментуй і порівнюй з іншими алгоритмами оптимізації.

Що стосується авторства та визначення стилів, емпіричні результати показали, що Adam — найефективніший у практичному використанні та демонструє високі результати, порівняно з іншими методами.

Використовуй візуалізацію

Додатково користь твоєму проєкту принесе застосування візуалізації результатів. Це дасть змогу максимізувати використання Al.

У своєму проєкті визначення стилів я теж використовував цю методику. Мені підійшла SVR-архітектура. Її значно підсилювала бібліотека Lime, яка допомогла візуалізувати роботу з класифікації тексту. Це зробило мій проєкт цінним емпіричним матеріалом для подальших досліджень, виконаних філологами. Адже аналіз належності, підсвітка розпізнавання та ймовірний розподіл текстів між стилями стали важливими наочними засобами, які показують роботу ШНМ усередині. Завдяки високій точності лінгвістам вдалося зробити потрібні узагальнення.

До прикладу, ось деякі фрагменти:

Застосовуй ML-проєкти повторно

Повертаючись до аналізу фейковості, можна припустити, що тут спрацює схожий алгоритм на той, що визначає стильову належність тексту. Проте він буде визначати вже не стиль, а рівень фейковості.

Тобто можна почати дослідження із застосування використаного раніше підходу із SVR методом векторизації HаshingVectorizer і алгоритмом Adam.

Висновок

Отже, штучний інтелект не настільки складний, як багато людей уявляє. А головне — він не має жорстких рамок і потребує неабиякої творчості та постійних експериментів.

Важливо виробити собі патерни розробки нейронних мереж, які будуть постійно використовуватися в наступних проєктах. Я рекомендую:

  • написати програми обробки текстів, які будуть відсікати зайве;
  • знайти ключові способи векторизації та почергово пробувати їх застосовувати у своїх проєктах;
  • створити таблицю для порівняння експериментів;
  • побудувати графіки для визначення ітерацій;
  • визначити для себе ключові бібліотеки візуалізації та опанувати їх.

Крім того, важливо загорітися проєктом, зрозуміти його і не боятися використовувати готові рішення чи співпрацювати з людьми та організаціями, які вже цим займаються.

Пам’ятай: усе залежить від твоєї креативності. Бажаю успіху у створенні власного ML-проєкту! Для кращого ознайомлення з темою раджу переглянути вебінар Text Mining.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному7
LinkedIn

Схожі статті




10 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Цікавий пайплайн, доповню лише тим що у 23му році все більше і більше на проді спостерігаю використання one-shot моделі або перевикористовують моделі зі схожих задач, вони значно дешевші і видають дуже непогану точність.

Я би ще більше звернув увагу на те, як підбирали алгоритми для навчання, бо це найскладніша частина, де фактично розробнику і треба найбільше чухати макітру. Наприклад, додати до моделі логіку класифікації наукових чи ділових слів або визначення середньої довжини речення тощо. Я все більше стикаюсь, що люди беруть готові моделі і складно щось своє винаходити.

Это не алгоритмы — это features

How to Choose a Feature Selection Method For Machine Learning
machinelearningmastery.com/...​eal-and-categorical-data

Я спеціально вжив алгоритми замість ознак (features), бо збирати ознаки без уявлення моделі — вузько. У голові має теж генеруватися щось на кшталт наївного Баєса. Не сама назва, звісно, а скоріше як один із можливих алгоритмів для розвʼязання задачі. Людина має знати не лише дані, а й розуміти, що з ними повинна зробити машина.

У нас в Aspose проводились исследования эффективности распознавания разными алгоритмами при наличии оного того же набора features, тренировочного набора и тестового набора символов (правда команда все равно потом проект OCR завалила и сделала его другая команда).

Так вот разница в распознавании в случае SVM, cNN, rNN, random forest и прочих в 1-2%. Тоесть алгоритм классификации почти не важен, а важен правильный набор features.

Я використовував для прогнозування продажів RNN і LSTM. І набір ознак був різний.

Так вот разница в распознавании в случае SVM, cNN, rNN, random forest и прочих в 1-2%. Тоесть алгоритм классификации почти не важен, а важен правильный набор features.

Робив одну задачу по регресії, перепробував різні моделі регресорів. Всіх їх можна розділити на дві групи (лінійний, поліномний, найближчий сусід) та (random forest, різні ANN). Точність між першою і другою групою зростає десь 10%, всередині групи різниця між моделями 1-2%. Набагато важливішим є тренувальна вибірка, ознаки та конвертація і комбінація ознак так, щоб вони були зручніші для моделі.

Використовуй візуалізацію

Про визуализацию зачет, если вы глазом видите возможность разделения данных на кластеры, то сможете и подобрать метод адаптивной кластеризации. Если же видимых глазом кластеров нет ни в одной из проекций, то чаще всего это не данные, а мусор и попытка натянуть сову на глобус ни к чему хорошему не приведет.

Отже, штучний інтелект не настільки складний, як багато людей уявляє.

Открою еще один секрет. Искусственного Интеллекта на самом деле нет, есть методы адаптивной классификации и кластеризации данных с учителем и без учителя. Так что все эти алгоритмы разве что могут самостоятельно построить функцию, которая отнесет набор входных данных (features) к тому или иному классу. Большего пока этот ИИ не умеет.

Искусственного Интеллекта на самом деле нет,

Теж відкрию секрет. Те, що ви описали, і принято називати ШІ. А якщо точніше, то прикладним ШІ (Applied AI). Тому що класифікація і кластеризація є завданнями машинного навчання, яке, в свою чергу, є підгалузю штучного інтелекту.

Підписатись на коментарі