Positionell kodning

term_id: positional_encoding

Category: basic_concepts

Definition

Eftersom transformers behandlar alla token parallellt snarare än sekventiellt som RNN:er saknar de inneboende kunskap om tokenordning. Positionell kodning lägger till specifika vektorer till inbäddningsvektorerna för att bevara ordningsinformationen.

Summary

En teknik som injicerar information om den relativa eller absoluta positionen för token i en sekvens in i transformer-modeller.

Key Concepts

  • Sekvensordning
  • Självuppmärksamhet
  • Sinusfunktioner
  • Token-inbäddningar

Use Cases

  • Maskinöversättning
  • Textsammanfattning
  • Språkmodellering

Code Example

1
2
3
4
5
6
7
8
9
import torch
import math
def get_positional_encoding(seq_len, d_model):
    pe = torch.zeros(seq_len, d_model)
    position = torch.arange(0, seq_len, dtype=torch.float).unsqueeze(1)
    div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
    pe[:, 0::2] = torch.sin(position * div_term)
    pe[:, 1::2] = torch.cos(position * div_term)
    return pe.unsqueeze(0)