Transformer-encoder

En Transformer-encoder er den del af Transformer-arkitekturen, der behandler input-sekvensen ved hjælp af selvopmærksomhed og feed-forward lag for at producere kontekstualiserede repræsentationer for hvert token.

Kort fortalt

Transformer-encoderen læser en hel tekst og laver en rig forståelse af hvert ord baseret på alle de andre ord i teksten.

Kategori
arkitektur
Niveau
øvet

Betydninger

2
  1. 1

    Den komponent i Transformer-arkitekturen der består af en stak af identiske lag, hvert med multi-head selvopmærksomhed og et positionsvis feed-forward netværk, som behandler inputsekvensen for at generere kontekstualiserede repræsentationer.

    • I Transformer-arkitekturen består encoderen af seks identiske lag, hvert med multi-head opmærksomhed og et feed-forward netværk.Vaswani et al., 2017
  2. 2

    En model der udelukkende består af en stak af Transformer-encodere, ofte fortrænet på store mængder tekst, og anvendt til sprogforståelsesopgaver.

    • BERT er en populær Transformer-encoder-model, der er fortrænet på en kombination af maskeret sprogmodellering og næste-sætnings-forudsigelse.Devlin et al., 2019

Hvornår bruges det

Transformer-encoderen anvendes især i sprogforståelsesopgaver som tekstklassifikation, navnegenkendelse og spørgsmålssvar, hvor den kontekstualiserede repræsentation er afgørende. Den er grundlaget for modeller som BERT og RoBERTa, der udelukkende består af encoder-dele.

Kodeeksempel

import torch.nn as nn

class TransformerEncoderLayer(nn.Module):
    def __init__(self, d_model, nhead, dim_feedforward, dropout=0.1):
        super().__init__()
        self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        self.linear1 = nn.Linear(d_model, dim_feedforward)
        self.dropout = nn.Dropout(dropout)
        self.linear2 = nn.Linear(dim_feedforward, d_model)
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.dropout1 = nn.Dropout(dropout)
        self.dropout2 = nn.Dropout(dropout)

    def forward(self, src, src_mask=None, src_key_padding_mask=None):
        src2 = self.self_attn(src, src, src, attn_mask=src_mask,
                              key_padding_mask=src_key_padding_mask)[0]
        src = src + self.dropout1(src2)
        src = self.norm1(src)
        src2 = self.linear2(self.dropout(torch.relu(self.linear1(src))))
        src = src + self.dropout2(src2)
        src = self.norm2(src)
        return src

Eksempel på et enkelt Transformer-encoder-lag implementeret i PyTorch.

Oprindelse

Termen stammer fra Transformer-arkitekturen, hvor encoderen er den del, der 'koder' inputtet til en latent repræsentation. Ordet 'encoder' kommer fra engelsk og betyder 'indkoder'.

Afledte ord

2

Kilder

2
  • Attention Is All You Need
  • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding