AI FÖR NATURLIGT SPRÅK

Kursinfo

Kursmaterial

FAQ

Kursmaterial

/

Kapitel

Deluppgift 1: Ordklasser

Python

Innan vi påbörjar labben ska vi snabbt gå igenom två funktioner i Python som vi kommer använda oss av i de kommande deluppgifterna. Vi ska kolla på list comprehensions och zip. De är båda användbara när vi vill iterera över olika typer av datastrukturer.

I nästa kodcell ser vi ett exempel på hur list comprehensions används i Python. I exemplet vill vi iterera över ett ord och spara dess tecken i en lista. Först ser vi hur vi kan genomföra det med en loop och sedan hur vi kan utföra samma uppgift med list comprehensions. List comprehensions är just ett enkelt sätt att skapa en lista från ett annat objekt som vi kan iterera över.

I de kommande två kodcellerna ska vi se hur vi kan använda zip() på två olika sätt. zip() används för att skapa listor med tuples, eller separera tuples i en lista.

Det första sättet visar hur vi kan använda zip() för att separera en lista med tuples till två tuples med flera värden i.

I nästa kodcell visar vi hur en lista med tuples kan skapas från två listor. Det är denna användning vi kommer se i de kommande uppgifterna. Det är nämligen speciellt användbart när vi vill iterera över två listor samtidigt, exempelvis när vi vill jämföra innehållet mellan en lista av korrekta klassificeringar med de klassificeringar vi fått av en modell och sparat i en lista.

Taggning av ordklasser

Följande filer används i uppgiften:

en_gum-ud-test-conllu - Georgetown University Multilayer korpus från Universal Dependencies.

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 denna deluppgift ska vi tagga ord med ordklasser, d.v.s. avgöra om ett ord är exempelvis ett verb eller ett substantiv. För att utföra taggningen ska vi använda oss av Spacy. Spacy är ett stort bibliotek för bearbetning av naturligt språk. Det stödjer många språk, är enkelt att använda och erbjuder många olika verktyg. I kapitel 2 använde vi Spacy för tokenisering, men det finns mer funktionalitet tillgängligt i Spacy. I detta kapitels del- och slutuppgifter kommer vi använda Spacy för att identifiera ordklasser och entiteter.

I följande kodcell laddar vi in den minsta av modellerna för engelska och skriver ut de objekt som är del av den pipeline vi använder.

Vår pipeline består av flera komponenter och i denna deluppgiften kommer vi speciellt få användning av tagger, den ordklasstagger som finns tillgänglig.

För att få en känsla för hur vi använder oss av Spacy ska vi i nästa kodcell skicka in en mening i vår pipeline. Därefter kan vi iterera över varje token och skriva ut dess taggade ordklass med token.pos_ (POS är en akronym för part of speech, engelska för ordklass.)

I denna uppgift vill vi ta reda på hur bra vår modell är på att tagga ordklasser. För att göra det behöver vi gulddata att jämföra med: en text annoterad med korrekta ordklasser. Det är ett korpus som består av olika typer av texter från nätet som har annoterats.

Nästa kodcell presenterar de första 16 raderna i dokumentet.

Vi kan se hur dokumentet innehåller metadata, både på dokument- och ordnivå. Varje ord representeras av en rad i dokumentet där vi kan hitta rikligt med annoterad information, inklusive ordklass.

I nästa kodcell läser vi in gulddata med funktionen read_data(), som returnerar en lista med alla meningar (som också representeras av listor), och en hjälp-funktion _read_data() som läser varje rad i filen.

I nästa kodcell skriver vi ut varje ord, med tillhörande annoterad data, för den första meningen.

I nästa kodcell ska vi använda oss av Spacy för att tagga orden i en mening. För att kunna göra det behöver vi konstruera en sträng av orden i meningen, som sedan kan bearbetas av Spacy. Din uppgift är att skapa en sträng av orden i meningen och sedan skicka in strängen i den pipeline vi skapat tidigare i uppgiften.

För att bedöma hur bra modellen är på att tagga ordklasser ska du slutföra implementationen av funktionen accuracy(), och sedan utvärdera modellen mot gulddata.

Bra jobbat! För att få en bättre förståelse för hur bra vår modell är skulle vi förstås behöva jämföra den mot en baseline, men lämnar det utanför denna uppgiften. En sådan baseline skulle exempelvis vara att tagga varje ord med den ordklass den oftast är taggad med i gulddata.

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