AI FÖR NATURLIGT SPRÅK

Kursinfo

Kursmaterial

FAQ

Kursmaterial

/

Kapitel

Deluppgift 3: Tokenisering

Tokenisering av text

Följande filer används i uppgiften:

text1.txt - Text från Gustav III:s Wikipedia-sida.
gold1.txt - Tokeniserad text från Gustav III:s Wikipedia-sida.
lt2.py - Given kod med funktioner för utvärdering.

För att spara filerna, högerklicka på länken och välj att spara filen. Du behöver inte ladda ned några filer för att genomföra uppgiften, utan de är per automatik tillgängliga för användning i kodcellerna nedan.


I tidigare deluppgifter har vi delat upp strängar med text till mindre beståndsdelar, så kallade token. En token kan vara ett enskilt ord eller ett tecken. I denna deluppgift ska vi tillämpa mer avancerade verktyg för tokenisering och utvärdera vårt resultat.

Först läser vi in två dataset som vi ska arbeta med. Den ena filen text1.txt innehåller text som extraherats från Gustav III:s Wikipedia-sida. Det är texten i denna fil som vi vill tokenisera. Den andra filen gold1.txt innehåller samma text, men den har redan tokeniserats. Tanken med denna data är att den kommer agera som en referenspunkt; testdata som vi kan jämföra våra metoder för tokenisering mot. Namnet gulddata använder vi om den data som vi anser är sann.

I nästa kodcells utskrift kan du se hur texten har delats upp i token för gulddata.

Vi har i tidigare deluppgifter delat upp texten i token med mellanslag som separator. Du ska igen lägga till den kod som krävs för att tokenisera efter white space (mellanslag, tab, radbryt).

Resultatet ser genast mycket bättre ut, även om vi kan se skillnader gentemot samma text i gulddata. För att få en bättre förståelse ska vi utvärdera modellen med funktionerna i nästa kodcell. Funktionerna är givna i ett paket som vi har skrivit specifikt för denna uppgift:

n_errors - Returnerar antalet fel i testdata jämfört med gulddata.
precision - Returnerar precisionen av vår tokenisering.
recall - Returnerar täckningen av vår tokenisering.

Att bara tokenisera efter white space ger ett bra resultat, men det finns stora förbättringsmöjligheter. Tokenisering är ofta ett första steg i en process där vi vill skapa modeller som tränar på och lär sig av textdata. Små fel i detta inledande steg kan leda till att felen sprider sig vidare i processen och påverkar våra modeller negativt.

För att kunna förbättra vår tokeniserare behöver vi få en tydligare bild av hur resultatet skiljer sig från gulddata. Den givna funktionen diff presenterar vad motsvarande token är i gulddata.

Det finns uppenbarligen mycket som kan förbättras. Ett sätt att fånga många av dessa felen är att använda sig av regex-uttryck (Regex är en metod för att söka efter och ersätta delar i strängar). Istället ska vi använda en färdig tokeniserare för svenska.

Biblioteket Spacy erbjuder många användbara funktioner för naturligt språk-behandling. En av dem är tokenisering av text. För att använda Spacy behöver vi importera biblioteket, ladda ned den svenska tokeniseraren, och skapa en så kallad pipeline.

I nästa kodcell ser du ett exempel på hur vår pipeline kan användas. Den tar in en sträng bestående av två meningar och genererar ett dokument bestående av token. Vi kan t.ex. komma åt dessa token genom att loopa över dokumentet som vi fått ur vår pipeline. Varje token har attribut som vi kan komma åt, som dess index i meningen och dess sträng. Det finns många fler användbara attribut, och som går att hitta i Spacys dokumentation. Vi kommer använda fler av dem i slutuppgiften.

I nästa kodcell ska du lägga till den kod som behövs för att alla meningar i text-data ska tokeniseras (med Spacy) och varje token ska sedan sparas i listan tokens.

Utskriften från kodcellen ovan verkar lovande – tokeniseringen ser precis ut som, eller är mycket lik, den vi ser i gulddata. För att få en bättre bild över hur vår tokeniserare presterar så utvärderar vi den igen med n_errors, precision och recall.

Resultatet är nu nästan felfritt och vi ser en tydlig förbättring från tidigare.

För att se vad som skiljer sig kan du köra nästa kodcell.

Denna webbsajt innehåller kursmaterialet för kursen ETE335 AI för naturligt språk.
Materialet är licenserat under en Creative Commons Erkännande 4.0 Internationell licens.
Copyright © 2022, Marco Kuhlmann & Oskar Holmström