AI FÖR NATURLIGT SPRÅK
Kursinfo
Kursmaterial
FAQ
Kursmaterial
/
Kapitel
Slutuppgift: Namngivna entiteter
Taggning av entiteter
Följande filer används i uppgiften:
• entertainment_articles.txt - Summerade nöjesartiklar publicerade mellan åren 2004–2005 från BBC.
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 nästa kodcell ska vi använda samma Spacy-pipeline som i tidigare uppgifter. Denna gången ska vi utnyttja named entity recognition (NER) modellen och extrahera information om de namngivna entiteter som finns i text. Vi skriver ut den taggade informationen, vilka entiteter som finns i texten och presenterar en figur med displacy.
Som vi kan se identiferade vår NER-tagger att Linköpings universitet är en namngiven entitet av typen ORG. En NER-tagger har ofta flera olika typer av taggar som den kan tilldela ett ord. Vår modell har följande:
• CARDINAL - Nummer som inte faller under någon annan typ.
• DATE - Absoluta eller relativa datum eller perioder.
• EVENT - Namngivna orkaner, slag, krig, sport-evenemang, etc.
• FACILITY - Byggnader, flygplatser, vägar, broar, etc.
• GPE - Länder, städer, etc.
• LANGUAGE - Namn på språk.
• LAW - Namngivna lagar.
• MONEY - Monetära värden, inklusive valutor.
• NORP - Nationaliteter eller religösa/politiska grupper.
• ORDINAL - “första”, “andra”, etc.
• ORGANIZATION – Företag, intitutioner, etc.
• PERCENT - Tal angivna i procent (Tecknet ’%’ inkluderat).
• PERSON - Personer, verkliga och fiktionella.
• PRODUCT - Bilar, mat, datorer, etc. (Inte tjänster).
• QUANTITY - Mått av vikt eller avstånd.
• TIME - Tider som är mindre än en dag.
• WORK OF ART - Titlar på böcker, låtar, tavlor, etc.
Dessa taggar täcker inte alla typer av namngivna entiteter som vi kan föreställa oss. Det är vanligt att träna en NER-modell som är anpassad efter en viss domän, exempelvis en modell som är tränad att tagga namngivna entiteter i medicinska dokument.
I nästa kodcell läser vi in samma dataset som i föregående deluppgift, ett dataset som innehåller summeringar av nöjesartiklar publicerade mellan åren 2004–2005 av BBC. Vi kan förvänta oss att denna typ av artiklar borde innehålla många olika typer av namngivna entiteter. Med hjälp av displacy presenterar vi de namngivna entiteterna i en mening.
Semantiska tripplar
I denna uppgift ska vi använda oss av ordklasser, dependensrelationer och namngivna entiteter för att konstruera semantiska tripplar från text. En semantisk trippel består av ett subjekt, predikat och objekt från en mening, där subjektet och objektet i detta fallet ska vara namngivna entiteter.
För att extrahera detta behöver vi spara mer information än tidigare från en token. I nästa kodcell kan du se vilken information vi sparar för varje ord i en mening.
En namngiven entitet kan vara fördelad över flera olika token, där den första representeras av B
och efterföljande av I
. Token som inte är namngivna entiteter representeras av tecknet O
. För att skapa en sträng för en namngiven entitet behöver vi skapa en hjälpfunktion som får in en mening (lista av ord och deras tillhörande data) och ett index för en token som tillhör en namngiven entitet. I funktionen behöver vi lägga till efterföljande och föregående token som också är del av namngivna entiteter.
Din uppgift i nästa kodcell är att lägga till den kod i funktionen get_entity()
som gör att vi lägger till alla ord, framåt och bakåt, som är en del av en namngiven entitet (inte representeras av tecknet O
). I kodcellen testar vi att extrahera en sträng för den namngivna entiteten Hans Christian Andersen, som är fördelat mellan tre token: Hans
, Christian
, Andersen
.
I nästa kodcell ska du hitta och spara alla semantiska tripplar. I koden är det kommenterat vad du behöver lägga till för att genomföra detta.
Förutom funktionen get_entity()
bör du ta hälp av funktionerna is_sbj()
och is_obj()
som identifierar om en dependensrelation tillhör något av subjekt- respektive objekttaggarna.
Algoritmen för att extrahera semantiska tripplar kan beskrivas som följande:
• Identifiera alla verb i en mening.
• För varje verb, hitta alla subjekt och objekt som har en dependensrelation till verbet.
• Om det finns sådana subjekt och objekt, och de är namngivna entiteter:
› Hämta hela namngivna entitetet för subjektet och objektet.
› Spara en tuple med subjekt, verb, och objekt i listan semantic_triples
.
Bra jobbat! Detta var den sista koduppgiften för kursen. Du har nu fått se och använda flera olika verktyg och metoder för att behandla naturligt språk. Vi hoppas att du känner att de praktiska koduppgifterna har varit lärorika och gett dig kunskaper som du kan ta med dig i ditt fortsatta arbete med naturligt språk-behandling.
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