Pathfinder: як створювалась система рекомендацій ІТ-курсів

У цій публікації ми познайомимось з підходом, який використовувався для створення системи рекомендацій ІТ-курсів.

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

З цього приводу багато вчених та економістів провели ряд досліджень. За результатами вчених з Оксфордського університету, 47% робочих місць стануть доступними для автоматизації. Результати спеціалістів з Організації економічної співпраці та розвитку (ОЕСР) виявилися більш позитивними — ризик зникнення існує лише для 9% професій. Дослідники з Глобального інституту McKinsey виявили, що 50% робочих задач вже автоматизовано по всьому світу. За їхніми даними, до 2030 року близько 14% працівників будуть вимушені змінити спеціальність.

Всі дослідження показують різні цифри, проте висновок один: за це десятиріччя деякі професії трансформуються, а деякі зникнуть зовсім внаслідок автоматизації. Сфера ІТ-технологій — одна з надійних та затребуваних у наш час. Вона постійно розвивається, а отже, робота знайдеться для кожного. Багато людей вважають, що ІТ — це лише створення коду. Для них програмування здається дуже важким, тож й перспектив у цій сфері такі люди не бачать. Щоб зруйнувати цей міф та показати, що кожна людина може знайти своє місце в ІТ, був створений Pathfinder.

Ми розробили цю систему разом з академією ІТ-освіти ITEA. Цей продукт має на меті полегшити вибір курсів для світчерів, які не мають уявлення про специфіку кожної ІТ-спеціалізації. З його допомогою ми отримаємо багато інформації про цих людей, яка буде корисною для вибору ІТ-спеціалізації. Для того, щоб знайти відповідь, який досвід є більш відповідним для кожної спеціалізації, ми використовуємо машинне навчання. При цьому на кінцевий результат впливає як робота машинного навчання, так і тестування з матрицею відповідності на базі досвіду ITEA. В майбутньому планується підключити і психологічні тести на тип особистості.

Як працює машинне навчання у системі Pathfinder

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

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

Резюме є прекрасним джерелом для опису залежностей між досвідом та поточною роботою. Простіше кажучи, так ми можемо простежити професійний шлях кожного програміста. Я зібрав 10 000 резюме програмістів з різних веб-сайтів із пошуку роботи. Після цього мені довелося обрати підхід для моделювання цих даних. Для цього я використовував сучасні алгоритми NLP.

Цього року технології глибинного навчання розвивалися дуже інтенсивно. Зокрема, були опубліковані алгоритми трансформерів, такі як Bidirectional Encoder Representations from Transformers (BERT) від Google та XLNet.

Це універсальні алгоритми NLP для подання тексту, які ми можемо використовувати для вирішення різних завдань. Наприклад, для надання рекомендацій з вибору курсів у сфері ІТ.

Як можна використовувати трансформери за рекомендаціями?

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

Трансформер дає мені можливість зробити сильний класифікатор.

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

BERT — універсальний алгоритм для вирішення різних завдань

У цьому проекті я використав багатомовний BERT. Поговоримо про техніку цієї архітектури.

BERT створює двонаправлене кодування. Основне завдання, з яким він справляється, — це передбачення маски кожного слова. BERT полегшує раніше згадане односпрямоване обмеження, використовуючи попередню навчальну мету «модель маскованої мови» (MLM). Ця модель випадковим чином маскує деякі лексеми із вхідних даних і мета — передбачити вихідний ідентифікатор словника маскуваного слова, виходячи лише з його контексту. На відміну від попередньої підготовки мовної моделі, яка працює зліва направо, об’єкт MLM дозволяє змішувати контекст ліворуч і праворуч в загальну картину, що дозволяє нам шукати глибокий двонаправлений Трансформер. Крім того, ми використовуємо завдання «передбачення наступного речення», яке спільно шукає подання текстових пар.

У нашій системі ми робимо два кроки:

  1. Попередня підготовка. Під час попередньої підготовки ми тренуємо модель на непозначених даних, змушуючи її виконувати різні передпідготовчі завдання.
  2. Тонке налаштування. Для тонкого налаштування спочатку ініціалізується модель BERT з попередньо підготовленими параметрами. Тоді всі параметри налагоджуються за допомогою мічених даних із подальших завдань (у моєму випадку — багатокласова класифікація). Незважаючи на те, що кожне наступне завдання ініціалізується з однаковими, заздалегідь підготовленими параметрами, всі вони мають окремі, точно налаштовані моделі.

Представлення вводу/виводу

Наше вхідне представлення може однозначно бути як одним, так і парою речень (наприклад, питання та відповіді) в одній послідовності лексем, щоб змусити BERT обробляти різноманітні завдання нижче. «Речення» може означати довільний проміжок суміжного тексту, а не фактичне речення з точки зору лінгвістики. «Послідовність» означає послідовність вхідної лексеми BERT, яка може бути як одним, так і двома реченнями, що складені разом.

Перший маркер кожної послідовності — це завжди унікальний маркер класифікації ([CLS]). Кінцевий прихований стан, відповідний цьому маркеру, використовується як сукупне подання послідовностей для класифікаційних завдань. Пари вироку об’єднуються в одну послідовність. Ми розмежовуємо речення двома способами. По-перше, ми відокремлюємо їх унікальним маркером ([SEP]). По-друге, ми додаємо вивчене вбудовування до кожного символу, вказуючи, чи належить він до речення А чи речення В.

Завдання № 1: маска ЛМ

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

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

У цьому випадку остаточні приховані вектори, що відповідають маркерам маски, подаються у вихідний софтмакс над словником, як у стандартній LM.

Хоча це дозволяє нам отримати двонаправлену попередньо підготовлену модель, ми також створюємо невідповідність між попередньою підготовкою та тонким налаштуванням, оскільки маркер [MASK] не з’являється під час тонкого налаштування. Щоб поміркувати над цим, ми не завжди замінюємо «масковані» слова фактичною лексемою [налаштування]. Генератор даних випадковим чином вибирає 15% позицій знаків для прогнозування.

Завдання № 2: Наступне передбачення вироку (NSP)

Деякі з важливих завдань нижче за течією, тобто відповіді на питання (QA) та природні умовиводи (NLI), базуються на розумінні взаємозв’язку між двома реченнями, і це безпосередньо не сприймається мовним моделюванням. Щоб підготувати модель, яка розуміє зв’язки речень, ми попередньо підготуємось до завдання двобічного прогнозування наступного речення. Його можна легко генерувати з будь-якого одномовного корпусу.

Попередня підготовка моделі здебільшого засновується на існуючій літературі певною мовою. Для корпусу перед підготовкою ми використовуємо BooksCorpus (800M слів) та англійську Вікіпедію (2,5M слів). У випадку Вікіпедії ми використовуємо лише текстові уривки без будь-яких інших частин, що містять текст, такі як списки, або таблиці, або заголовки. Для витягування довгих суміжних послідовностей важливо використовувати корпус на рівні документу, а не змішаний корпус рівня речень, як наприклад, Billion Word Benchmark.

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

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

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

Підготовка тексту

Я розділив тексти на мітки (описують поточну посаду) та текст (описують досвід та навички).

BERT -> виконує функції -> на отриманих ознаках робиться класифікація -> рекомендація найбільш підходящого курсу користувачу

Я використовую пакет transformers для реалізації цього алгоритму у своїй задачі.

Трансформери забезпечують сучасні архітектури загального призначення (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, CTRL) для розуміння природних мов (NLU) та створення природних мов (NLG) з більш ніж 32 навчених моделей на понад 100 мовах та глибоку сумісність між TensorFlow 2.0 та PyTorch.

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

BERT-Base та Multilingual Cased включають 104 мови (у тому числі, цікаві для нас, в першу чергу українську, російську та англійську), складаються з 12-ти шарових, 768-ми прихованих та 12-ти повнозв’язних шарів нейронної мережі.

Результат вже готовий до роботи: Pathfinder допомагає підібрати найцікавіший IT-напрямок для кожного світчера.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Прикольно. Но не хватает реальных примеров. Типа:
1. Пришёл вайтишник: «Хочу много денег и женщин». Ответ: «фронтэндер для сайтов пирамид косметики.»
2. Пришёл активный участник городских клубов юных поджигателей, чемпион олимпиады по раздолбанию головой старых построек, из карманов высыпается карбид, за пазухой рогатка с лазерным прицелом. Ответ: Internet of things, учить ассемблер, C++ и использовать паяльник не только чтобы что-то выпаивать.
3. Пришёл: «хочу стабильности». Ответ: «надеть костюм и устроиться в НИИ госкоммраксбытпозорпоставка».
4. Пришёл гопник, кепка в семках. Ответ: идти в white hats, а старые навыки сохранить, если кто-то попросит «взломай вконтактик».
И чтобы каждый пример с запросами и как из них получаются ответы.

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