Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
WEDT Modelowanie języka
Wykład 7 Piotr Gawrysiak 2005
2
Modelowanie języka Model języka – model probabilistyczny pozwalający obliczyć prawdopodobieństwo zdania Jeśli w1:n oznacza ciąg wyrazów w1w2…wn. Jaka jest wartość P(w1:n) ? Możemy próbować określać prawdopodobieństwo wystąpień: poszczególnych liter (Shannon game) poszczególnych wyrazów Obliczenie prawdopodobieństwa wystąpienia słowa w zdaniu nie jest zadaniem prostym (ogólnie zależy od znaczenia wypowiadanego zdania), ale analiza poprzedzających słów może wiele pomóc: kolokacje części mowy i struktura zdania dziedzina semantyczna
3
Przykładowe zastosowania
OCR / rozpoznawanie mowy wiele wypowiedzi brzmi podobnie np. I went to a party Eye went two a bar tea Poprawianie błędów ortograficznych np. metoda Kernighana nie brała pod uwagę kontekstu: … I think they’re okay … … I think there okay … … I think their okay … Tłumaczenie automatyczne On voit Jon à la télévision Jon appeared in TV. In Jon appeared TV. Jon appeared on TV. Analiza stylu pisania (wykrywanie plagiatów, autorstwa tekstów itp.) Generowanie dużej ilości danych tekstowych Rudolph the red nose reindeer. Rudolph the Red knows rain, dear. Rudolph the Red Nose reigned here. Najbardziej prawdopodobne ze zdań-kandydatów
4
Łańcuchy Markowa Jak obliczyć P(w1:n)?
Możemy wykorzystać regułę łańcuchową, wtedy: P(w1:n) =P(w1:n-1)P(wn|w1:n-1) = P(w1:n-2)P(wn-1|w1:n-2)P(wn|w1:n-1) = itd. = = P(w1)P(w2|w1) P(w3|w1:2) P(w4|w1:3) …… P(wn-1|w1:n-2)P(wn|w1:n-1) Sue swallowed the large green ______. Problem – w naszym zbiorze danych (korpusie) będzie prawdopodobnie bardzo mało wystąpień w1:n-1 Możemy potraktować generację słów składających się na zdanie jako proces Markowa i przyjąć założenie Markowa (markov assumption): tylko N najbliższych słów ma wpływ na to jakie będzie wn : P(wn|w1:n-1)≈P(wn|wn-N+1:n-1) Bigram: bierzemy pod uwagę tylko poprzednie słowo Trigram: bierzemy pod uwagę dwa poprzedzające słowa Tetragram: ... cztery itd. Wtedy P(w1:n) ≈k=1,n P(wk|wk-N+1:k-1) historia dla wn wn w1:n-1 : historia dla wn
5
N-gramy N-gramy określają zbiór klas na które dzielimy zbiór danych trenujących (equivalence classes, bins) Czy większe wartości n są lepsze? “large green ___________” tree? mountain? frog? car? “swallowed the large green ________” pill? broccoli? Reliability vs Discrimination Im większe n tym więcej informacji o kontekście (discrimination) ale... Im większe n tym mniej jest dostępnych przykładów n-gramu w zbiorze trenującym (reliability)
6
N-gramy Dla większych wartości n to podejście staje się niepraktyczne
Załóżmy, iż słownik zawiera słów wtedy: n Liczba klas 2 (bigrams) 400,000,000 3 (trigrams) 8,000,000,000,000 4 (tetragrams) 1.6 x 1017
7
Tworzenie modelu Najprostszym podejściem do budowania modelu języka jest posłużenie się MLE i policzenie wystąpień odpowiednich n-gramów w korpusie: korpus: <s> a b a b </s> MLE P(a|b)= ½, P(b|a)=1, P(a|<s>)=1, P(</s>|b) = ½, P(korpus)=1/2. Przykład (Manning, Shuetze): Korpus – powieści Jane Austen N = 617,091 słów V = 14,585 słów Zadanie – jakie jest kolejne słowo w trigramie “inferior to ________” W korpusie, “[In person, she was] inferior to both [sisters.]”
8
Tworzenie modelu cd. Liczba wystąpień trigramu “inferior to ________” w korpusie:
9
Tworzenie modelu cd. Zgodnie z MLE nie zaobserwowane wystąpienia trigramów otrzymują zerowe prawdopodobieństwa Nasz korpus jest jednak ograniczony i brak wystąpienia pewnego ciągu wyrazów może być przypadkowy
10
Wygładzanie Rzeczywisty rozkład prawdopodobieństwa wygląda zapewne tak: Należy zatem : a) Zmniejszyć (discount) nieco „masę prawdopodobieństwa” przypadającą na obserwowane przypadki b) Rozdzielić (reallocate) uzyskany nadmiar na pozostałe przypadki
11
Metoda Lidstone’a Ogólnie: gdzie
Wersja Laplace’a – uznajemy, iż każdy n-gram występuję przynajmniej 1 raz, lub wersja Jeffrey’s-Parks – dopuszczamy wystąpienia „ułamkowe” Ogólnie: gdzie C = liczba wystąpień n-gramu w danych trenującyh N = liczba wystąpień wszystkich n-gramów w danych trenujących B = liczba różnych n-gramów MLE: = 0, LaPlace: = 1, Jeffreys-Perks: = ½
12
Held-out estimator W metodzie Lidstone’a przyporządkowujemy arbitralnie pewne prawdopodobieństwo nie obserwowanym przypadkom – czy nie jest ono zbyt duże / małe? Możemy to sprawdzić empirycznie, dzieląc zbiór trenujący na dwie części i zachowując jedną z nich (hold-out) do weryfikacji przyjętej hipotezy – np. badając jak często bigramy które wystąpiły r razy w pierwszej części pojawiają się w drugiej W ten sposób możemy otrzymać (Jelinek, Mercer, 1985): gdzie – Nr – liczba bigramów o częstości r C1 – liczba wystąpień ciągu w danych trenujących C2 – liczba wystąpień ciągu w held-out data
13
Cross validation Podział na część trenującą i held-out jest także arbitralny Najlepiej tego uniknąć – np. dokonując kilkakrotnych podziałów Podzielenie danych na 2 części Uczenie na A, sprawdzenie na B Uczenie na B, sprawdzenie na A Połączenie obu modeli A B uczenie sprawdz. Model 1 sprawdz. uczenie Model 2 + Model 1 Model 2 Model końcowy Nra = liczba n-gramów wystepujących r razy w a-tej części zbioru trenującego Trab = liczba tych znalezionych w b-tej częsci
14
Good-Turing estimation
Przypisywana Turingowi Metoda oszacowania prawdopodobieństwa: r* = “zmodyfikowana częstość” Nr = liczba n-gramów które występują r razy w zbiorze trenującym E(Nr) = wartość oczekiwana zmiennej losowej Nr, E(Nr+1) < E(Nr) Suma prawdopodobieństw nieobserwowanych n-gramów wynosi wtedy E(N1)/N0 Możemy podstawić obserwowane wartości częstości w miejsce wartości oczekiwanych, ale to nie będzie działać dla dużych wartości r (w szczególności dla najczęściej występującego n-gramu PGT=0) Dwie metody: użycie Good-Turing estimation tylko dla częstości r < k (k = np. 10) dopasowanie jakiejś funkcji S do obserwowanych wartości r i Nr
15
Good-Turing cont., absolute discounting
Przykład: Korpus: a b a b Obserwowane bigramy: b a: 1 a b: 2 N0=2, N1=1, N2=1, N=3 Estymacja częstości dla niobserwowanych bigramów: f0= N1 /N0 =0.5 Absolute i linear discounting Zaproponowane przez Ney i Essen (1994) Absolute discounting – od prawdopodobieństwa każdego obserwowanego n-gramu odejmowana jest pewna stała Linear discounting – prawdopodobieństwa obserwowanych n-gramów skalowane są pewną wartością < 1 wartości parametrów mogą zostać oszacowane z held-out data
16
Mixture models Metody mieszane
Możemy wykorzystać informację o n-gramach niższego stopnia, gdy brak danych o wystąpieniach n-gramów wyższego stopnia Simple Linear Interpolation np. dla trigramów: Katz backing-off gdy liczba wystąpień n-gramu > k, używamy MLE (nieco zmniejszając wartość prawdopodobieństwa np. przez GT est., rezerwując dla b) wpw wykorzystujemy rekurencyjnie oszacowanie dla n-1-gramu Obecnie najczęściej wykorzystywane w praktyce – GT estimation połączone z jakąś metodą mieszaną
17
Na koniec... Przypomnienie - Dzisiaj upływa termin przysyłania dokumentacji wstępnej projektu Jeśli ktoś się jeszcze nie zdecydował w jakim języku wykonywać implementację – może spróbować Python NLTK >>> from nltk.corpus import gutenberg >>> gutenberg.items() ['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'blake-songs.txt', 'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt']
18
Python NLTK Wybrane moduły NLTK
token: klasy do reprezentacji i przetwarzania tokenów, takich jak zdania i słowa probability: klasy służące do reprezentacji i przetwarzania danych statystycznych tree: reprezentacja i przetwarzanie danych w postaci drzew cfg: gramatyki bezkontekstowe fsa: automaty skończone tagger: tagger do części mowy i części zdania (angielski) parser: zawiera parsery gramatyczne służące do budowy drzew rozbioru zdania classifier: algorytmy klasyfikacji, włącznie z metodami doboru zawartości słownika draw: pomocnicze klasy do wizualizacji danych corpus: przykładowe korpusy tekstowe
19
Python NLTK Prosty przykład użycia:
>>> from nltk.tokenizer import * >>> text_token = Token(TEXT='Hello world. This is a test file.') >>> print text_token <Hello world. This is a test file.> >>> WhitespaceTokenizer(SUBTOKENS='WORDS').tokenize(text_token) <[<Hello>, <world.>, <This>, <is>, <a>, <test>, <file.>]> >>> print text_token['TEXT'] Hello world. This is a test file. >>> print text_token['WORDS'] [<Hello>, <world.>, <This>, <is>, <a>, <test>, <file.>]
20
Python NLTK Przykład - klasyfikacja: tokenizer = LineTokenizer()
>>> statements = open('statements.txt').read() >>> statement_toks = tokenizer.tokenize(statements) >>> imperatives = open('imperatives.txt').read() >>> imperative_toks = tokenizer.tokenize(imperatives) >>> questions = open('questions.txt').read() >>> question_toks = tokenizer.tokenize(questions) >>> train_toks = (label_tokens(statement_toks, 'statement') label_tokens(imperative_toks, 'imperative') label_tokens(question_toks, 'question')) >>> trainer = NBClassifierTrainer(fd_list) >>> classifier = trainer.train(train_toks) >>> loc = Location(3, unit='s') >>> test_tok = Token("Do you enjoy classification?", loc) >>> classifier.classify(test_tok) "Do you enjoy classification?" >>> prob_dict = classifier.distribution_dictionary(test_tok) >>> for label in prob_dict.keys(): ... print "P(%s) = %.2f" % (label, prob_dict[label]) P(statement) = 0.24 P(imperative) = 0.02 P(question) = 0.74
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.