I arbejdet med sekventielle data, som f.eks. i naturlig sprogbehandling, definerer vi først de nødvendige funktioner, der beskriver de enkelte træk i dataene. Dernæst initierer vi vægtene, typisk med tilfældige værdier. Efterfølgende anvendes gradientnedstigning iterativt, indtil parameterne (i dette tilfælde lambda) konvergerer. Det er vigtigt at bemærke, at CRF'er (Conditional Random Fields) har ligheder med logistisk regression, idet begge bygger på betingede sandsynlighedsfordelinger. CRF'er udvider dog algoritmen ved at inkorporere funktioner, der er skræddersyet til sekventielle inputs.

En vigtig adskillelse mellem CRF'er og skjulte Markov-modeller (HMM'er) ligger i deres tilgang til data. Selvom begge benyttes til modellering af sekventielle data, er de to algoritmer fundamentalt forskellige. HMM'er benytter en generativ tilgang, der genererer output ved at modellere den fælles sandsynlighedsfordeling. Omvendt benytter CRF'er en diskriminativ tilgang, hvor de modellerer den betingede sandsynlighedsfordeling. CRF'er er ikke afhængige af antagelsen om uafhængighed, som HMM'er anvender, og som antager, at etiketterne er uafhængige af hinanden. Dette betyder, at CRF'er undgår de såkaldte etiketfejl, der kan opstå i HMM'er. Man kan derfor se HMM'er som en særlig version af CRF'er, hvor overgangssandsynlighederne er konstante.

For at forstå denne forskel, er det også værd at bemærke, at HMM'er udspringer af naiv Bayes’ principper, som kan afledes af logistisk regression, som igen udgør grundlaget for CRF'er. CRF'ers evne til at tage hensyn til de indbyrdes afhængigheder mellem sekventielle observationer giver dem en fordel i relation til de mere stive HMM'er.

I praksis finder CRF'er anvendelse i en række områder inden for naturlig sprogbehandling, især når det drejer sig om at tage kontekstuelle forhold i betragtning. Et klassisk eksempel er parts-of-speech tagging, hvor målet er at bestemme ordklasse i en sætning. Her udnytter CRF'er de kontekstuelle relationer mellem ord for at bestemme den rette ordklasse for hvert ord i en sætning. En anden anvendelse er named entity recognition (NER), som fokuserer på at udtrække egennavne og entiteter fra sætninger. CRF'er er særligt gode til at forudsige sekvenser, hvor flere variabler er afhængige af hinanden, hvilket gør dem uundværlige i komplekse naturlige sprogopgaver.

Koden for en simpel anvendelse af CRF til parts-of-speech tagging med NLTK og sklearn illustrerer processen. Den indeholder funktioner til at udtrække funktioner fra ord i en sætning og anvende disse til at træne en CRF-model, som derefter kan anvendes til at forudsige etiketternes fordeling.

Når man går videre til grafbaseret afhængighedsparsing, skal man forestille sig en rettet graf, hvor hvert ord i en sætning repræsenteres som en vertex. Forbindelserne mellem disse ord, også kaldet afhængigheder, repræsenteres som kanter i grafen. En rettet spanning tree, som er en delmængde af kanterne, repræsenterer en struktur uden cykler, og dens score beregnes som summen af kanternes vægte. Dette gør det muligt at finde den maksimale spanning tree, som kan bruges til at afgøre den mest sandsynlige afhængighedsstruktur for en given sætning. I forbindelse med afhængighedsparsing anvendes en førsteordens model, som antager, at kanterne er uafhængige af hinanden, og score beregnes som et skalarprodukt mellem vægtene og funktionerne af kanterne.

For at bestemme scoren for hver kant anvendes diskriminative modeller, der tager højde for en række funktioner som ordets overfladeform, lemma, ordklasse og andre morfologiske træk. Desuden overvejes også relationen mellem de involverede ord, længden på afhængigheden og retningen af forbindelsen mellem ordet og dets modifier. Denne fremgangsmåde gør det muligt at udtrække detaljerede og præcise afhængigheder mellem ord i sætninger.

Udover de grundlæggende funktioner kan der også anvendes kombinerede funktioner og back-off funktioner for at forbedre parserens evne til at håndtere komplekse sætninger. Læring af vægtene for funktionerne kan opnås gennem online strukturerede læringsalgoritmer som den gennemsnitlige perceptron, Passive-Aggressive algoritmer og Margin-Infused Relaxed Algoritm (MIRA). Disse metoder er særligt nyttige til at lære de optimale vægte til en given afhængighedsparsering.

Som en alternativ tilgang til grafbaserede metoder anvendes transition-based metoder, som i stedet for at skabe en grafbaseret struktur benytter sig af en systematisk sekvens af tilstande og overgange mellem dem. Dette system kan starte i en given tilstand og anvende en samling af overgangsaktioner, der iterativt leder systemet til en afsluttende tilstand. Denne metode, der er mere sekventiel i sin opbygning, giver en alternativ tilgang til struktureret forudsigelse i sekventielle data.

Det er afgørende for læseren at forstå, at både CRF’er og grafbaserede metoder anvender forskellige, men komplementære tilgange til at løse problemerne med sekventiel dataanalyse. Valget af metode afhænger af den specifikke opgave og den nødvendige præcision i opgaven. Både i relation til CRF’er og grafbaseret parsering spiller valg af funktioner en central rolle i modellens præstation, og det er her, forståelsen af dataens struktur og kontekst er vigtig.

Hvordan kan funktionel engineering anvendes i tekstmining?

Feature engineering er en vigtig proces indenfor tekstmining og maskinlæring, der handler om at identificere og transformere de relevante egenskaber fra rådata, så de kan bruges effektivt af algoritmer. I konteksten af tekstmining står vi ofte overfor den udfordring, at tekstdata er ustruktureret, hvilket kræver en systematisk tilgang til at omdanne disse data til et struktureret format, der kan analyseres videre.

En "feature" kan defineres som en egenskab eller karakteristika ved en reel enhed eller objekt. I tekstmining refererer det ofte til specifikke træk ved ord, sætninger eller dokumenter, som hjælper med at beskrive og kategorisere indholdet. For eksempel kan funktionerne for et ord inkludere dets længde, hyppighed i dokumentet, dets placering i teksten, eller dets semantiske betydning.

Funktionel engineering er den proces, hvor man samler og manipulerer disse funktioner, så de bliver anvendelige for de algoritmer, der skal bruges til videre analyse. Denne proces kan bestå af at skabe nye funktioner ud fra eksisterende data eller at manipulere de eksisterende funktioner for at optimere deres anvendelse i analysemodeller.

Det første skridt i feature engineering er at udtrække de rådata fra de kilder, der er tilgængelige. Dette kan være alt fra tekstbaserede data i dokumenter, online-kilder eller sensordata. Derefter gennemgår man renseprocessen, hvor man fjerner støj eller irrelevante data. Når de relevante funktioner er udtrukket, bliver de ofte indtastet i en algoritme for yderligere analyse. Denne analyse kan være af forskellig karakter – fra tekstklassifikation til klusteranalyse.

Det er vigtigt at bemærke, at funktioner kan være af forskellige typer. I tekstmining skelner man mellem kvalitative og kvantitative funktioner. Kvalitative funktioner kan være nominale, ordinale eller binære, mens kvantitative funktioner kan være diskrete eller kontinuerlige. For eksempel kan et ord i en tekst være kvalificeret efter dets kategori (nominal funktion), dets rækkefølge i forhold til andre ord (ordinal funktion) eller om det forekommer (binær funktion). På den kvantitative side kan funktioner som ordlængde eller antal gange et ord optræder i et dokument være diskrete, mens varigheden af et ords ophold i en bestemt kontekst kan være en kontinuerlig funktion.

Feature engineering indeholder også en række praktiske opgaver, der kræver manipulerende metoder. Et almindeligt problem er manglende data, som kan opstå, hvis en bruger ikke har indtastet en nødvendig værdi, eller hvis der er problemer med dataintegriteten. I disse tilfælde kan man bruge forskellige metoder til at håndtere de manglende værdier, f.eks. ved at erstatte dem med gennemsnitsværdier, estimere dem ud fra eksisterende data, eller blot fjerne de ufuldstændige poster. Denne proces er vigtig for at sikre, at de data, der anvendes, er så præcise og pålidelige som muligt.

En anden væsentlig del af feature engineering er transformation af eksisterende funktioner. Dette kan involvere at skabe nye funktioner, der sammenfatter eksisterende data på en måde, der gør dem lettere at anvende i en algoritme. For eksempel kan man i et datasæt, hvor man har en persons fødselsdato, tilføje en funktion, der beregner alderen, så systemet ikke behøver at beregne alderen hver gang, det skal bruge denne information.

Det er også nødvendigt at vælge de mest relevante funktioner for den specifikke opgave, man arbejder med. I mange tilfælde kan man opbygge et meget stort datasæt med et væld af funktioner, men ikke alle funktioner er nødvendige for at opnå de bedste resultater. Derfor er funktionel udvælgelse en vigtig opgave i feature engineering, hvor man beslutter sig for, hvilke funktioner der virkelig er relevante for den problemstilling, man ønsker at løse.

For at sikre, at feature engineering-processen fører til brugbare og præcise modeller, er det vigtigt at arbejde tæt sammen med domæneeksperter, der har indgående kendskab til de data, der arbejdes med. Det er kun gennem en solid forståelse af konteksten, at man kan skabe de funktioner, der virkelig bidrager til de algoritmer, man anvender.

Endvidere skal man huske på, at feature engineering er en iterativ proces. Man begynder måske med en række grundlæggende funktioner, som man senere justerer og forbedrer, efterhånden som man ser, hvordan algoritmen præsterer. Det er ikke et engangstrin, men snarere en proces, der løbende kræver opmærksomhed og tilpasning.

I mange anvendelser af tekstmining, som for eksempel historisk tekstanalyse, medicinske data eller mobilindustrien, er funktionel engineering afgørende for at opnå de ønskede resultater. Det er netop gennem denne process, at man kan udvinde de mest relevante mønstre og informationer, der ligger gemt i store mængder ustruktureret tekstdata.

Endtext