Generelt om Taggerprosjektet


Hva er en automatisk tagger?

Oslo-korpuset består av taggede tekster, altså tekster hvor hvert enkelt ord er merket med en tagg som angir grammatisk informasjon som ordklasse, undergruppe, morfosyntaktiske trekk o.a. for akkurat dette ordet. Det er ikke gjort i en håndvending å utstyre ordene i en tekst med slike tagger. Man må benytte et automatisk, disambiguerende taggeprogram, som tidligere ikke har eksistert for norsk. Et slikt program har vi nå utviklet ved Tekstlaboratoriet, i Taggerprosjektet. Det har kostet seks årsverk, og blitt finansiert av Norges forskningsråd, Dokumentasjonsprosjektet og Tekstlaboratoriet.

Et taggeprogram skal kunne ta en hvilken som helst tekst, analysere den, og forsyne hvert eneste ord i teksten med en tagg. Spesielt viktig er det at hvert ord bare får én tagg. Selv om det er mange ord i norsk som i utgangspunktet er flertydige (homonyme), bør altså taggeren klare å finne fram til den ene riktige analysen. Står den på ordet murer, som faktisk kan betegne fire forskjellige grammatiske ord (se nedenfor), skal den klare å velge ett.

  "murer"
  "substantiv M ubestemt plural, MUR"
  "substantiv M ubestemt plural, MURE (bot.)"
  "substantiv M ubestemt singular, MURER"
  "svakt verb presens, MURE"

Det er et systematisk forhold mellom mange svake verb og bestemt form av det avledede substantivet, som i hoppet, foret osv., så det er av stor viktighet at den morfologiske taggeren selv kan disambiguere en ordform, og dermed fjerne alle tolkninger bortsett fra én. Dette må selvsagt bare kreves dersom entydiggjøringen kan skje på et solid grunnlag.

Taggeren som omtales her, er en regelbasert tagger (i motsetning til en statistisk basert tagger), mer spesielt er den en såkalt føringsbasert (Constraint-Based) tagger. Denne typen har vært utviklet ved Universitetet i Helsinki, Finland, under ledelse av Fred Karlsson. En føringsbasert tagger er en hvor det er laget lingvistisk baserte regler for hvert eneste disambigueringsvalg. Den bygger på dependensgrammatikk, hvilket i praksis vil si at taggeren ikke bygger opp fraser, men at alle valg gjøres på grunnlag av forholdet mellom enkeltord. Denne typen tagging er beskrevet i Karlsson et al., 1995, Constraint Grammar.

 

Taggerens enkelte deler (med korte eksempler)

Her følger en kort oversikt over taggerens enkelte deler, presentert i kronologisk rekkefølge, etter hvilke biter som gjøres når i taggingsprosessen.

Preprosessor og morfosyntaktisk multitagger

Utgangspunktet for taggingen er en ren tekstfil. Det stilles ingen spesielle krav til utseendet på fila - den kan godt ha overskrifter (av forskjellig format), tabeller og andre ting som kan gjøre teksten vanskelig å tolke for en datamaskin. (Men om en tekst er kodet med f.eks. SGML-kode, må den kjøres gjennom et program som fjerner slik kode først.) Beskrivelsen nedenfor deler preprosessering og multitagging i to deler av pedagogiske grunner, men det dreier seg om ett program, som benytter mange enkeltdeler, bl.a. den leksikalske databasen og sammensetningsanalysatoren, samt mange spesialdeler for å kunne gjenkjenne ulike typer ord og tekst.

Preprosessering

Et eksempel på en tekst før tagging:

 
Lang tradisjon

I over hundre år har sportsfiskere og elveeiere prøvd å hjelpe laksen til
å formere seg i norske elver.

Teksten over er svært enkel. Likevel er det mange ting som må ordnes før multitaggeren trer i aksjon. Teksten må først preprosesseres:

Skill ut overskrifter

Det er viktig for taggingen senere at teksten oppdeles på riktig måte, f.eks. at overskrifter skilles ut. De kjennetegnes jo ofte, som over, ved at de ikke har noe sluttegn som punktum. Fordi vi ikke vil at en overskrift skal tolkes som en del av neste setning, må den derfor gjenkjennes. Her har vi valgt å bruke endel formkriterier som store bokstaver, blanke linjer på begge sider, antall ord på linja o.a. for at overskrifter skal skilles ut.

Gjenkjenn setninger

At setninger deles opp på riktig sted, er et beslektet mål. På dette stadiet i prosessen finnes det ikke tilgang til noen grammatisk analyse, så alle regler må gjelde for enkeltord og bokstaver i umiddelbar nærhet av skilletegn. Visse tegn er typiske helsetningsskilletegn (periodeskilletegn), slik som utropstegn, spørsmålstegn, og ikke minst punktum. Imidlertid utgjør punktum et stort problem, siden det finnes mange tilfeller hvor punktum også finnes setningsinternt. Betrakt de følgende setningene:

(1) Her ser vi bl.a. en fisk, en fugl og en slange.
(2) Her har man f.eks. Jørgensen og Christensen.
(3) Dette skjedde 05.04.97.

For at helsetningene og ingenting annet skal gjenkjennes, har vi samlet inn en god del forkortelser, og laget programvare som tolker et punktum i en forkortelse annerledes enn ellers. Er forkortelsen en stor bokstav, tolkes den som egennavn. Men det viser seg at forkortelser også kan forekomme ved setningsslutt, og da ønsker man selvsagt å nettopp kjenne igjen setningsslutt:

(4) Vi kjenner leger, advokater og lingvister osv. Alle er velutdannet.
(5) Mens leger, advokater osv. ikke kjenner seg igjen, er det lett for oss andre.

Gjenkjenn datoer

Preprosessoren må skille datoer (se nedenfor) fra tall, som ganske enkelt regnes som kvantifiserte uttrykk:

(6) Dette skjedde 01.01.60.
(7) Det skjedde også noe 15/9-91.

Gjenkjenn "koordinerte sammensetninger"

Noen tekstuelle sammenstillinger av flere ord må likevel betraktes som enkle ord. Dette gjelder nærmere bestemt sammensetninger hvor ett av leddene er koordinert av en konjunksjon:

(8) Vi snakker om barnehage- og dagmammabarn.
(9) Julegavene og -maten er blitt overdådige.

Gjenkjenn faste uttrykk

Vi har foretatt innsamling av mange faste uttrykk, som går over flere ord. Der vi ønsker at de skal betraktes som ett og samme ord, ordnes det av preprosessoren:

(10) Vi tar en sjokolade i ny og ne.
(11) Dette gjør vi ikke i utide.


Multitagging

Multitaggeren tar for seg teksten ord for ord. (Faste uttrykk, koordinerte sammensetninger o.a. regnes nå som enkle ord.) Hvert ord slås opp i en fullformsordliste - altså en liste av oppslagsordene i den leksiksalske databasen samt alle deres fulle former når de er bøyd. Hvert ord gis alle muligheter som fullformsordlista gir uten at konteksten for ordet undersøkes. I tillegg kommer disse delene:


Egennavn


Egennavn gjenkjennes enkelte ganger ved at de finnes i ordlista. For resten av navnene finner programmet ut av det på grunnlag av store bokstaver i ord som ikke finnes i ordlista og som gjerne ikke kommer etter punktum.

Sammensetninger

Ord som ikke finnes i den leksikalske databasen blir forsøkt analysert som sammensetninger gjennom et eget sammensetningsprogram. Hvis det kan analyseres som en sammensetning, vil sisteleddet bli slått opp I fullformsordlista, og ordet gis alle tagger derfra. Noen eksempler:

(12) laksestamme
(13) utsettingsforskrifter

Alle kan prøve multitaggeren selv ved å skrive inn en setning eller legge ved en liten fil. Den interaktive multitaggeren ligger på http://dina.uio.no/cgi-bin/tagger/www_mtag.

Eksempel på en multitagget tekst

Nedenfor følger en kort del av teksten vi så ovenfor, men i multitagget utgave.

"<lang>"
      "lang" adj pos mask fem ub ent
      "lange" verb imp <trans1>
"<tradisjon>"
      "tradisjon" subst mask appell ent ub
"<$|>"
      "$|" CLB <OVERSKRIFT>
"<*i>"
      "i" prep
"<over>"
      "over" prep
"<hundre>"
      "hundre" det kvant fl
      "hundre" subst nøyt appell ent ub
      "hundre" subst nøyt appell fl ub
"<år>"
      "år" subst fem appell ent ub
      "år" subst mask appell ent ub
      "år" subst nøyt appell ent ub
      "år" subst nøyt appell fl ub
"<har>"
      "ha" verb pres <trans6><auxp>
"<sportsfiskere>"
      "sportsfisker" subst mask appell fl ub
"<og>"
      "og" CLB konj
      "og" adv
      "og" konj
"<elveeiere>"
      "elveeier" subst mask appell fl ub
"<prøvd>"
      "prøve" adj <perf-part>mask fem ub ent <trans1><trans3>
      "prøve" adj <perf-part>nøyt ub ent <trans1><trans3>
      "prøve" verb perf-part <trans1><trans3>
"<å>"
      "å" inf-merke
      "å" interj
      "å" subst fem appell ent ub
      "å" subst mask appell ent ub
"<hjelpe>"
      "hjelpe" verb inf <trans1>
"<laksen>"
      "laks" subst mask appell ent be
"<til>"
      "til" prep
"<å>"
      "å" inf-merke
      "å" interj
      "å" subst fem appell ent ub
      "å" subst mask appell ent ub
"<formere>"
      "former" subst mask appell fl ub
      "formere" verb inf <trans1><refl4>
"<seg>"
      "seg" pron refl ent/fl akk
      "sige" verb pret <intrans2>
"<I>"
      "i" prep
"<norske>"
      "norsk" adj pos mask fem nøyt be ent
      "norsk" adj pos ub be fl
      "norske" verb inf <trans1>

"<elver>"
      "elv" subst fem appell fl ub
      "elv" subst mask appell fl ub
"<$.>"
      "$." CLB <PUNKT>


Morfosyntaktisk disambiguerende tagger

Til slutt trengs den disambiguerende taggeren, som fjerner (helst) alle tagger som ikke hører hjemme i akkurat den konteksten.

Eksempel på disambiguert tekst

."<*lang>"
      "lang" adj pos mask fem ub ent
"<tradisjon>"
      "tradisjon" subst mask appell ent ub
"<$|>"
      "$|" CLB <OVERSKRIFT>
"<*i>"
      "i" prep
"<over>"
      "over" prep
"<hundre>"
      "hundre" det kvant fl
"<år>"
      "år" subst nøyt appell fl ub
"<har>"
      "ha" verb pres <trans6> <auxp>
"<sportsfiskere>"
      "sportsfisker" subst mask appell fl ub
"<og>"
      "og" konj
"<elveeiere>"
      "elveeier" subst mask appell fl ub
"<prøvd>"
      "prøve" verb perf-part <trans1> <trans3>
"<å>"
      "å" inf-merke
"<hjelpe>"
      "hjelpe" verb inf <trans1>
"<laksen>"
      "laks" subst mask appell ent be
"<til>"
      "til" prep
"<å>"
      "å" inf-merke
"<formere>"
      "formere" verb inf <trans1> <refl4>
"<seg>"
      "seg" pron refl ent/fl akk
"<i>"
      "i" prep
"<norske>"
      "norsk" adj pos ub be fl
"<elver>"
      "elv" subst fem appell fl ub
      "elv" subst mask appell fl ub
"<$.>"
      "$." CLB <PUNKT>


[Neste | Innhold | Tekstlab | HF]


19. april 2001, AN, <anders.noklestad@ilf.uio.no>