729G17 Språkteknologi
Labkurs
Laboration 2 - Namnigenkänning och informationsextraktion
Dessa instruktioner gäller båda kurskoderna 729G17 och TDDD01. Information om hur labben ska redovisas finns i slutet på sidan.
Syfte
Syftet med laborationen är
- att öva förmågan att använda reguljära uttryck för att extrahera information ur löpande text, och att undersöka värdet av att ha tillgång till ordklasstaggad text,
- att ge insikter om problem när det gäller att hitta information i texter som refererar till samma sak,
- att öva tillämpning av begreppen precision och recall.
Förberedelser
Läs föreläsningsanteckningar från föreläsning 3 om informationextraktion och kursbokens kapitel 22.1 och 13.5. Lär dig definitionerna av precision och recall.
Textdata och information
I katalogen ~729G17/resurser/data/ finns ett antal större och mindre texter som används för uppgifterna. De heter nyheter.txt, nyheter.tgd (för taggad text) samt hotell.txt. Kopiera dessa till din egen katalog.
Här finns lathund m.m. om reguljära uttryck:
- Introduktion till reguljära uttryck,
- Lathund för reguljära uttryck.
- Introduktion till GNU grep.
- Python regex HOWTO
Du kan också använda kodskeletten och dina script från Lab1 som utgångspunkt.
Uppgift 1
Målet i denna uppgift är att ta fram ett script baserat på reguljära uttryck som kan känna igen egennamn i texter. Ni kan använda antingen Python eller sed/grep. I uppgiften används först en tokeniserad men otaggad text, nyheter.txt.
Gör först ett script som extraherar ord i texten som (i) börjar med stor bokstav, och (ii) inte står först i sin rad. Spara utdata i en fil. Du kan kontrollera om scriptet gör rätt genom att titta på utdata i filen.
- Beräkna precisionen i ditt script som en namnigenkännare på denna text, dvs uppskatta i procent hur många av de extraherade orden som är egennamn. Du kan räkna alla ord, eller också välja att använda ett stickprov.
- Pröva att förbättra ditt script genom att inspektera texten och utdata och lägga till ytterligare filter.
- Beräkna, på samma sätt som förut, precision för det förbättrade scriptet.
Uppgift 2
Namn består ofta av flera ord. I denna uppgift ska du därför utveckla ett script som känner igen namn som består av minst två ord. De namnsekvenser du känner igen ska vara maximala. Använd samma text som i uppgift 1. Beräkna precisionen på denna text och uppskatta även recall, dvs hur stor andel av alla flerordiga namn i texten som ditt script hittar.
Gör sedan samma uppgift på den taggade varianten nyheter.tgd Detta innebär att du ska använda taggarna (i synnerhet taggen NM) för att extrahera namnsekvenser. Beräkna precision och recall och jämför resultaten från de båda scripten.
Uppgift 3:
I denna uppgift används texten hotell.txt. Filen innehåller ett hundratal recensioner av hotell som skrivits av hotellens gäster. Hotellen är anonyma men ligger i antingen Stockholm eller Göteborg.
Du kan också använda ett lexikon hotell.lex, som innehåller rättstavade ord med ordklasser från denna text. Lexikonet kan användas för att tagga upp texterna med taggningsprogrammet från Lab 1.
Recensionerna innehåller omdömen av olika slag, en del positiva, andra negativa. Omdömena refererar ofta till någon specifik aspekt av hotellet, t.ex. 'rummet', 'läget', 'personalen', 'frukosten'. Ett enskilt omdöme kan uttryckas av ett adjektiv (bra, uselt, fantastiskt, ...), ett substantiv (toppen, botten, ...) eller en fras (inte särskilt bra, mycket trevlig, ...)
Givet en text kan vi extrahera par på formen <Entitet: Omdöme> där Entitet refererar någon aspekt av hotellet och Omdöme är ett enskilt omdöme. Så t.ex. kan följande recension:
Att rummen var pyttesmå visste vi när vi bokade, men de var iskalla vid ankomst. Frukostmatsalen var lika iskall. Ett bra vandrarhem är att föredra.
generera följande strukturerade fakta:
- <rummen, pyttesmå>,
- <rummen, iskalla>,
- <frukostmatsalen, iskall>
Obs! att ordet 'bra' i den sista meningen inte refererar till detta hotell och därför helst inte ska extraheras.
Att göra:
- Gör ett script som extraherar hotellentiteter och omdömen och sätter ihop dem i enlighet med exemplet ovan,
- Undersök utdata från skriptet och jämför med indata. Identifiera (minst tre) typer av fel som ditt script gör och beskriv hur det kan göras bättre (testa gärna dina förslag genom att utöka skriptet, men uppgiften är att identifiera problem, inte att ge färdiga lösningar.
- (endast för TDDD01) Utforma scriptet så att det kan skilja på positiva och negativa omdömen.
Tips:
1: Se till att formatera hotelltexten så att den går lätt att bearbeta, eventuellt på flera olika sätt.
2: Du kan omkategorisera orden i lexikonet och på så vis få en fil där orden är taggade efter uppgiftens behov.
3: Du kan undersöka vilka ord som typiskt används för att koppla ihop ett omdöme med en entitet och pröva att skriva reguljära uttryck som använder sådana ord.
Redovisning & Deadline
Redovisa genom att skicka epost till Jody (jody.foo@liu.se). I rubriken skriver ni <kurskod>-labnr-namn och ni bifogar efterfrågad information som filer/bilagor. Lämna också in redovisningen i skrift med bilagor och i påskrivet laborationsomslag av båda (alla) i labgruppen.
- Uppgift 1 redovisas med era två script, deras uppskattade precision och en kort beskrivning av hur ni uppskattade precisionsvärdena.
- Redovisningen av Uppgift 2 skall innehålla era två script, ett för den otaggade filen, och ett för den taggade, och era uppskattningar av precision och recall. Beskriv också kort hur ni beräknade värden på precision och recall. Diskutera slutligen för- och nackdelar med att använda ett ordklasstaggat material.
- Uppgift 3 redovisas med det eller de script som ni tagit fram och ett antal förslag på hur det kan förbättras med utgångspunkt i minst tre problem som ni identifierat.
- Läser du TDDD01 redovisar du också hur du gjorde för att skilja på positiva och negativa omdömen och diskuterar hur bra det kan bli med den metod som du använt.
För högre betyg på labkursen måste ni ha redovisat inlämningsuppgifterna innan uppsatt deadline (se labkursens huvudsida för 729G17 resp. TDDD01).
Se till att ni redovisar varje laborations inlämningsuppgifter löpande för att labhandledaren ska ha en möjlighet att ge dig snabba bedömningar.