Data-augmentering: ’Lade cykler’, den grønbuede figenfugl og hvorfor det er sværere end som så at manipulere sig til mere tekstdata

Data, data, data. Vi ønsker os altid mere data i Natural Language Processing (NLP), for mere data er umiddelbart nøglen til bedre modeller. Derfor vil jeg i dette blogindlæg prøve at besvare spørgsmålet: kan vi manipulere os til mere data, i stedet for at den eneste løsning er at scrape løs og annotere som gale? Undervejs vil det vise sig, at sproget er en kompleks størrelse at ændre på.

Nanna Kildahl Keseler
DaNLP
Published in
12 min readDec 15, 2020

--

En ny teknik begynder at gøre sit indtog inden for NLP: Data-augmentering. Det er en teknik, der har til formål at automatisere produktionen af nye sætninger ved at kopiere og tilføje små forandringer til det originale data. Denne augmentering sker dog hele tiden sådan, at de nye sætninger stadig er meningsfulde. På den måde øges datamængden, og de ændrede sætninger gør, at der er mere data at træne modeller på.

Der eksisterer forskellige ideer til, hvordan sætninger kan ændres, fx at bytte ord ud med synonymer, tilføje stavefejl og oversætte data til et fremmedsprog for derefter at oversætte tilbage til det originale sprog.¹ Med sådanne værktøjer kan et datasæt tredobles eller mere til, og vi kan hurtigt manipulere os til mere data som ønsket.

Men tekstdata-augmentering fjerner ikke alt arbejdet, for der er stadig en række forhold at tage højde for, når vi begynder at manipulere med tekst, fx ordklasser, bøjning og dobbelte betydninger af ord. Sproget er komplekst og kontekst-bestemt, så hvad der umiddelbart synes at være små ændringer kan resultere i store forandringer og gøre en ellers meningsfuld sætning til volapyk og i andre tilfælde ændre meningen bag sætningen.

Senere skal vi teste tekstdata-augmentering på dansk i et forsøg på at forbedre vores sentiment-model (som ligger frit tilgængelig på GitHub), men inden da vil vi fundere lidt over, om det, at ”Anne så gerne vil se DaNLP’s gule svane med en rød hat på”, mon betyder, at Anne eller den gule svane skal have en rød hat på?

Sproget har nemlig mange finurligheder, men som regel forstår vi på et splitsekund, hvad det handler om. Når Anne spørger, om du kan nå mælken, tænker du formentlig ikke over, at det er en indirekte sproghandling. Men du ved instinktivt, at hun er ret ligeglad med, om du kan mælken, og at hun faktisk spørger dig om at række hende mælken.

Vi har da også et godt udgangspunkt for at navigere i en kompleks verden, fordi vores hjerne behandler inputs med en enorm hastighed og formår at kombinere forskellige indtryk og kontekster. Af den grund behøver vi ikke overveje, når vi ser nedenstående billede, om en doven, lad cykel kan transportere os fra A til B. Vi regner hurtigt ud, at der må være tale om, at det er en ladcykel, altså en cykel med et lad, de sælger.

Billedet er fra: avisen.dk

Denne evne til at forstå ud fra kontekst gælder både skriftsprog, billeder, lyde og andre inputs, vi fortolker. Når vi tolker, bruger vi omgivelserne til at ”gætte” på, hvad det mest sandsynligt er, vi ser. Forestil dig, at du ser en bevægelse på himlen i Danmark. Hvad vil du gætte på, at du har set? En solsort, en måge eller måske havørn, hvis du er ved Egå Engsø og pletten var forholdsvis stor? Mit bud er, at du i hvert fald ikke har overvejet, at det kunne være en Inkakakadue eller en grønbuget figenfugl — af den simple grund at de primært forekommer i Australien og ikke Danmark. Det kan virke banalt og selvfølgeligt, men evnen til at se og forstå helheden af en situation gør, at vi kan forholde os gnidningsfrit til en alsidig verden; om det så drejer sig om eksotiske fugle, indirekte sproghandlinger eller stavefejl.

Et adnet eskemepl på hovr aførgende hlheeden er, hvadon vi fatkisk fåmorr at lsæe hele sæntniger, solevm botavegrne i ordnee er btytet rdunt, og horvadn vi kalrt ser to trnekeater i biledlet heeundrr, sevlom de fakstik ikke er mrekerat.

Billede af Fibonacci — Own work, CC BY-SA 3.0, commons.wikimedia.org

Disse eksempler har (forhåbentligt) gjort det tydeligt, hvor fleksibel og stærk vi menneskers forståelse er i mødet med tvetydige signaler. Vi kan udlede hensigten, hvilket er meget svært for sprogmodeller, der lærer ud fra en begrænset datamængde. Nogle modeller formår i et vist omfang at inddrage kontekst, mens andre modeller behandler ord enkeltvis. Med det på plads bevæger vi os nu videre til nogle af de udfordringer, der kan opstå, når man arbejder med tekstdata-augmentering på dansk. For hvor vi oplever det let at eksperimentere med sproget, vil dobbelttydige- og særegne betydninger vise sig besværlige, når sprogforandringerne skal automatiseres.

Dobbelt op på betydninger: Kompleksiteten ved synonym-swap

Som nævnt i introduktionen synes mere data at være løsningen til forbedrede NLP-modeller, og vi vil derfor gerne have større datamængder at træne vores danske modeller på. En måde at få mere data på er at udvikle danske værktøjer, der kan producere nye sætninger, som varierer fra de originale, men hvis indhold stadig er meningsfuldt. En simpel tilgang til data-augmentering er at tilføje støj gennem stavefejl, og en lovende tilgang er at bytte ord ud med dets synonymer, og vi har derfor udviklet en funktion, som kan begge dele. Vi vil fokusere mest på udbytning af ord, da den tilgang kræver flere overvejelser og afslører sprogets kompleksitet.

Forskellige typer af ord er mere eller mindre bærende for sætningsstrukturen. For at bevare grammatisk korrekthed bedst muligt har vi i funktionen implementeret muligheden for at vælge, hvilke ordklasser der skal byttes ud. NLP-lingoen for ordklasser er POS-tags, som står for Part-Of-Speech-tags. En POS-model er altså en model, der er trænet til at identificere ordklasser på dansk, og den gør det muligt at udvælge ord med en specifik ordklasse til at blive erstattet af et synonym.

Hvordan finder vi så synonymerne, spørger du måske? Vi har to muligheder. Den første er gennem et dansk WordNet kaldet DanNet. Nettet består af diverse relationer mellem begreber, fx har kage underbegreber som makron, snitte og lagkage, kage bruges til at spise, mens kage er lavet af mel og sukker. Den anden mulighed er danske word embeddings, der repræsenterer tekst som talvektorer. Ord, der har semantisk lighed, eller ofte optræder på samme måde, vil være placeret tæt på hinanden i vektorrummet, og gør det muligt at finde ord, der ligner hinanden. Fx kan vi på nedenstående billede se, at kage er meget lig lagkage, kransekage mm. (tallet indikerer hvor ens ordene er, hvor 1 vil betyde, at der er tale om det nøjagtigt samme ord).

Lad os se nogle eksempler på, hvad der kan ske, når vi bytter ord ud.

”Får får får? Nej, får får ikke får, får får lam”

Mange danskere er nok stødt på denne vending i deres barndom, som et underholdende ordspil. Det lyder som sludder og vrøvl, men de gentagne ”får” er faktisk meningsfyldte. Og nu skal ordspillet tilmed vise sig nyttigt i forhold til at forstå, hvordan ord med dobbelt ordklasse forårsager rod, når vi arbejder med tekstdata-augmentering. I sætningen optræder ordet får, der staves helt ens, tre gange, men med to forskellige ordklasser, verbum og substantiv. Hvis man bytter med lignende ord, kunne sætningen meningsfuldt blive ”føder får får?” eller ”får føder får?” men ikke ”får får føder?”. Puha, det er lige til at få sved på panden af. Hvordan får vi skilt fårene fra bukkene og sikret os, at vi får byttet ord ud med lignende ord, så sætningen stadig giver mening?

Her skal vi se nærmere på den såkaldte Part-Of-Speech-model, der identificerer ordklasser, også selvom sætningen kan være tricky. Se fx hvordan ”piller” i sætningen; ”Jeg piller ikke ved andres piller”, tagges korrekt som et verbum i starten og dernæst som et substantiv.

Disse homonymer (ord der staves ens, men har forskellig betydning) gør det kompliceret at bytte ord. Synonymer til verbet ”pille” (røre ved, skrælle) er helt anderledes end synonymer til substantivet ”pille” (tablet, pastil). I funktionen, der bytter ord, tjekkes det derfor, om synonymet eller word-embeddingen har samme ordklasse som det originale ord. Først derefter kan ordet blive accepteret som et muligt udbytningsord.

Dog kan der stadig ske fejl, idet ord med dobbeltbetydning, der står alene fremfor i en kontekst, kan ende med at blive tagget forkert, da POS-modellen må vælge en af de mulige POS-tags. Se fx hvordan ’piller’ tagges som et substantiv, når det står alene:

”Hun bader sig i sproglige finurligheder”

Hvor skønt at hun nyder sprogets finurligheder! Men lad os, som ved tekstdata-augmentering, prøve at bytte et ord ud i overskriften med et synonym, så overskriften bliver til; ”Hun svømmer sig i sproglige finurligheder”. Ét er, at sætningen kæmper med syntaksen, men i det tilfælde at den ikke gjorde, ville den lyde; ”Hun svømmer i sproglige finurligheder”. Det ene ord ændrer den oprindelige betydning fra glæde og nydelse ved sproget til at have rigeligt med sproglige udtryk.

Dette skyldes, at ordene ”bade” og ”svømme” har flere betydninger afhængig af konteksten. I denne sætning betyder ”bade” at nyde i høj grad, og er derfor langt væk fra den direkte betydning af at ”bade” i fx Vesterhavet. På samme måde er betydningen af ordet ”svømme” ikke en svømmetur i Vesterhavet, men får her betydningen at have rigeligt af, og måske endda have fået nok af, sproglige finurligheder.

Det er da finurligt! Tænk, hvordan et ords betydning bestemmes ud fra dets omkringliggende ord, ligesom vores placering på jordkloden sandsynliggør hvilken fugl, der er tale om, når vi ser bevægelser på himlen.

Det viser samtidig, hvor sensitivt sproget er overfor forandringer. DanNettet vil i langt de fleste tilfælde returnere lignende ord, men det kan drille, når modellen identificerer POS-tags ud fra enkeltstående synonymer uden højde for kontekst. Word embeddings kan være placeret tæt på ordet på grund af forekomst eller type af ord, men deler ikke nødvendigvis samme betydning. I eksemplet nedenfor ses, hvordan ”desværre” byttes ud med ”heldigvis”, og sætningens betydning vendes derfor på hovedet, da de nærmere er antonymer end synonymer.

I et forsøg på at begrænse uhensigtsmæssige ombytninger er der i funktionen implementeret en nedre grænse, så det kun er embeddings med en similarity score over 0.80, der godkendes som et muligt swap.

Summa summarum; både kontekst, korrekte ordklasser og betydninger af ord er afgørende for, at en sætning forbliver meningsfuld, når vi augmenterer tekstdata ved at bytte ord ud.

Det dér mellem linjerne: Kunsten at forstå ”ikke” korrekt

Tit kommunikerer mennesker indirekte med minimale sproglige indikationer, og ofte påvirkes tolkninger af følelser eller træthed. Sprogteknologien er blottet for emotionelle påvirkninger, men kan derimod bøvle med at opfange de underliggende budskaber. Algoritmerne lærer fra os og vores, hvis ikke vi vogter os, biased vurderinger. Først skal vi se eksempler på indirekte- og mangetydige budskaber, som opstår ved brug af ”ikke”. Bagefter dykker vi ned i et lille undereksperiment i det store eksperiment — at optimere vores sentiment-model — nemlig at undersøge om vi kan forbedre modellens forståelse af det ambivalente ord ”ikke”.

”Kan vi ikke diskutere det senere, når du har købt den ladcykel?”

Mellem linjerne står der vist nok: Vi diskuterer nu, fordi du er distræt og irriteret over, at du ikke har haft ro til at købe ladcyklen. Tonen er subtil og gemmer sig formentlig i tilstedeværelsen af det lille adverbium ”ikke”. Hvis ”ikke” slettes, forsvinder den irriterede tone i spørgsmålet, og muligheden opstår for, at spørgsmålet faktisk bare betød, at personen selv var for træt til at diskutere lige nu eller ville afstemme, hvornår de kunne tage snakken.

Vi kan sige eller skrive ét, men blive forstået på x antal forskellige måder. Det er fristende at sige, at ordene bliver processeret forskelligt — at der tildeles forskellige ordklasser, analyser af hvilke ord, der knytter an til andre, varierer og det vurderes uligt, hvilket sentiment der er dominerende.

”Det er ikke en god ide at lege med tvetydige adverbier”

Her kan sentimentet igen ændre sig afhængigt af tilstedeværelsen af ”ikke”; ”Det er en god ide at lege med tvetydige adverbier”. Ikke nok med det, placeringen af ”ikke” spiller også en rolle: ”Det er en god ide ikke at lege med tvetydige adverbier”. Sentimentet ændrer sig, da ”ikke” ikke længere udtrykker en dårlig ide men derimod en præference overfor at afstå fra en handling. Om det så er en god eller dårlig ide at lege med adverbierne, kan sikkert føre til en morsom diskussion, men det, som er sikkert, er, at erfaring med ”ikke” er afgørende for en god og nuanceret klassifikationsmodel.

Vi har derfor, i undereksperimentet, produceret både positive og negative sætninger, som indeholder negationer med det formål at hjælpe modellen til bedre at forstå det mangetydige adverbium ”ikke”.

Vi sammenlignede to sentiment-modellers performance i at klassificere drilske negationssætninger. De to modeller blev trænet henholdsvis med og uden negationsregulerende sætninger, og modellen blev forbedret ved træning med de negationsregulerende sætninger, målt i accuracy (macro f1), fra 0.62 (0.45) til 0.72 (0.72). Andre evalueringsmetoder afslørede, at særligt klassificeringen af de positive sætninger blev forbedret. Modellen indordner sig altså og kommer på rette spor i forhold til at undgå en ensidig forståelse af adverbiet ”ikke”, når den eksponeres for tvetydige og forskelligartede tilfælde.

Underliggende hentydninger, tilstedeværelse og placering af adverbier såvel som alle andre ord er nuancer i sproget, der understreger dets kompleksitet og nødvendigheden af store datamængder til at træne modeller på.

Efter at have undersøgt de potentielle udfordringer ved tekstdata-augmentering på dansk og det drilske adverbium ”ikke”, er det nu tid til at løfte sløret for om tekstdata-augmentering kan forbedre vores sentiment-model.

Når det at bakke frem og tilbage med tekstdata kan være noget op ad bakke

Kan vi virkelig automatisere manipulationer af sproget og opnå bedre modeller ved at bytte ord og tilføje enkelte stavefejl, når dansklærerne i folkeskolen har tudet vores ører fulde af korrekturlæsning, kreativitet og grundighed? Eksemplerne i denne blog understøtter dansklærernes kamp for vigtigheden af at være grundig i danske stile såvel som i tekstdata-augmentering. Sproget er netop følsomt overfor selv de mindste detaljer og utilsigtede afvigelser fra betydningshensigten.

Det giver sig til udtryk, når vi ser på resultaterne for træning af sentiment-modellen. Ingen af kombinationerne af augmenteret tekstdata forbedrer modellen. Så på trods af gode ideer til at augmentere tekstdata, tager sproget nogle gange nej-hatten på, hvilket kan være lidt op ad bakke. Men når vi så står på bakken og skimter ud over horisonten, er der håb. Den mest lovende augmenterings-metode er udbytning af synonymer, så når de danske NLP-ressourcer bliver endnu bedre og nærmer sig det engelske niveau, skal eksperimentet uden tvivl gentages.

Less is more..

.. er en lille funfact i forhold til tekstdata-augmentering. Jo mindre data du har, jo større potentiale ser det ud til, at tekstdata-augmentering har til at forbedre performance.² Det virker helt modsat af vores udgangspunkt med NLP’s evige ønske om mere data, men ikke desto mindre er det også ved meget lidt tekstdata, at behovet for mere data er størst. På den måde matcher efterspørgsel og udbud — dejligt ikke? Så skulle du selv ligge inde med et lille datasæt, kan du finde en tutorial til tekstdata-augmentering på vores github.

Tak for din opmærksomhed og interesse

Eller; Tak for din påskønnelse og interesse, som et synonym swap vil føre til. Jeg håber, du har nydt at fundere over sprogets finurlige kompleksitet og samtidig blevet lidt klogere på, hvordan vi forhåbentlig med endnu bedre danske NLP-ressourcer kan lave lidt data til meget data.

Mens vi arbejder på det, er du mere end velkommen til at hjælpe os med at få annoteret data ved at spille Angry Tweets.

[1] Luque, F. M. (2019). Atalaya at tass 2019: Data augmentation and robust embeddings for sentiment analysis. arXiv preprint arXiv:1909.11241;
Zhang, X., Zhao, J., & LeCun, Y. (2015). Character-level convolutional. networks for text classification. In Advances in neural information processing systems (pp. 649–657);
Sun, X., & He, J. (2020). A novel approach to generate a large scale of supervised data for short text sentiment analysis. Multimedia Tools and Applications, 79 (9), 5439–5459.

[2] Wei, J., & Zou, K. (2019). Eda: Easy data augmentation techniques for boosting performance on text classification tasks. arXiv preprint arXiv:1901.11196.

--

--