Zapraszamy do lektury kolejnego artykułu odnoszącego się do prac badawczo-rozwojowych, którymi zajmuje się zespół data science Literackiej. Architektura Transformer, główny temat tego wpisu, była przełomem – na jej bazie powstały nowoczesne modele przetwarzania języka, takie jak BERT czy GPT-2. BERT-a dostrajaliśmy do zadania wyodrębnienia określonych grup wyrazów (tzw. NER) z tekstu, a GPT-2 planujemy wykorzystać do generowania notek wydawniczych książek.

Transformer po raz pierwszy został przedstawiony w artykule Attention Is All You Need [1]. Jest to model typu seq2seq oparty na architekturze enkoder-dekoder wykorzystujący wielowątkowy mechanizm uwagi własnej (ang. Multi-Head Attention). Został zaproponowany przez Google i pierwotnie używany był do zadania tłumaczenia pomiędzy językami naturalnymi. Uzyskał w tym zadaniu lepsze wyniki niż tradycyjne metody rekurencyjne (RNN, LSTM, GRU). Przy czym, dzięki możliwości przeprowadzania obliczeń równolegle, wymagał znacznie mniej czasu na trening. Jego pojawienie się stanowiło rewolucję w ogólnie pojętym NLP. Elementy Transformera umożliwiły zbudowanie nowoczesnych modeli językowych takich jak BERT, czy GPT.

Poniższy rysunek przedstawia architekturę modelu:

Należy zauważyć, że jest to jedynie uproszczony schemat. Liczba szeregowo ustawionych warstw enkoderowych, a także warstw dekoderowych jest równa N. W pierwotnej pracy N = 6.

Zajmiemy się teraz opisem poszczególnych elementów Transformera.

EMBEDDING

Tak jak w większości zadań związanych z NLP, tak i w tym przypadku rozważany model na wejściu wymaga numerycznej reprezentacji tokenów – tzw. osadzenia (ang. embedding). Polega ono na umieszczeniu słów w przestrzeni wektorowej o zadanym z góry wymiarze. W pracy Attention Is All You Need wykorzystano embeddingi 512 wymiarowe. Aktualnie w modelach językowych standardowym wymiarem jest 768 lub 1024. Zanim jednak embeddingi poszczególnych tokenów trafią do enkodera, do każdego z nich zostaje dodany wektor o tym samym wymiarze. Z racji tego iż rozważany model nie jest rekurencyjny – tzn. nie przyjmuje tokenów składających się na zdanie sekwencyjnie lecz równocześnie – musimy wprowadzić pewne informację o pozycji tokenów w zdaniu. W tym celu używamy właśnie kodowania pozycyjnego (ang. Positional Encoding), które pomaga określić pozycje tokenu oraz odległości względne pomiędzy tokenami w zdaniu.

ENKODER

Wejściem dla pierwszego enkodera są zembeddowane, uwzględniające kodowanie pozycyjne tokeny zdania. Zdanie wejściowe jest wówczas reprezentowane poprzez macierz o wymiarach (maksymalna_liczba_tokenów_w_zdaniu, wymiar_embeddingu). Maksymalna liczba tokenów w zdaniu jest ustalanym hiperparametrem. Rozważane zdania są wówczas uzupełniane tokenami pustymi, aby każde z nich miało tą samą ustaloną liczbę tokenów. Wejściem dla każdego następnego enkodera w modelu jest wyjście z poprzedniego. Enkodery zachowują wymiar. Dlatego też architektura każdego z nich może być taka sama.

Pierwszym etapem przejścia przez enkoder jest warstwa Multi-Head Attention (w luźnym tłumaczeniu Wielowątkowy mechanizm uwagi). Schematycznie przedstawiają je poniższe rysunki (Multi-Head Attention po prawej; Scaled Dot-Product Attention po lewej):

Rozważany model – w przeciwieństwie do architektur rekurencyjnych – przetwarza każdą pozycję w zdaniu wejściowym równolegle, w tym samym czasie. Mechanizm uwagi pozwala mu wówczas na znalezienie zależności poszczególnych tokenów względem siebie, a tym samym umożliwia lepsze ich kodowanie. 

Drugim etapem jest przejście przez dwuwartstwową sieć neuronową z funkcją aktywacji ReLU pomiędzy pierwszą, a drugą warstwą. Ponadto, zarówno za blokiem związanym z mechanizmem uwagi, jak i za warstwą neuronową mamy do czynienia z połączeniem residualnym oraz z warstwą normalizującą. Uzyskane w ten sposób wyjście przekazywane jest do następnego ustawionego szeregowo enkodera. 

DEKODER

Architektura dekodera jest bardzo zbliżona do architektury omówionego uprzednio enkodera. Tokeny są w nim jednak przetwarzane sekwencyjnie. Każdy z dekoderów zasilany jest przez wyjście uzyskane z ostatniego enkodera. Przepływ przez cały Transformer ilustruje poniższy rysunek:

PODSUMOWANIE
Elementy Transformera i oparte na nich modele wiodą prym we współczesnym NLP. Ze względu na złożoność obliczeniową mechanizmu Self-Attention są one ograniczone jeżeli chodzi o możliwość przyjęcia na wejściu dużej liczby tokenów. Standardem jest zazwyczaj 768 lub 1024 tokeny. Dla zadań związanych z analizą długich tekstów, takich jak np. generowanie streszczeń jest to zdecydowanie za mało.

W kolejnym artykule przedstawimy metody modyfikacji architektury modelu, umożliwiające pracę z długimi tekstami, takimi jak np. książki.

Autor: Sebastian Jankowski, Data Scientist oraz programista Python w Literackiej

BIBLIOGRAFIA

[1] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, Illia Polosukhin. Attention is all you need, Advances in Neural Information Processing Systems, (2017), 6000-6010.

[2] Jay Alammar. The Illustrated Transformer, http://jalammar.github.io/illustrated-transformer/, (2018)

Kategorie: Blog

0 Komentarzy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *