Begreper & referanser
Alle nøkkelbegrepene, formlene og referansene fra Naturlig språkbehandling, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
En sannsynlighetsfordeling over ordsekvenser: modellen gir hver setning en sannsynlighet og kan dermed foreslå neste ord. Den lærer av et korpus (language model).
En modell som bare teller hvilke ord som forekommer, uten å se på rekkefølgen. «Kari ringer Ola» og «Ola ringer Kari» blir like (bag of words).
En språkmodell der sannsynligheten for et ord bare avhenger av de ordene foran. En bigrammodell () ser ett ord bakover, en trigrammodell to (n-gram model).
Antagelsen at neste ord bare avhenger av et kort, fast vindu av ordene foran, ikke av hele historien. Den gjør kjederegelen mulig å estimere fra tellinger (Markov assumption).
Samlingen tekst en språkmodell telles eller trenes på. For en n-gram-modell er tellingene i korpuset alt modellen vet om språket (corpus).
Teknikker som flytter litt sannsynlighet fra sette til usette n-gram, slik at en grei, men ny setning ikke får sannsynlighet 0 (smoothing).
Glatting der hver n-gram-telling økes med 1 og nevneren med vokabularstørrelsen: . Kalles også Laplace-glatting (add-one smoothing, Laplace smoothing).
Glatting som blander unigram-, bigram- og trigramsannsynligheter med vekter som summerer til 1. Et usett bigram får da sannsynlighet fra unigramleddet (linear interpolation smoothing).
Den inverse sannsynligheten modellen gir en testtekst, normalisert per token: . Lavere perpleksitet betyr en bedre modell (perplexity).
Å gi hvert ord i en setning en ordklasse, som substantiv, verb eller preposisjon. Samme ord kan ha ulik klasse i ulike setninger, så merkingen må bruke konteksten (part-of-speech tagging).
En grammatikk der hver regel har én ikke-terminal på venstre side, som . Regelen kan brukes uansett hva som står rundt symbolet (context-free grammar).
En kontekstfri grammatikk der hver regel har en sannsynlighet, og reglene med samme venstreside summerer til 1. Forkortes PCFG (probabilistic context-free grammar).
Et tre som viser hvordan en setning er bygd opp av grammatikkens regler: roten er S, de indre nodene er ikke-terminaler, og bladene er ordene (parse tree).
En form der hver regel er med to ikke-terminaler eller med ett ord. Alle kontekstfrie grammatikker som ikke lager den tomme strengen, kan skrives om til denne formen (Chomsky normal form, CNF).
En parser med dynamisk programmering for grammatikker i Chomsky-normalform. Den fyller en tabell med ikke-terminalene som kan dekke hvert delstykke av setningen, fra korte til lange delstykker (CYK algorithm).
En tett vektor med noen hundre tall som representerer et ord, lært slik at ord som brukes i like sammenhenger, havner nær hverandre (word embedding).
En mekanisme der hver posisjon lager en vektet sum av de andre posisjonene, med vekter som sier hvor relevante de er. I selvoppmerksomhet ser en sekvens på seg selv (attention, self-attention).
En nevral nettarkitektur av lag med selvoppmerksomhet og fremovernett, uten rekurrens, slik at alle posisjoner i sekvensen behandles parallelt (transformer).
Å trene en stor modell på enorme mengder umerket tekst, for eksempel til å forutsi neste ord, og deretter tilpasse den til en bestemt oppgave med lite merkede data (pretraining, fine-tuning).
Formler
Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.
Bigramsannsynlighet fra tellinger
Maksimum-likelihood-estimatet (MLE): tell bigrammet og del på hvor mange ganger det forrige ordet står foran et token, medregnet. Vanlige feil er å dele på tellingen av og å glemme leddene med og når oppgaven bruker dem.
Add-one-glatting
Gir usette bigram en liten sannsynlighet. er antall ulike tokens i vokabularet, med og uten når setningene har start- og sluttsymbol. Den vanligste feilen er å legge til 1 i nevneren i stedet for . Add-k bruker i telleren og i nevneren.
Lineær interpolasjon
Blander modeller av ulik orden med vekter som summerer til 1. For en bigrammodell faller trigramleddet bort. Unigrammet er , der er antall tokens; les i oppgaven om telles med. Feil vekting av leddene er den vanligste feilen.
Kjederegelen med n-gram-tilnærming
Kjederegelen er eksakt med hele historien som betingelse; Markov-antagelsen kutter den til de siste ordene. Med start- og sluttsymbol tar produktet med leddet for .
Perpleksitet
Måler en språkmodell på testtekst den ikke er trent på. Lavere er bedre. er antall tokens som predikeres. Får ett token sannsynlighet 0, blir perpleksiteten uendelig. Modeller kan bare sammenlignes på samme testtekst og samme vokabular.
Sannsynligheten til et parsetre
Gang sammen sannsynlighetene til alle reglene treet bruker, også de leksikalske reglene ned til ordene. Sannsynligheten for setningen er summen over alle trærne; det mest sannsynlige treet er det med størst produkt.
CYK-kompleksiteten
Tabellen har omtrent celler, og hver celle prøver opptil delepunkter. Her er antall ikke-terminaler i grammatikken, ikke antall regler. Gjelder bare grammatikker i Chomsky-normalform.
Skalert prikkprodukt-oppmerksomhet
Hver rad i sier hvor godt én posisjons spørring passer hver nøkkel. Softmax gjør det til vekter, og resultatet er en vektet sum av verdiene. Her er verdimatrisen, ikke vokabularet. Kreves bare på oversiktsnivå.
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Bigrammodell med add-k og interpolasjon
from collections import Counter k = 1.0 # @param 0.0..2.0 0.1lam1 = 0.0 # @param 0.0..1.0 0.1 korpus = ["tåka ligger over byen", "tåka letter i kveld", "sola skinner over fjorden", "sola ligger lavt i kveld"]test = "sola letter i kveld" uni, bi, ctx = Counter(), Counter(), Counter()for s in korpus: t = ["<s>"] + s.split() + ["</s>"] uni.update(t[1:]) for a, b in zip(t, t[1:]): bi[a, b] += 1 ctx[a] += 1V, N = len(uni), sum(uni.values()) def p(w, forrige): p_bi = (bi[forrige, w] + k) / (ctx[forrige] + k * V) if ctx[forrige] + k > 0 else 0.0 return lam1 * uni[w] / N + (1 - lam1) * p_bi t = ["<s>"] + test.split() + ["</s>"]p_setning = 1.0for a, b in zip(t, t[1:]): p_setning *= p(b, a)print(f"P(letter | sola): {p('letter', 'sola'):.4f}")print(f"P(setning): {p_setning:.6f}")if p_setning > 0: print(f"Perpleksitet: {p_setning ** (-1 / (len(t) - 1)):.2f}")else: print("Perpleksitet: uendelig (en sannsynlighet er 0)")Prøv: sett k til 0 og se at P(letter | sola): blir 0 og linja Perpleksitet: uendelig, og dra så lam1 til 0.3 og se at perpleksiteten blir lavere enn med add-one.
CYK med telling av parsetrær
setning = 0 # @param 0..2 # Grammatikk i Chomsky-normalform: (A, B, C, p) betyr A → B Cregler = [("S", "NP", "VP", 1.0), ("VP", "V", "NP", 0.6), ("VP", "VP", "PP", 0.4), ("NP", "NP", "PP", 0.2), ("PP", "P", "NP", 1.0)]ordbok = {"Ola": {"NP": 0.25}, "turisten": {"NP": 0.25}, "kameraet": {"NP": 0.15}, "brygga": {"NP": 0.15}, "filmer": {"V": 1.0}, "med": {"P": 0.5}, "på": {"P": 0.5}}setninger = ["turisten filmer Ola på brygga", "turisten filmer Ola med kameraet på brygga", "turisten filmer på brygga"]ord_ = setninger[setning].split()n = len(ord_)# celle[i, j][A] = (antall trær, beste sannsynlighet) for ordene i..jcelle = {(i, i): {A: (1, p) for A, p in ordbok[w].items()} for i, w in enumerate(ord_)}for lengde in range(2, n + 1): for i in range(n - lengde + 1): j = i + lengde - 1 celle[i, j] = {} for k in range(i, j): for A, B, C, p in regler: if B in celle[i, k] and C in celle[k + 1, j]: (nb, pb), (nc, pc) = celle[i, k][B], celle[k + 1, j][C] antall, beste = celle[i, j].get(A, (0, 0.0)) celle[i, j][A] = (antall + nb * nc, max(beste, p * pb * pc))antall, beste = celle[0, n - 1].get("S", (0, 0.0))print(f"Setning: {setninger[setning]}")print(f"Grammatisk: {'ja' if antall else 'nei'}")print(f"Antall parsetrær: {antall}")print(f"Sannsynlighet, beste tre: {beste:.6f}")Prøv: sett setning til 1 og se at linja Antall parsetrær: går fra 2 til 5 når setningen får én preposisjonsfrase til, og sett den til 2 for å se at Grammatisk: blir nei.
Læringsmål
Hva du skal kunne etter å ha lest kapittelet.
- 01Regn ut en bigramsannsynlighet og sannsynligheten for en hel setning med start- og sluttsymbol fra et lite korpus
- 02Regn ut glattede sannsynligheter med add-one, der står i nevneren, og med lineær interpolasjon
- 03Forklar hva perpleksitet måler, og hvorfor lavere perpleksitet er bedre
- 04Regn ut sannsynligheten til et parsetre i en PCFG som produktet av regelsannsynlighetene
- 05Utfør CYK for en grammatikk i Chomsky-normalform og avgjør om setningen er grammatisk
- 06Forklar hva ordvektorer, selvoppmerksomhet og pretrening tilfører, sammenlignet med bigram- og trigrammodeller og RNN-er