← Назад к вопросам

Позиционные эмбеддинги: виды, назначение

2.0 Middle🔥 181 комментариев
#NLP и обработка текста#Глубокое обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Позиционные эмбеддинги: виды, назначение

Позиционные эмбеддинги — это дополнительные векторы, которые добавляются к обычным эмбеддингам токенов в трансформерах для того, чтобы модель могла различать порядок слов. Это критически важно, потому что механизм self-attention сам по себе инвариантен к перестановкам последовательности.

Назначение позиционных эмбеддингов

В трансформерах нет рекуррентности, как в RNN. Все токены обрабатываются параллельно через multi-head attention. Без информации о позиции слова в предложении модель не может понять разницу между фразами вроде "кот ловил мышь" и "мышь ловила кота". Позиционные эмбеддинги решают эту проблему, добавляя структурную информацию о местоположении каждого токена.

Основные виды позиционных эмбеддингов

1. Абсолютные позиционные эмбеддинги (Absolute Positional Embeddings)

Оригинальный подход из статьи "Attention is All You Need" (Vaswani et al., 2017) — каждой позиции в последовательности присваивается фиксированный вектор. Используются синусоидальные функции разных частот:

import numpy as np
import torch

def get_positional_encoding(seq_length, d_model):
    """Синусоидальные позиционные эмбеддинги"""
    pos = np.arange(seq_length)[:, np.newaxis]
    i = np.arange(d_model)[np.newaxis, :]
    angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
    pos_encoding = pos * angle_rates
    pos_encoding[:, 0::2] = np.sin(pos_encoding[:, 0::2])
    pos_encoding[:, 1::2] = np.cos(pos_encoding[:, 1::2])
    return torch.from_numpy(pos_encoding).float()

Преимущества: не требуют обучения, экстраполируют на длинные последовательности, малый вычислительный вес. Недостатки: не учитывают контекст, фиксированная максимальная длина.

2. Относительные позиционные эмбеддинги (Relative Positional Embeddings)

Введены в работах Shaw et al. (2018) и T5. Модель учится относительным расстояниям между токенами, а не абсолютным позициям. Это позволяет лучше работать с длинными последовательностями:

class RelativePositionBias(torch.nn.Module):
    def __init__(self, num_heads, max_distance):
        super().__init__()
        self.num_heads = num_heads
        self.max_distance = max_distance
        self.relative_attention_bias = torch.nn.Parameter(
            torch.randn(max_distance * 2 + 1, num_heads)
        )
    
    def forward(self, seq_length):
        distance_matrix = torch.abs(
            torch.arange(seq_length).unsqueeze(0) - 
            torch.arange(seq_length).unsqueeze(1)
        )
        distance_matrix = torch.clamp(distance_matrix, 0, self.max_distance)
        return self.relative_attention_bias[distance_matrix]

Преимущества: гибкие, модель учится релевантным расстояниям, отличная экстраполяция, используются в BERT и RoBERTa.

3. Вращаемые позиционные эмбеддинги (Rotary Position Embeddings - RoPE)

Новейший подход, используемый в GPT-4, PaLM и LLaMA. Вращает векторы эмбеддингов в многомерном пространстве на угол, зависящий от позиции:

def apply_rotary_pos_emb(x, cos, sin):
    x1, x2 = x[..., : x.shape[-1] // 2], x[..., x.shape[-1] // 2 :]
    out = torch.cat([
        x1 * cos - x2 * sin,
        x1 * sin + x2 * cos
    ], dim=-1)
    return out

Преимущества: лучше масштабируются на очень длинные последовательности, эффективнее в вычислениях, показывают лучшие результаты на практике.

Сравнительная таблица

ВидОбучениеЭкстраполяцияВычисленияИспользование
АбсолютныеНетХорошаяМинимальныеBERT, базовые трансформеры
ОтносительныеДаОчень хорошаяСредниеT5, RoBERTa
RoPEНетОтличнаяНизкиеLLaMA, GPT-4, современные LLM

Практическое значение

Выбор типа позиционного эмбеддинга критичен для production систем. Абсолютные хороши для стандартных длин последовательностей, относительные улучшают экстраполяцию, RoPE показывает лучшие результаты и для длинных контекстов, и для инференса. При работе с длинными документами (>2048 токенов) рекомендуется RoPE или методы расширения контекста (ALiBi, position interpolation).

Позиционные эмбеддинги: виды, назначение | PrepBro