Глибоке занурення в NLP: від векторів до чат-систем
Векторні представлення та контекстуалізація
Від слів до чисел
Щоб комп'ютери могли обробляти людську мову, слова потрібно перетворити на числа. Найпростіший підхід — призначити кожному слову унікальний ідентифікатор. Але такий метод не враховує семантичних зв'язків. Слова «король» і «королева» будуть так само далекі одне від одного, як «король» і «асфальт».
Сучасний підхід — це векторні представлення, або , де кожне слово представляється як вектор у багатовимірному просторі. Довжина цього вектора (кількість вимірів) може сягати сотень або тисяч. У цьому просторі семантично близькі слова розташовуються поруч. Так, вектор для «собаки» буде ближчим до вектора «кота», ніж до вектора «хмарочоса».
Ранні моделі, такі як Word2Vec та GloVe, створювали статичні представлення. Це означає, що кожне слово мало лише один вектор, незалежно від контексту. Розглянемо слово «замок». Воно може означати споруду або запірний пристрій. Статична модель присвоїть йому усереднений вектор, який не буде точно відображати жодне зі значень.
Контекст має значення
Головний недолік статичних моделей — ігнорування контексту. Людська мова полісемічна, тобто багатозначна. Значення слова часто визначається його оточенням. «Яскрава зірка на небі» та «зірка естради» використовують одне й те саме слово, але з абсолютно різними сенсами.
Сучасні моделі, як-от трансформери, генерують динамічні, або контекстуалізовані, представлення. Вектор для слова «зірка» буде різним у кожному з наведених вище речень. Модель аналізує все речення, щоб створити вектор, який точно відображає конкретне значення слова в даному контексті. Це досягається завдяки механізмам уваги (attention mechanisms), які зважують важливість інших слів у реченні для інтерпретації поточного слова.
Порядок слів і семантична близькість
Трансформерні архітектури обробляють усі слова в реченні одночасно, а не послідовно. Це значно прискорює обчислення, але створює проблему: модель втрачає інформацію про порядок слів. Речення «собака вкусила людину» і «людина вкусила собаку» складаються з однакових слів, але мають кардинально різний зміст.
Для вирішення цієї проблеми використовується . До вектора кожного слова додається додатковий вектор, що містить інформацію про його позицію в реченні. Цей вектор генерується за допомогою синусоїдальних і косинусоїдальних функцій різної частоти. Такий підхід дозволяє моделі не тільки знати, де знаходиться кожне слово, але й легко обчислювати відносні позиції слів одне відносно одного.
Отже, фінальне представлення кожного токена формується з його власного вектора та вектора позиції. Ці комбіновані вектори проходять через шари нейронної мережі, де їхні ваги (матриці ваг) коригуються під час навчання. Ці матриці, по суті, є знаннями моделі про мову.
Таким чином, перехід від статичних до динамічних, контекстуалізованих представлень став ключовим кроком у розвитку обробки природної мови. Він дозволив моделям набагато глибше розуміти нюанси людського спілкування.
Яка головна проблема простого підходу до представлення слів, де кожному слову надається унікальний числовий ідентифікатор?
Чим принципово відрізняються статичні векторні представлення (наприклад, Word2Vec) від динамічних (наприклад, у трансформерах)?
