2013-05-05 12 views
12

Witajcie ludzie, wdrażam technikę wygładzania Stupid Backoff (strona 2, równanie 5) dla projektu, nad którym pracuję i mam pytanie dotyczące jego implementacji. Jest to algorytm wygładzający używany w NLP, Good-Turing jest chyba najbardziej znanym podobnym algorytmem.Wyjaśnienie implementacji Głupi Backoff

Krótki opis algorytmu to: Podczas próby znalezienia prawdopodobieństwa pojawienia się słowa w zdaniu najpierw będzie szukać kontekstu dla słowa na poziomie n-gramowym i jeśli nie ma n-gramu tego rozmiar będzie rekurencyjny do (n-1) -gram i pomnożyć jego wynik z 0,4. Rekursja zatrzymuje się w unigramach.

Więc jeśli chcę znaleźć prawdopodobieństwo "dnia" w kontekście "słonecznego dnia", najpierw sprawdziłbym, czy w korpusie znajduje się tri-gram "słoneczny dzień", gdyby nie spróbuj tego samego z bigramem "słoneczny dzień", a na końcu dostaniesz częstotliwość "dnia" podzieloną przez rozmiar korpusu (całkowita liczba słów w danych treningowych).

Moje pytanie brzmi: czy pomnożę wynik przez 0,4 za każdym razem, gdy zmniejszam rozmiar n-gramu?

więc w powyższym przykładzie, jeśli nie jesteśmy w stanie znaleźć tri-gramowe lub bi-gramowe końcowy wynik będzie:

0,4 * 0,4 * częstotliwość (dzień)/corpus_size?

czy po prostu pomnożę raz na poziomie końcowym, więc niezależnie od tego, ile razy muszę dokonać powtórzeń, pomnożę końcowy wynik z wynikiem 0,4?

+1

tak, mnożenie za każdym razem –

Odpowiedz

10

Zasadniczo czytałem równanie 5, jak opisałeś w swojej matematyce powyżej.

W przypadku "słonecznego dnia", w którym nie zaobserwowano żadnego przypadku, można obliczyć S ("dzień" | "słoneczny"). Nie znajdując trygramu "słoneczny dzień", weźmiesz przypadek drugi w równaniu 5 i oszacujesz S ("dzień" | "słoneczny") jako alfa * S ("dzień" | "słoneczny").

Jeśli ponownie nie zarejestrowano obrzędów "słonecznego dnia", przybliżałoby się S ("dzień" | "słoneczny") jako alfa * S ("dzień"), czyli przypadek f ("dzień")/N (liczba zaobserwowanych jednogramów).

Ustawiając alfa na 0,4, otrzymujesz dokładnie to, co napisałeś powyżej.

Mam nadzieję, że to pomoże.

-bms20

0

Tak, trzeba pomnożyć przez 0,4 każdym razem, gdy przesunięcie w dół do modelu niższy n-gram z powodu nie znalezienia szukane wyrażenie.

Zgodnie z formułą sugeruje się, że 0.4 jest mnożone przez wynik "Głupi backoff" za każdym razem.