This commit is contained in:
Filip Gralinski 2022-03-28 06:58:35 +02:00
parent 317012455f
commit 7020c4ba18
1 changed files with 63 additions and 24 deletions

View File

@ -184,7 +184,7 @@ Stwórzmy generator, który będzie wczytywał słowa z pliku, dodatkowo:
line = line.rstrip()
yield '<s>'
for m in re.finditer(r'[\p{L}0-9\*]+|\p{P}+', line):
yield m.group(0)
yield m.group(0).lower()
yield '</s>'
list(islice(get_words_from_file('opensubtitlesA.pl.txt'), 0, 100))
@ -192,7 +192,7 @@ Stwórzmy generator, który będzie wczytywał słowa z pliku, dodatkowo:
#+RESULTS:
:results:
['<s>', 'Lubisz', 'curry', ',', 'prawda', '?', '</s>', '<s>', 'Nałożę', 'ci', 'więcej', '.', '</s>', '<s>', 'Hey', '!', '</s>', '<s>', 'Smakuje', 'ci', '?', '</s>', '<s>', 'Hey', ',', 'brzydalu', '.', '</s>', '<s>', 'Spójrz', 'na', 'nią', '.', '</s>', '<s>', '-', 'Wariatka', '.', '</s>', '<s>', '-', 'Zadałam', 'ci', 'pytanie', '!', '</s>', '<s>', 'No', ',', 'tak', 'lepiej', '!', '</s>', '<s>', '-', 'Wygląda', 'dobrze', '!', '</s>', '<s>', '-', 'Tak', 'lepiej', '!', '</s>', '<s>', 'Pasuje', 'jej', '.', '</s>', '<s>', '-', 'Hey', '.', '</s>', '<s>', '-', 'Co', 'do', '...?', '</s>', '<s>', 'Co', 'do', 'cholery', 'robisz', '?', '</s>', '<s>', 'Zejdź', 'mi', 'z', 'oczu', ',', 'zdziro', '.', '</s>', '<s>', 'Przestań', 'dokuczać']
['<s>', 'lubisz', 'curry', ',', 'prawda', '?', '</s>', '<s>', 'nałożę', 'ci', 'więcej', '.', '</s>', '<s>', 'hey', '!', '</s>', '<s>', 'smakuje', 'ci', '?', '</s>', '<s>', 'hey', ',', 'brzydalu', '.', '</s>', '<s>', 'spójrz', 'na', 'nią', '.', '</s>', '<s>', '-', 'wariatka', '.', '</s>', '<s>', '-', 'zadałam', 'ci', 'pytanie', '!', '</s>', '<s>', 'no', ',', 'tak', 'lepiej', '!', '</s>', '<s>', '-', 'wygląda', 'dobrze', '!', '</s>', '<s>', '-', 'tak', 'lepiej', '!', '</s>', '<s>', 'pasuje', 'jej', '.', '</s>', '<s>', '-', 'hey', '.', '</s>', '<s>', '-', 'co', 'do', '...?', '</s>', '<s>', 'co', 'do', 'cholery', 'robisz', '?', '</s>', '<s>', 'zejdź', 'mi', 'z', 'oczu', ',', 'zdziro', '.', '</s>', '<s>', 'przestań', 'dokuczać']
:end:
**** Empiryczne wyniki
@ -216,7 +216,7 @@ counterA['taki']
#+RESULTS:
:results:
42330
48113
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
@ -272,7 +272,7 @@ Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali gdyby użyć wygładz
#+RESULTS:
:results:
1181065
926594
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
@ -284,16 +284,16 @@ Policzmy teraz jakiej liczby wystąpień byśmy oczekiwali gdyby użyć wygładz
#+RESULTS:
:results:
liczba tokenów średnia częstość w części B estymacje +1 estymacje +0.01
0 494664 1.805294 0.991839 0.009999
1 528998 0.591116 1.983678 1.009917
2 154689 1.574443 2.975517 2.009835
3 81398 2.512285 3.967356 3.009752
4 52899 3.502240 4.959196 4.009670
5 37917 4.433763 5.951035 5.009588
6 28921 5.280834 6.942874 6.009506
7 23267 6.209438 7.934713 7.009423
8 19014 7.265909 8.926552 8.009341
9 15849 8.193135 9.918391 9.009259
0 388334 1.900495 0.993586 0.009999
1 403870 0.592770 1.987172 1.009935
2 117529 1.565809 2.980759 2.009870
3 62800 2.514268 3.974345 3.009806
4 40856 3.504944 4.967931 4.009741
5 29443 4.454098 5.961517 5.009677
6 22709 5.232023 6.955103 6.009612
7 18255 6.157929 7.948689 7.009548
8 15076 7.308039 8.942276 8.009483
9 12859 8.045649 9.935862 9.009418
:end:
*** Wygładzanie Gooda-Turinga
@ -320,16 +320,16 @@ $$p(w) = \frac{\# w + 1}{|C|}\frac{N_{r+1}}{N_r}.$$
#+RESULTS:
:results:
liczba tokenów średnia częstość w części B estymacje +1 Good-Turing
0 494664 1.805294 0.991839 1.069409
1 528998 0.591116 1.983678 0.584838
2 154689 1.574443 2.975517 1.578613
3 81398 2.512285 3.967356 2.599523
4 52899 3.502240 4.959196 3.583905
5 37917 4.433763 5.951035 4.576470
6 28921 5.280834 6.942874 5.631513
7 23267 6.209438 7.934713 6.537671
8 19014 7.265909 8.926552 7.501893
9 15849 8.193135 9.918391 8.670579
0 388334 1.900495 0.993586 1.040007
1 403870 0.592770 1.987172 0.582014
2 117529 1.565809 2.980759 1.603009
3 62800 2.514268 3.974345 2.602293
4 40856 3.504944 4.967931 3.603265
5 29443 4.454098 5.961517 4.627721
6 22709 5.232023 6.955103 5.627064
7 18255 6.157929 7.948689 6.606847
8 15076 7.308039 8.942276 7.676506
9 12859 8.045649 9.935862 8.557431
:end:
Wygładzanie metodą Gooda-Turinga, mimo prostoty, daje wyniki zaskakująco zbliżone do rzeczywistych.
@ -414,3 +414,42 @@ $$N_{1+}(\bullet w) = |\{w_j : \# w_jw > 0\}|$$.
W metodzie Knesera-Neya w następujący sposób estymujemy prawdopodobieństwo unigramu:
$$P(w) = \frac{N_{1+}(\bullet w)}{\sum_{w_j} N_{1+}(\bullet w_j)}.$$
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
def ngrams(iter, size):
ngram = []
for item in iter:
ngram.append(item)
if len(ngram) == size:
yield tuple(ngram)
ngram = ngram[1:]
list(ngrams("kotek", 3))
#+END_SRC
#+RESULTS:
:results:
[('k', 'o', 't'), ('o', 't', 'e'), ('t', 'e', 'k')]
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
histories = { }
for prev_token, token in ngrams(get_words_from_file('opensubtitlesA.pl.txt'), 2):
histories.setdefault(token, set())
histories[token].add(prev_token)
#+END_SRC
#+RESULTS:
:results:
:end:
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
len(histories['jork'])
len(histories['zielony'])
histories['jork']
#+END_SRC
#+RESULTS:
:results:
:end: