Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

WEDT Modelowanie języka

Podobne prezentacje


Prezentacja na temat: "WEDT Modelowanie języka"— Zapis prezentacji:

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


Pobierz ppt "WEDT Modelowanie języka"

Podobne prezentacje


Reklamy Google