AI-For-Beginners/translations/uk/lessons/5-NLP/18-Transformers
localizeflow[bot] 132c5c3f8f chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:51:30 +00:00
..
README.md chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:51:30 +00:00
TransformersPyTorch.ipynb Fallback snapshot commit due to git add failure 2026-01-15 12:40:29 +00:00
TransformersTF.ipynb Fallback snapshot commit due to git add failure 2026-01-15 12:40:29 +00:00
assignment.md chore(i18n): sync translations with latest source changes (chunk 1/1, 201 changes) 2026-01-30 02:51:30 +00:00

README.md

Механізми уваги та трансформери

Тест перед лекцією

Однією з найважливіших задач у сфері обробки природної мови (NLP) є машинний переклад, ключове завдання, яке лежить в основі таких інструментів, як Google Translate. У цьому розділі ми зосередимося на машинному перекладі, або, більш загально, на будь-якому завданні послідовність до послідовності (яке також називається трансдукцією речень).

У випадку RNN, завдання "послідовність до послідовності" реалізується за допомогою двох рекурентних мереж, де одна мережа, кодер, стискає вхідну послідовність у прихований стан, а інша мережа, декодер, розгортає цей прихований стан у перекладений результат. Однак цей підхід має кілька проблем:

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

Механізми уваги забезпечують спосіб зважування контекстуального впливу кожного вхідного вектора на кожне передбачення виходу RNN. Це реалізується шляхом створення "коротких шляхів" між проміжними станами вхідної RNN та вихідної RNN. Таким чином, при генерації вихідного символу yt, ми враховуємо всі приховані стани hi вхідної мережі з різними коефіцієнтами ваги αt,i.

Зображення моделі кодер/декодер з додатковим шаром уваги

Модель кодер-декодер з механізмом додаткової уваги у Bahdanau et al., 2015, цитовано з цього блогу

Матриця уваги {αi,j} представляє ступінь, до якого певні слова у вході впливають на генерацію конкретного слова у вихідній послідовності. Нижче наведено приклад такої матриці:

Зображення прикладу вирівнювання, знайденого RNNsearch-50, взято з Bahdanau - arviz.org

Рисунок з Bahdanau et al., 2015 (Рис.3)

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

Кодер-декодер з увагою

Рисунок з блогу Google

Використання механізмів уваги у поєднанні з цим обмеженням призвело до створення сучасних моделей трансформерів, таких як BERT та Open-GPT3, які ми знаємо і використовуємо сьогодні.

Моделі трансформерів

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

  • позиційне кодування
  • використання механізму самоуваги для захоплення шаблонів замість RNN (або CNN) (саме тому стаття, яка представляє трансформери, називається Attention is all you need).

Позиційне кодування/вбудовування

Ідея позиційного кодування полягає в наступному.

  1. У випадку RNN, відносна позиція токенів представлена кількістю кроків, і тому не потребує явного представлення.
  2. Однак, коли ми переходимо до уваги, нам потрібно знати відносні позиції токенів у послідовності.
  3. Для отримання позиційного кодування ми доповнюємо нашу послідовність токенів послідовністю позицій токенів у послідовності (тобто послідовністю чисел 0,1, ...).
  4. Потім ми змішуємо позицію токена з вектором вбудовування токена. Для перетворення позиції (цілого числа) у вектор можна використовувати різні підходи:
  • Навчуване вбудовування, схоже на вбудовування токенів. Це підхід, який ми розглядаємо тут. Ми застосовуємо шари вбудовування як до токенів, так і до їх позицій, отримуючи вектори вбудовування однакових розмірів, які потім додаємо.
  • Фіксована функція позиційного кодування, як запропоновано в оригінальній статті.

Зображення автора

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

Мультиголовна самоувага

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

Зображення з блогу Google

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

Ноутбук TensorFlow містить більше деталей щодо реалізації шарів трансформера.

Увага кодера-декодера

У трансформерах увага використовується у двох місцях:

  • Для захоплення шаблонів у вхідному тексті за допомогою самоуваги.
  • Для виконання перекладу послідовностей - це шар уваги між кодером і декодером.

Увага кодера-декодера дуже схожа на механізм уваги, який використовується в RNN, як описано на початку цього розділу. Ця анімована діаграма пояснює роль уваги кодера-декодера.

Анімований GIF, що показує, як виконуються оцінки в моделях трансформерів.

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

BERT

BERT (Bidirectional Encoder Representations from Transformers) — це дуже велика багатошарова трансформерна мережа з 12 шарами для BERT-base і 24 для BERT-large. Модель спочатку проходить попереднє навчання на великому корпусі текстових даних (WikiPedia + книги) за допомогою ненаглядуваного навчання (передбачення замаскованих слів у реченні). Під час попереднього навчання модель засвоює значний рівень розуміння мови, який потім можна використовувати з іншими наборами даних за допомогою тонкого налаштування. Цей процес називається трансферним навчанням.

зображення з http://jalammar.github.io/illustrated-bert/

Зображення джерело

✍️ Вправи: Трансформери

Продовжуйте навчання у наступних ноутбуках:

Висновок

У цьому уроці ви дізналися про трансформери та механізми уваги, які є важливими інструментами в арсеналі NLP. Існує багато варіацій архітектури трансформерів, включаючи BERT, DistilBERT, BigBird, OpenGPT3 та інші, які можна тонко налаштовувати. Пакет HuggingFace надає репозиторій для навчання багатьох з цих архітектур як з PyTorch, так і з TensorFlow.

🚀 Виклик

Тест після лекції

Огляд та самостійне навчання

Завдання