
Door Paulien Lemay
Hoe kan deep learning mediamakers helpen om content te maken, aangepast aan de voorkeuren van de lezer? In het NewsTAPAS project onderzochten we hoe we nieuws kunnen personaliseren door de vorm van een artikel zelf aan te passen. Hieruit bleek de nood om tegelijkertijd ook de automatische samenvatting van een artikel te verbeteren. We gingen aan de slag met Natural Language Processing (NLP) en vergeleken recurrent neural networks (RNN), long short-term memory (LTSM), Transformer-modellen en hun toepassingen binnen media. In dit artikel bundelen we enkele inzichten en aanbevelingen.
1. Recurrent neural networks (RNN)
We nemen als voorbeeld de volgende zin.
Jef is thirsty, so he orders a beer.
Wanneer je leest "he orders a beer", dan onthoud je dat hij dat doet omdat hij dorst heeft. Als we willen dat een neuraal netwerk over logische correlaties in taal leert, willen we dat deze bij het lezen van het tweede deel van de zin ook het eerste deel nog herinnert.
Een taalmodel moet de context onthouden. Terwijl het netwerk traint, zal het zichzelf voortdurend corrigeren. Misschien zal het tijdens de eerste keer een aantal berekeningen maken en voorspellen dat Jef een koffie, een banaan of zelfs een koelkast zal bestellen. Zodra het netwerk realiseert dat er iets niet klopt, dan zal het de vorige blokken aanpassen om de volgende keer "bier" te kunnen voorspellen.
Voor elk woord vergelijken we de voorspelde uitkomst met de werkelijke uitkomst.
Maar wat als we de tekst veranderen op de volgende manier?
Jef and his friends went for a long bike ride. The sun was shining and there was little wind, so it was a perfect day to set some new records. Now they are thirsty, so they order beers.
Een RNN slaagt er minder goed in om dingen te onthouden waarover we lang geleden gesproken hebben. Dus als we het over "they" hebben, herinnert het zich misschien geen context.
Metaforisch gesproken zouden we bij de twee laatste blokken ("they" en "are") kunnen aangeven dat grammaticale onderwerpen belangrijk zijn. Vervolgens zullen ze deze informatie via de vorige blokken doorgeven, helemaal terug naar het begin, zodat elk blok in de keten leert dat het onderwerp-gerelateerde informatie niet kan negeren. In dit proces kunnen echter twee dingen gebeuren.
- Vanishing gradient: Bij elke terugkerende stap kan het algoritme bepaalde informatie vergeten. Wanneer we helemaal bij het begin van de tekst zijn herinnert het algoritme zich misschien niet meer dat onderwerpen belangrijk zijn. Dat betekent dat het RNN op een bepaald punt gewoon stopt met leren.
- Exploding gradient: Bij elke terugkerende stap kan het algoritme ook eerder aandacht schenken aan het belang van de fout die het maakte. Tegen de tijd dat we bij het begin van de tekst zijn, zou het algoritme kunnen overreageren.
2. Long short-term memory (LSTM)
Een LSTM selecteert welke informatie bewaard moet worden. LSTM's zijn RNN's die een soort geheugen hebben. Voor elke stap die het systeem zet zal het netwerk beslissen wat er in het geheugen bewaard moet worden. Wanneer een cel dus "long" ontvangt van de vorige cel en "bike" als nieuw woord, moet het beslissen of het beide woorden in zijn geheugen bewaart, één ervan mag vergeten of andere dingen uit zijn geheugen kan vergeten. Om die reden is een LSTM beter dan een gewoon RNN om een bredere context te onthouden.
3. Seq2Seq architectuur
Wanneer we een LSTM of een RNN trainen, dan willen we tot een model komen dat de context kent en weet hoe waarschijnlijk het is dat woorden samen voorkomen.
We kunnen echter meer doen door twee LSTM/RNN netwerken aan elkaar te koppelen. Dat ontdek je bijvoorbeeld bij vertalingen. Alles wat de eerste LSTM (de encoder) geleerd heeft, kunnen we voeden aan een tweede LSTM (de decoder). Daartussen voegen we een label toe die de taalverandering aangeeft. Net zoals het model weet dat "Jef" waarschijnlijk gevolgd zal worden door "beers", zal het op die manier ook weten dat "Jef and his friends… beers” + <FRENCH MARKER> waarschijnlijk gevolgd zal worden door "Jef et ses amis...".
4. Transformers
Transformer-modellen bieden een oplossing voor het probleem van de opeenvolgende verwerking van woorden. In de voorgaande voorbeelden konden we niet beginnen met het verwerken van "friends" voordat we "Jef and" hebben 'ontvangen'. Dat is computationeel inefficiënt en vertraagt het trainen van grotere modellen.
Transformer-modellen nemen grotere blokken informatie en verwerken woorden parallel. Ze kunnen bijvoorbeeld "Jef and his friends" verwerken. Wanneer de Transformer dit zinsdeel ontvangt, berekent het de relaties tussen alle woorden. Het neemt dus bijvoorbeeld "his" en kijkt hoe sterk dat woord gerelateerd is aan zowel de voorgaande als de volgende woorden. Dat betekent dat we niet langer afhankelijk zijn van de woordvolgorde om correlaties tussen woorden in te schatten. Dat fenomeen wordt het aandachtsmechanisme genoemd.
Dit aandachtsmechanisme is vaak onderdeel van een seq2seq model, dat er zo uitziet:
Voor elke zin waarmee we de encoder voeden, berekenen we de aandacht meerdere keren. Tussen elke aandachtslaag zit een feed forward laag, die de gegevens voorbereidt om ze aan een nieuwe aandachtslaag te voeden. Nadat we de hele encoder hebben doorlopen, eindigen we met een taalmodel dat Jef en zijn context nog beter kent, omdat het niet afhankelijk is van de woordvolgorde.
Als we meer met deze kennis willen doen, dan kunnen we ze aan een decoder voeden. Een decoder baseert zich op kennis van correlaties tussen woorden om te bepalen wat waarschijnlijk het volgende woord zal zijn. De aandacht in de decoder is enigszins anders. In de decoder verbergen we de volgende woorden, zodat we de decoder kunnen dwingen zelf te bedenken wat het volgende woord zou kunnen zijn. Op die manier zal onze decoder bijzonder goed worden in het voorspellen van het volgende woord.
Zoals je kan zien heeft de decoder ook een encoder-decoder-aandachtslaag. Dat is waar we de bronzin (Engels) vergelijken met de doelzin (Frans). Als twee woorden in het Engels nauw met elkaar verbonden zijn, is het waarschijnlijk dat ze dat in het Frans ook zijn. Net als in het encoder-model voeden we de output van de aandachtslagen met een feed forward laag om deze te kunnen voeden met een nieuwe aandachtsreeks.
Verschillende algoritmen gebruiken dit Transformer idee op allerlei manieren. Misschien heb je geen transformatie nodig omdat je gewoon alles wilt weten over Jef zijn context. In dat geval zou een encoder volstaan (ex. BERT). Maar misschien wil je je alleen concentreren op het voorspellen van het volgende woord in een zin. In dat geval zou een decoder voldoende kunnen zijn (GPT2).
Aanvullende informatie vind je hier:
- https://jalammar.github.io/illustrated-transformer/
- https://arxiv.org/abs/1706.03762
- https://towardsdatascience.com/bert-explained-state-of-the-art-language-model-for-nlp-f8b21a9b6270
- https://arxiv.org/abs/1910.13461
Banner: Alina Grubnyak via Unsplash