NGramLangModel

Priklad

Pri vytvoreni trigramoveho modelu a vstupu A B C A B C A B D dojde k temto udalostem:


Add NGram: _BEG_        _BEG_   A
Add NGram: _BEG_        A       B
Add NGram: A    B       C
Add NGram: B    C       A
Add NGram: C    A       B
Add NGram: A    B       C
Add NGram: B    C       A
Add NGram: C    A       B
Add NGram: A    B       D
Add NGram: B    D       _END_
Add NGram: D    _END_   _END_

Pocty

 - trigramy: 11
 - bigramy: 11 (melo by byt 10)
 - unigramy: 11 (melo by byt 9)
 - velikost slovniku: 5 (nepocita se _END_) 
 
=head3 Informace

Implementace tohoto modulu neni robustni. Pokud jsou zadany parametry mimo rozsah, tak muze byt vysledek cokoliv.

new($n, $utf, @files)

Vytvori $n-gramovy jazykovy model ze souboru @files. Pokud je $utf platne, tak se ocekava vstup v UTF-8. Jinak se ocekava v nejakem 1 bytovem kodovani.

addFile($fileName)

Prida soubor $fileName do modelu. Po jeho pridani je nutne manualne prepocitat pocty a pravdepodobnosti.

addNgram($ngram)

Prida do modelu $ngram.

Tato funkce by se nemela externe volat.

computeProbs($delete)

Spocita pravdedpodobnosti n-gramu. Pokud je $delete pravdive, tak po spocitani pravdepodobnosti smaze pocty n-gramu.

computeCounts()

Spocita pocty n-gramu.

getCount($ngram, $n)

Vrati pocet vyskytu ngramu $ngram. Pokud je $n specifikovano, tak se pouzije jen prvnich $n casti.

getCount(['A', 'B'], 1) == getCount([A'])

Pokud je $n rovno 0, tak vrati celkovy pocet ngramu.

getProb($ngram, $n)

Vrati pravdepodobnost ngramu $ngram. Pokud je specifikovano, tak se pouzije jen prvnich $n casti.

getProb(['A', 'B'], 1) == getProb(['B'])

Pokud je $n rovno 0, tak vrati pravdepodobnost 1 / velikost slovniku.

getCondProb ($ngram, $n)

Vrati podminenou pravdepodobnost ngramu $ngram. Pokud je specifikovano, tak se pouzije jen prvnich $n casti.

getCondProb(['A', 'B', 'C'], 3) = p(C | A B) == getCoount(['A', 'B', 'C']) / getCoount(['A', 'B'])

getCondProb(['A', 'B', 'C'], 2) = p(C | B) == getCondProb(['B', 'C'])

getCondProb(['A', 'B', 'C'], 1) = p(C) == getCondProb(['C']) = getProb(['C'])

Pokud je $n rovno 0, tak vrati pravdepodobnost 1 / velikost slovniku.

Pokud n-gram neexistuje, tak vysledek je 0, pokud n-1 gram existuje, pokud n-1 gram neexistuje, tak je vraceno 1 / velikost slovniku

getSmoothedProb($ngram, $n)

Vrati podminenou pravdepodobnost ngramu $ngram upravenou o spocitane lambdy. Pokud je specifikovano, tak se pouzije jen prvnich $n casti.

getSmoothedProb($ngram, $n) = lambda($n) * getCondProb($ngram, $n) + lambda($n-1) * getCondProb($ngram, $n-1) + ... + lambda(0) * getCondProb($ngram, 0)

computeExpectedCounts($ngram)

Pocita expected counts pro n-gram $ngram - vnitrni smycka EM Smooth algoritmu.

emSmooth($fileName)

Spocita lambdy na heldout souboru $fileName.

getLambdas() = @lambdas

Vrati spocitane lambdy.

setLambdas($lambdas)

Nastavi lambdy na hodnotu $lambdas.

filter($filter)

Vyradi z modelu data, pro ktere $filter vrati false.

dumpCounts()

Vypise pocty jednotlivych ngramu.

getPointwiseMutualInformation($tm)

Spocita pointwise mutual information pro ngram $tm.

getAllNGrams($n) = @ngrams

Vrati vsechny $n-gramy.

storeLambdas($file)

Ulozi spocitane lambdy do souboru $file.

loadLambdas($file)

Nacte lambdy ze souboru $file.

getCrossEntropy($file)

Spocita krizovou entropii pro soubor $file.

getCoverage($file)

Spocita kolik procent ngramu ze souboru $file bylo jiz spatreno pri trenovani modelu.