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



Перший наївний підхід — просто нумеруємо кожне унікальне слово. Good = 6, bad = 26, awesome = 27. Здається логічним, але ось біда: числа 26 і 27 близькі одне до одного, тому модель подумає, що bad і awesome схожі. Насправді ж awesome і good семантично ближчі. Ось такий підступ.

Спробували One Hot Encoding — кожному слову даємо вектор розміром із весь словник, де лише одна одиниця вказує на потрібне слово, решта — нулі. Проблема ранжування зникла, але з’явилася нова: якщо словник із 20 тисяч слів, кожен вектор буде 20-тисячним. Пам’ять дуже багато їсть, та й семантику слів модель не ловить.

Потім з’явилися Bag of Words і N-грамми — рахуємо, скільки разів слово зустрічається у тексті. Це додає контекст, але знову — великі розріджені вектори і модель не розуміє глибоких зв’язків між словами. Якщо у реченні "The librarian loves books" слова librarian і book не сусідні, N-грамми не зрозуміють, що вони пов’язані.

Саме тут на допомогу приходить правильне кодування через embedding. Ідея в тому, що схожі слова мають лежати близько один до одного у векторному просторі. Уявіть двовимірну площину: на одній осі — розмір тварини, на іншій — небезпека. Тигр і лев будуть поруч (великі і небезпечні), а хом’як — окремо (дрібний і безпечний). Ось що таке embedding — щільний вектор, який зберігає сенс слова у n-вимірному просторі.

Найкрутіше: з такими векторами можна робити математику. Візьмете вектор "сина", віднімете "чоловіка" і додасте "жінку" — отримаєте вектор, близький до "дочки". Або: Мадрид + Німеччина - Іспанія = Берлін. Працює, бо модель уловлює відносини між поняттями.

Як навчають такі embedding? Google запропонувала Word2Vec з двома підходами. У CBOW ви берете контекстні слова і передбачаєте центральне слово. Skip-Gram робить навпаки — від центрального слова передбачає сусідів. Обі техніки добре працюють для навчання word embedding.

У сучасних моделях типу GPT або BERT все трохи інакше. Шар embedding там не беруть готовим, а навчають разом із самою моделлю. Спочатку текст розбивається на токени, потім проста нейромережа створює embedding для кожного токена. Ваги цього шару — навчені параметри, що навчаються представляти слова у потрібному просторі. Потім ці embedding проходять через блоки декодера і потрапляють у вихідний шар, який видає ймовірності для наступного токена.

Одна маленька деталь — позиційне кодування. Трансформер обробляє усі токени паралельно, на відміну від RNN. Тому потрібно якось сказати моделі, в якому порядку йдуть слова. Беруть позиційний вектор і додають його до вектору embedding. Виходить комбо: зміст слова + інформація про його позицію у тексті.

Після позиційного кодування embedding потрапляє у механізм уваги — це вже серце всіх великих мовних моделей. Embedding ловить семантику окремих слів, але контекст розуміє саме attention. Тому слово "ключ" у різних контекстах отримає різні контекстуальні представлення.

Ось так, поєднуючи прості ідеї — токенізацію, підрахунок слів, правильне кодування через embedding — поступово приходиш до трансформерів і ChatGPT. Ембеддинги зараз у всьому: у рекомендаційних системах, у пошуку схожих картинок, у основі всіх сучасних LLM. Якщо хочете розбиратися в NLP по-справжньому, потрібно розуміти, як працюють CBOW, Skip-Gram і вся ця архітектура. Це база, з якої все починається.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Репост
  • Поділіться
Прокоментувати
Додати коментар
Додати коментар
Немає коментарів
  • Популярні активності Gate Fun

    Дізнатися більше
  • Рин. кап.:$2.22KХолдери:1
    0.00%
  • Рин. кап.:$2.23KХолдери:1
    0.00%
  • Рин. кап.:$2.23KХолдери:0
    0.00%
  • Рин. кап.:$2.24KХолдери:2
    0.24%
  • Рин. кап.:$2.23KХолдери:2
    0.00%
  • Закріпити