Zaczniemy od problemu stworzenia modelu języka z odpowiednim kontekstem. Przypomnij sobie, że model języka to rozkład prawdopodobieństwa na sekwencje słów. Pozwala nam przewidzieć następne słowo w tekście, biorąc pod uwagę wszystkie poprzednie słowa i jest często używany jako element konstrukcyjny do bardziej złożonych zadań. Budowanie modelu językowego za pomocą modelu n-gramowego lub feedforward ,sieć z ustalonym oknem na n słów może napotkać trudności z powodu problemu z kontekstem: albo wymagany kontekst przekroczy ustalony rozmiar okna, albo model będzie miał zbyt wiele parametrów, albo jedno i drugie. Ponadto sieć feedforward ma problem asymetrii: czegokolwiek się dowie o, powiedzmy, pojawieniu się słowa go jako 12. słowa zdania, będzie musiała się na nowo nauczyć, aby pojawił się on na innych pozycjach w zdaniu, ponieważ wagi są różne dla każdej pozycji słowa. Wprowadziliśmy rekurencyjną sieć neuronową lub RNN, która została zaprojektowana do przetwarzania danych szeregów czasowych, jeden punkt odniesienia na raz. Sugeruje to, że RNN mogą być przydatne do przetwarzania języka, po jednym słowie na raz. W modelu języka RNN każde słowo wejściowe jest zakodowane jako wektor osadzania słowa, xi. Istnieje ukryta warstwa zt, która jest przekazywana jako dane wejściowe z jednego kroku czasowego do następnego. Interesuje nas klasyfikacja wieloklasowa: klasy to słowa ze słownika. Wynik yt będzie więc rozkładem prawdopodobieństwa softmax nad możliwymi wartościami następnego słowa w zdaniu. Architektura RNN rozwiązuje problem zbyt wielu parametrów. Liczba parametrów w macierzach wag w,z,z, w,x.z i w,z,y pozostaje stała, niezależnie od liczby słów – jest to O(1). Jest to w przeciwieństwie do sieci feedforward, które mają parametry O(n) i modeli n-gramowych, które mają parametry O(vn), gdzie v jest rozmiarem słownika. Architektura RNN również rozwiązuje problem asymetrii, ponieważ wagi są takie same dla każdej pozycji słowa. Architektura RNN może czasami również rozwiązać problem ograniczonego kontekstu. Teoretycznie nie ma ograniczeń co do tego, jak daleko wstecz w danych wejściowych może wyglądać model. Każda aktualizacja warstwy ukrytej zt ma dostęp zarówno do bieżącego słowa wejściowego xt, jak i do poprzedniej warstwy ukrytej zt-1, co oznacza, że informacje o dowolnym słowie w warstwie wejściowej mogą być przechowywane w warstwie ukrytej na czas nieokreślony, kopiowane (lub modyfikowane jako właściwe) od jednego kroku do następnego. Oczywiście w z jest ograniczona ilość pamięci, więc nie może zapamiętać wszystkiego o wszystkich poprzednich słowach. W praktyce modele RNN dobrze radzą sobie z różnymi zadaniami, ale nie ze wszystkimi. Przewidywanie, czy sprawdzą się w danym problemie, może być trudne. Jednym z czynników przyczyniających się do sukcesu jest to, że proces szkoleniowy zachęca sieć do przydzielania przestrzeni pamięci w z na te aspekty danych wejściowych, które faktycznie okażą się przydatne. Dane wejściowe, xt , są słowami w korpusie uczącym tekstu, a obserwowane dane wyjściowe są tymi samymi słowami przesuniętymi o 1. Oznacza to, że dla tekstu uczącego „hello world” pierwsze wejście x1 to osadzenie słowa dla „hello ”, a pierwszym wyjściem y1 jest słowo osadzające dla „świata”. Uczymy model, aby przewidywał następne słowo i spodziewamy się, że w tym celu użyje ukrytej warstwy do reprezentowania przydatnych informacji. Jak wyjaśniono , obliczamy różnicę między obserwowanym wyjściem a rzeczywistym wyjściem obliczonym przez sieć i dokonujemy wstecznej propagacji w czasie, dbając o to, aby wagi były takie same dla wszystkich przedziałów czasowych. Po wytrenowaniu modelu możemy go użyć do wygenerowania losowego tekstu. Nadajemy modelowi początkowe słowo wejściowe x1, z którego wygeneruje wynik y1, który jest rozkładem prawdopodobieństwa softmax na słowach. Próbkujemy pojedyncze słowo z rozkładu, zapisujemy je jako dane wyjściowe dla czasu t i przekazujemy je z powrotem jako następne słowo wejściowe x2. Powtarzamy tak długo, jak chcemy. W próbkowaniu z y1 mamy wybór: zawsze możemy wziąć najbardziej prawdopodobne słowo; możemy próbkować zgodnie z prawdopodobieństwem każdego słowa; lub możemy nadpróbkować mniej prawdopodobne słowa, aby wprowadzić większą różnorodność do wygenerowanego wyniku. Waga próbkowania jest hiperparametrem modelu. Oto przykład losowego tekstu wygenerowanego przez model RNN wytrenowany na dziełach Szekspira:
Marry, and will, my lord, to weep in such a one were prettiest;
Yet now I was adopted heir
Of the world’s lamentable day,
To watch the next way with his father with his face?