Матрица внимания

Матрица внимания — это «карта влияний», показывающая, как сильно каждое слово в предложении зависит от других слов при формировании своего представления. Давайте разберём это подробно.

Как выглядит матрица внимания?

Для предложения из N слов матрица внимания имеет размер N×N. Каждая ячейка (i,j) показывает, насколько слово i «обращает внимание» на слово j.

Пример для предложения «Собака гонится за кошкой»:

Собакагонитсязакошкой
Собака0.90.10.00.0
гонится0.60.20.10.1
за0.10.70.10.1
кошкой0.30.50.10.1

Ключевые особенности:

  1. Диагональ обычно имеет высокие значения — слово всегда «внимательно» к самому себе
  2. Смысловые связи:
    • «гонится» сильно зависит от «Собака» (0.6)
    • «за» зависит от «гонится» (0.7)
    • «кошкой» зависит от «гонится» (0.5)

Как интерпретировать?

  1. Горизонтальные строки: куда смотрит конкретное слово
    • Строка «гонится»: [0.6, 0.2, 0.1, 0.1] → в основном смотрит на «Собака»
  2. Вертикальные столбцы: какие слова влияют на текущее
    • Столбец «кошкой»: [0.3, 0.5, 0.1, 0.1] → на него влияют «Собака» и «гонится»

Multi-Head Attention

В реальных моделях (BERT, GPT) используется несколько матриц внимания параллельно (обычно 12-16), каждая из которых учится выделять разные типы связей:

  1. Голова 1: синтаксические связи (подлежащее-сказуемое)
  2. Голова 2: семантические связи (антонимы, синонимы)
  3. Голова 3: локальные связи (соседние слова)

Визуализация

На практике матрицы внимания визуализируют как тепловые карты, где:

  • Яркие цвета = сильная связь
  • Тёмные цвета = слабая связь

Практическое применение

  1. Анализ неоднозначностей (разрешение кореференции)
  2. Поиск семантических связей между словами
  3. Объяснение решений модели (интерпретируемость)

Механизм внимания (attention mechanism)

Нейронные сети, основанные на архитектуре Transformer (например, BERT, GPT), используют механизм внимания (attention mechanism), который опирается на матрицы внимания для выявления связей между элементами последовательности (например, словами в предложении).

Как это работает?

Входные векторы
Каждому слову (или токену) сопоставляется вектор (эмбеддинг), который затем преобразуется в три вектора:

  • Query (Q) — запрос, представляющий текущее слово.
  • Key (K) — ключ, помогающий определить важность других слов.
  • Value (V) — значение, содержащее информацию о слове.

Вычисление внимания

  • Между всеми Query и Key вычисляется скалярное произведение, получается матрица сходства (attention scores).
  • Эта матрица нормируется с помощью softmax, превращаясь в матрицу внимания (attention matrix).
  • Каждая строка матрицы показывает, насколько сильно текущее слово (Query) должно «обращать внимание» на другие слова (Key).

Типы внимания в Transformer

  • Self-attention (внутри одного предложения) — анализирует связи между словами внутри одной последовательности.
  • Cross-attention (в encoder-decoder) — например, в переводе связывает слова исходного и целевого предложений.
  • Multi-head attention — несколько параллельных матриц внимания для учета разных типов зависимостей.

Пример предложения:

«Птица села на ветку, но она сломалась»

Задача: понять, к чему относится слово «она» — к «птица» или «ветка»?


🔍 Шаг 1: Векторы слов (упрощённо)

Допустим, у нас такие векторы (в реальности их размерность больше):

СловоВектор (пример)
Птица[0.7, 1.0, -0.2]
села[0.1, 0.5, 0.3]
на[0.0, 0.3, -0.1]
ветку[0.4, -0.2, 0.8]
но[-0.1, 0.0, 0.2]
она[0.6, 0.9, -0.3]← Интересует нас
сломалась[0.2, -0.5, 1.0]

🔍 Шаг 2: Вычисляем Attention для слова «она»

  1. Считаем сходство «она» с другими словами (скалярное произведение Query("она") · Key(слов)):
    • Q("она") · K("птица") = (0.6*0.7) + (0.9*1.0) + (-0.3*-0.2) = 1.38
    • Q("она") · K("ветку") = (0.6*0.4) + (0.9*-0.2) + (-0.3*0.8) = -0.36
    • (Для остальных слов сходство будет близко к нулю.)
  2. Применяем softmax к полученным значениям:
    • exp(1.38) ≈ 3.97exp(-0.36) ≈ 0.70, остальные ~1.0.Вес для «птица»: 3.97 / (3.97 + 0.70 + ...) ≈ 0.75Вес для «ветку»: 0.70 / (3.97 + 0.70 + ...) ≈ 0.15Остальные слова: ~0.05.
    → Строка матрицы внимания для «она»:Птицаселанаветкуноонасломалась0.750.010.00.150.00.050.04
  3. Вывод: Модель решает, что «она» относится к «птица» с вероятностью 75%, а к «ветку» — только 15%.

🔍 Шаг 3: Почему так получилось?

  • «Она» ближе по смыслу к «птица», чем к «ветку» (вектор «она» похож на «птица»).
  • Но в реальности «она» = «ветка» (ведь сломалась именно ветка). Значит, модель ошиблась?

🔧 Как это исправить?

  1. Контекст имеет значение! Слово «сломалась» может повлиять на решение.
  2. Механизм Multi-Head Attention (как в реальных Transformer):
    • Разные «головы» внимания могут уловить:
      • Голова 1: «она» → «птица» (по смыслу).
      • Голова 2: «сломалась» → «ветку» (по грамматике).
    • Итоговое решение будет учитывать оба варианта.

Визуализация матрицы внимания:

Птицаселанаветкуноонасломалась
Птица1.00.30.10.00.00.00.0
она0.750.010.00.150.00.050.04
сломалась0.10.00.00.80.00.00.1

Видно, что:

  • «она» больше смотрит на «птица».
  • «сломалась» явно связано с «ветку» (вес 0.8).

Построение «идеальной» матрицы внимания

«Собака грызёт кость»

1. Лингвистический анализ предложения

Предложение: «Собака грызёт кость»
Синтаксическая структура:

  • Подлежащее: «Собака» (субъект действия)
  • Сказуемое: «грызёт» (действие)
  • Дополнение: «кость» (объект действия)

Ожидаемые связи:

  1. «Собака» → «грызёт» (субъект управляет глаголом)
  2. «грызёт» → «кость» (глагол управляет дополнением)
  3. Слабые связи:
    • «Собака» → «кость» (косвенная связь)
    • Самореференция (слова слабо зависят от самих себя)

2. Построение матрицы внимания (до softmax)

Порядок слов:

  1. Собака
  2. грызёт
  3. кость

«Идеальная» матрица AA:

Собакагрызёткость
Собака0.10.80.1(субъект → глагол)
грызёт0.20.10.7(глагол → объект)
кость0.00.90.1(объект зависит от глагола)

Обоснование значений:

  • «Собака» → «грызёт» = 0.8: Сильная связь подлежащего и глагола.
  • «грызёт» → «кость» = 0.7: Сильная связь глагола и дополнения.
  • «кость» → «грызёт» = 0.9: Объект должен сильно зависеть от глагола.
  • Диагональные элементы (самореференция) малы (0.1–0.2), так как слова в первую очередь зависят от других.

3. Применение softmax-нормализации

Итоговая матрица после softmax:

Собакагрызёткость
Собака0.250.500.25
грызёт0.280.260.46
кость0.220.540.24

4. Интерпретация результатов

  • «Собака» уделяет 50% внимания глаголу «грызёт», что отражает субъект-предикатную связь.
  • «грызёт» направляет 46% внимания на дополнение «кость» — это соответствует управлению глагола.
  • «кость» зависит от глагола «грызёт» (54%), что логично для объекта действия.

Сравнение с реальными моделями:
В реальных NLP-моделях (например, BERT):

  • Матрицы внимания могут иметь более сложные паттерны (например, «кость» может слабо зависеть от «Собака»).
  • Значения диагональных элементов часто выше из-за обучения на больших корпусах текстов.


Вывод:

  • Attention помогает находить связи, но не всегда идеально с первого раза.
  • Multi-Head Attention и глубокие слои улучшают результат (например, исправляют «она» → «ветку» через контекст).
Прокрутить вверх