# transformersy 2
## Lista 2
**Każde zadanie warte jest 1 punkt.**
## Zadanie 1
**Przypomnij, co to jest perplexity?**
<!-- TODO: coś było na slajdach -->
### Def
<!-- Perplexity jest miarą używaną do oceny jakości modeli językowych, takich jak modele przewidujące tekst czy modele generatywne, jak ChatGPT. Mierzy ona, jak dobrze model „rozumie” i przewiduje dane tekstowe. -->
Intuicyjnie można ją interpretować jako średnią „niepewność” modelu przy przewidywaniu kolejnego słowa w sekwencji.
### Formalna definicja
Perplexity (PP) jest miarą opartą na funkcji straty (ang. loss function) związanej z prawdopodobieństwem przewidywania sekwencji słów. Oblicza się ją na podstawie logarytmicznej funkcji straty dla całego korpusu testowego, gdzie im niższa wartość, tym lepiej model przewiduje dane. Definicja perplexity wygląda następująco:
$PP(W)=2^{H(W)}$
gdzie H(W) to entropia zbioru słów W, lub alternatywnie:
$PP=2^{-\sum_x p(x) \log_2 p(x)}$
$PP(w_1, ..., w_n) = P(w_1, ..., w_n)^{-\frac{1}{n}}$
<!-- gdzie P(wi) to prawdopodobieństwo przypisane przez model słowu wi w sekwencji, a N to liczba słów w zbiorze testowym. -->
### Interpretacja
* Niższe perplexity oznacza, że model dobrze radzi sobie z przewidywaniem słów w tekście (model jest „mniej zaskoczony” tekstem).
* Wyższe perplexity sugeruje, że model jest mniej skuteczny w przewidywaniu sekwencji (jest bardziej „zdezorientowany” danymi).
<!-- ### Przykład -->
<!-- Jeśli perplexity wynosi np. 10, to oznacza, że model „rozważa” średnio 10 możliwych słów jako prawdopodobne kontynuacje danego kontekstu. Niższe wartości są zazwyczaj pożądane, ponieważ oznaczają lepsze dopasowanie modelu do danych testowych. -->
<!-- Perplexity to kluczowy wskaźnik przy trenowaniu i ocenie jakości modeli językowych, szczególnie w zadaniach takich jak tłumaczenie maszynowe czy generowanie tekstu. -->
**Rozważmy język, w którym słowa są ciągami cyfr,
który:
a) składa się z bloków $k$-cyfrowych (w bloku są te same cyfry, to znaczy blok ma postać $d^n$, przykładowo 888888888)
b) po danym bloku może nastąpić blok z dowolną cyfrą (z tym samym prawdopodobieństwem)**
**Rozważamy bardzo duży tekst z tego języka. Oblicz dla tego tekstu perplexity dla następujących modeli: unigramowego, bigramowego oraz optymalnego n-gramowego (jakie jest $n$?) Podaj wartości liczbowe dla $k = 10$.**
### Obliczenia Perplexity
* Model Unigramowy:
W modelu unigramowym każdy symbol (cyfra) traktowany jest niezależnie. Prawdopodobieństwo każdej cyfry wynosi $\frac{1}{10}$, ponieważ mamy 10 cyfr (od 0 do 9).
<!-- $PP = P(b_1, ..., b_n)^(-1/nk) = 1/10^k^n^(-1/nk) = 10^1 = 1$ -->
$PP = 10$ w oczywisty sposób
* Model Bigramowy:
<!-- W modelu bigramowym rozważamy pary cyfr. Po bloku $d^k$ (gdzie d to cyfra) następuje blok z dowolną cyfrą. Przy k=10 mamy 10 możliwości dla cyfry d oraz 10 możliwości dla następnej cyfry. Prawdopodobieństwo dla pary będzie zatem również ? 1/100, ponieważ każda cyfra w parze jest niezależnie wybierana z 10 cyfr. ??? -->
Bierzemy pod uwagę ppb, na którym miejscu w bloku też jesteśmy
$PP = 2^{-(9*\frac{9}{10} \log_2(\frac{9}{10}) + \frac{1}{10} \log_2(\frac{1}{10}))}$
Faktyczny jest 10, jeśli wiemy jak wygląda tekst (generowanie tekstu)
Ale mówimy o modelu, on nie ma kontekstu, patrzy na kolejny znak, jest na tyle głupi, że nie wie, że coś będzie dużo gorsze
$PP = P(b_1, ..., b_n)^{-1/nk} = P(a_1) * P(a_1 | a_1) * ... * P(a_1 | a_1...a_1..k-1) * P(a_2 | a1..a1a2) = ((1/10)^n)^(-1/nk) = 10^(1/k)$
* Model Optymalny n-gramowy:
Nie da się stwierdzić co jest optymalne, bo albo liczy za wolno albo ma za słabą dokładność
<!-- ### Obliczenia Perplexity
Dla każdego modelu, zakładając, że mamy duży zbiór tekstowy (zawierający N znaków), możemy obliczyć perplexity (PP).
1. Perplexity Modelu Unigramowego
$𝑃𝑃unigram=10𝐻(𝑊)=10−1𝑁∑𝑖=1𝑁log𝑃(𝑤𝑖)=10−1𝑁⋅𝑁⋅log(110)=10log(10)=10PP unigram =10 H(W) =10 − N1 ∑ i=1N logP(w i ) =10 − N1 ⋅N⋅log( 101 ) =10 log(10) =10$
2.Perplexity Modelu Bigramowego
$𝑃𝑃bigram=10𝐻(𝑊)=10−1𝑁∑𝑖=1𝑁log𝑃(𝑤𝑖𝑤𝑖+1)=10−1𝑁⋅𝑁⋅log(1100)=102=100PP bigram =10 H(W) =10 − N1 ∑ i=1N logP(w i w i+1 ) =10 − N1 ⋅N⋅log( 1001 ) =10 2 =100$
3. Perplexity Modelu Optymalnego n-gramowego
Dla modelu n-gramowego, gdzie 𝑛=11n=11:
$𝑃𝑃n-gram=10𝐻(𝑊)=10−1𝑁∑𝑖=1𝑁log𝑃(𝑤𝑖𝑤𝑖+1...𝑤𝑖+𝑛−1)=10−1𝑁⋅𝑁⋅log(11000)=103=1000PP n-gram =10 H(W) =10 − N1 ∑ i=1N logP(w i w i+1 ...w i+n−1 ) =10 − N1 ⋅N⋅log( 10001 ) =10 3 =1000$
* Wartości liczbowe dla $k = 10$: -->
## Zadanie 2
**Pewna firma zaproponowała ministerstwu pewnego państwa utworzenie narzędzia rozpoznającego teksty generowane przez model jęzkowy za pomocą perplexity1 (to znaczy, frima twierdziła, że generowane teksty mają mniejsze perplexity niż teksty naturalne, stąd wartość perplexity poniżej jakiegoś progu sugeuje nienaturalne pochodzenie tekstu).**
**1. Zastanów się, dlaczego miałoby to działać w ten sposób?**
**2. Dlaczego to nie jest rozwiązanie idealne i jak użytkownik takiego modelu jak ChatGPT może kontrolować perplexity wygenerowanego tekstu.**
1. Teksty generowane przez modele językowe, takie jak GPT, są często tworzone zgodnie z optymalnymi prawdopodobieństwami przewidywania kolejnych słów, co sprawia, że są statystycznie „gładsze” i bardziej przewidywalne. Model będzie częściej wybierał bardziej prawdopodobne słowa i struktury zdania, zamiast tworzyć tekst o naturalnej, czasem chaotycznej, zmienności charakterystycznej dla ludzi. Przez co teksty generowane mają mniejsze perplexity, a ludzkie mają większe.
<!-- 1.1. Być może: -->
<!-- Jeśli perplexity jest liczone na podstawie prawdpodobieństwa kolejnych wyrazów w zdaniu, to jeżeli perplexity ogólnej próbki statystycznej jest mniejsze niż danych tekstów, to te teksty miały inny rozkład prawdopodobieństwa niż ogólna próbka statystyczna tekstów. Ponieważ model statystyczny trzyma bardzo dużą ilość tekstów w swojej pamięci, to można założyć, że jego próbka statystyczna jest tą poprawną. To byłoby rozwiązanie w sytuacji idealnej, w której bot produkuje teksty bez wpływu promptera. -->
2. To podejście ma jednak kilka wad:
* Nie każdy tekst generowany przez model będzie miał niskie perplexity - nowsze modele są trenowane na danych które lepiej są w stanie reprezentować ludzką mowę, więc łatwo ominą te "zabezpieczenia".
* Teksty ludzkie mogą mieć niską perplexity - osoby kontaktujące się z ministerstwem będą bardziej myśleć nad tekstem, żeby był "czysty", przez co takie wypowiedzi mogą mieć niższe perplexity.
* Model językowy może stosować natomiast różne techniki - np. znak wodny albo zostać zmuszony przez promptera na odpowiadanie w dany sposób. Wtedy prawdopodobieństwo będzie zmienione i próbka statystyczna z wszystkich tekstów nie będzie miarodajna. Prompter może prosić o takie odpowiedzi które w normalnym świecie mają bardzo niskie prawdopodobieństwo wystąpienia.
## Zadanie 3
**W zadaniu tym będziemy myśleć o losowaniu tekstu za pomocą N-gramów (konkretnie 2- i 3-gramów), przy czym wynikowy tekst powinien spełniać jakieś dodatkowe wymagania.**
**Wyjaśnij, dlaczego „metoda naturalna” (czyli normalne losowanie od lewej do prawej tekstu o określonej długości, sprawdzenie warunku, i ewentualne losowanie ponowne) nie sprawdzi się w takich zadaniach. Dla każdego wariantu zaproponuj jakiś algorytm, który daje istotnie większą szansę na losowanie zakończone sukcesem (niż metoda naturalna):
a) losuj tekst o długości M, który na pozycji k ma określony wyraz,
b) losuj tekst o długości M, który na pozycjach parzystych ma określone wyrazy (czyli losujesz tylko
pozycje nieparzyste, zaczynamy numerację od 0),
c) losuj niezbyt długi tekst o zadanym pierwszym i ostatnim słowie,
d) dla listy napisów [s1, . . . , sn] losuj tekst o długości n, taki że i-te słowo ma sufiks si.**
Możemy losować w nieskończoność, ponieważ nie będzie istniał odpowiedni wyraz następny
### a.
```
1. generuj losowy ciąg do k-1 elementu, tak żeby spełniał wymagania
2. znajdź x n-gramów które pasują.
3. wylosuj z nich.
4. losuj do końca tak żeby pasowało
```
b.
```
1. podziel na grupy n-gramy z wybranymi wyrazami na poszczególnych pozycjach.
2. idziemy po kolei losując i sprawdzając czy mamy odpowiednie słowo na odpowiednich pozycjach
```
c.
```
1. iść od dwóch stron pasującymi
2. na środku patrzymy czy jest n-gram który pasuje
3. jeśli nie pasuje idź do 1
```
d.
Ponieważ takich wyrazów jest bardzo mało i mamy ograniczony wybór to ppb że każde kolejne słowo będzie pasowało do poprzedniego które kończyło się na dany sufiks jest bardzo niskie. To co bym zrobił to, ze względu na małą ilość wyrazów, używał beam-searcha. Rozpatrujemy bardzo dużo opcji, ale nie jest ich aż tak dużo, a możemy się cofać do bardziej prawdopodobnych opcji.
```
1. Beam search skoncentrowany na dopasowaniu sufiksów
2. Budowanie sekwencyjne z filtracją sufiksów
3. Zastosowanie algorytmu A do optymalizacji tekstu z dopasowaniem sufiksów
```
## Zadanie 4
**Wytrenowałeś model językowy (typu GPT). Ale okazało się, że w wyniku błędu wszystkie teksty były czytane od tyłu i model zamiast widzieć: ['Lubię', ' lody', ' malin', 'owe'] widział ['owe', ' malin', ' lody', 'Lubię']. Model się wytrenował, kosztowało to sporo (trening był przeprowadzony w płatnej chmurze). Gdy zauważyłeś błąd, to uruchomiłeś nowy trening (poprawnego modelu), teraz jedyny problem to uzasadnić wydatki na trening pierwszego modelu. Jakich argumentów używałbyś, chcąc przekonać Zarząd, że wydatki te istotnie były uzasadnione.**
Super pomysł:
* Jednym z przykładów jest przykładowo podpunkt a w poprzednim zadaniu. Jeżeli nauczyliśmy bota układać zdania od tyłu to jest w stanie zacząć od zdania które na k-tym miejscu ma wyraz k-ty i ułożyć zdanie danej długości. Jesteśmy więc w stanie układać dość dobrze zdania, które mają na jakimś miejscu dany wyraz, bo najpierw użyjemy odwróconego bota, a później już normalnego (lewo-prawo).
Inne:
* Kosztowne, ale cenne doświadczenie dla zespołu
* Szkolenie zespołu: Cały zespół uczestniczył w analizie i wprowadzeniu modelu, co umożliwiło zdobycie dodatkowych umiejętności oraz doświadczeń, które są trudne do symulacji w normalnych warunkach. Uczenie się na błędach jest cennym procesem i może okazać się nieocenione w rozwiązywaniu przyszłych wyzwań.
* Możliwość odkrycia nowych zastosowań
* Specjalistyczne aplikacje: Taki "odwrócony" model może okazać się użyteczny w kontekstach, które na pierwszy rzut oka nie były oczywiste, np. w analizie wstecznej tekstów (przydatne w lingwistyce, analizie tekstu literackiego, kodowania wstecznego w programowaniu).
* Bezpieczeństwo i analiza danych: Odwrócone sekwencje tekstu mogą być używane do rozwoju narzędzi do szyfrowania danych lub w testach odporności na naruszenia bezpieczeństwa tekstu i semantyki – na przykład w celu identyfikacji odwróconych komunikatów (szyfrowania typu "steganografia").
* Monetyzacja w edukacji i badaniach nad NLP
* Model do nauczania w programach akademickich: Model odwrócony można z powodzeniem wykorzystywać w szkoleniach oraz kursach akademickich związanych z przetwarzaniem języka naturalnego (NLP). Może być częścią oferty jako wyjątkowe narzędzie do badań, w którym studenci oraz zespoły badawcze analizują nietypowe zachowania modeli językowych i radzenia sobie z przetworzonymi danymi.
* Unikalne badania naukowe i publikacje: Model można wykorzystać do opracowania publikacji naukowych na temat przetwarzania tekstów odwróconych lub ogólniej – odporności modeli na anomalie w danych wejściowych. Publikacje takie mogą zyskać rozgłos, wzmocnić nasz wizerunek w branży oraz otworzyć drogę do nowych kontraktów i partnerstw z uczelniami oraz centrami badawczymi.
* Produkt dla specyficznych branż – przemysł prawniczy i archiwizacja danych
* Wsparcie przy analizie dokumentów historycznych: Archiwa i instytucje historyczne często mierzą się z problemem odczytywania danych z uszkodzonych dokumentów, gdzie struktura tekstu jest nietypowa lub wymaga przetwarzania nietypowymi metodami. Taki model mógłby służyć do analizy archiwalnych dokumentów o zakłóconej strukturze, co możemy monetyzować w usługach dedykowanych archiwom i bibliotekom cyfrowym.
* Analiza specyficznych dokumentów prawniczych: W niektórych przypadkach dokumenty prawne mogą zawierać struktury nietypowe, zwłaszcza w sytuacjach, gdzie oryginalne wersje są dostępne tylko jako obrazy lub skany, które wymagają przetwarzania OCR. Model mógłby pełnić rolę w analizie takich dokumentów, szczególnie w sytuacjach wymagających dekodowania zniekształconych lub odwróconych informacji, co może być interesujące dla kancelarii prawnych oraz firm zajmujących się analizą danych prawniczych.
## Zadanie 5
**Steganografia wg Wikipedii to:**
`nauka o komunikacji w taki sposób, by obecność komunikatu nie mogła zostać wykryta`
**Będziemy używać modelu językowego, o dużej jakości (tzn. takiego, który produkuje teksty w zasadzie nieodróżnialne od „naturalnych”), znanego obu stronom komunikacji.
Sytuacja jest następująca: jesteś w więzieniu (niesłusznie skazany), chcesz porozumiewać się z Towarzyszami na Wolności, szczęśliwie możecie wymienieć drukowane listy w sposób nieskrempowany, lecz listy te czyta Naczelnik Więzienia – i nic nie powinno go poważnie zaniepokoić, bowiem mogłyby nastąpić Poważne Konsekwencje. W każdym liście chcesz przekazać komunikat (kilkadziesiąt, może trochę więcej bitów), tak by był on jednoznacznie odczytywalny, a jednocześnie całkowicie niewidoczny dla Naczelnika (z różnych względów odpadają jakiekolwiek fizyczne modyfikacje nośnika, typu sok z cytryny itp). Szczęśliwie w Więziennej Pralni, w której pracujesz, jest komputer z modelem językowym i zainstalowanym Pythonem, a Ty masz do niego dobry dostęp i nikt z personelu nie jest nim zainteresowany.
Jak zorganizować niewidoczną dla Naczelnika komunikację między Tobą a Towarzyszami, przy założeniu, że wszystkie szczegóły mogliście omówić wcześniej, a ponadto Towarzysze mają dostęp do idealnie tego samego modelu, wersji Pythona, etc.**
Zaczynamy od ustalonego zdwrotu, powiedzmy 10 słów.
Możemy generować z top-k=1 zdania i ręcznie podmienić kilka wyrazów, żeby zachować sens i spójność, ale żeby w ten sposób ukryć wiadomość. Żeby odszyfrować, to generujemy znowu i sprawdzamy co się nie zgadza, to będzie nasza ukryta wiadomość.
## Zadanie 6 (*)
**Sprawdź, jeśli nie wiesz, co to jest Zasada Kerckhoffsa (https://pl.wikipedia.org/wiki/Zasada_Kerckhoffsa). Przedyskutuj kwestię, czy Twoje rozwiązanie z poprzedniego punktu ją spełnia. Jeżeli nie, to czy można je jakoś naprawić? (za klucz uznajemy model językowy)**
**Zasada Kerckhoffsa** - jedna z podstawowych zasad współczesnej kryptografii, sformułowana w XIX wieku przez holenderskiego kryptologa Augusta Kerckhoffsa. Zasada ta mówi, że system kryptograficzny powinien być bezpieczny nawet wtedy, gdy wszystkie szczegóły jego działania – oprócz klucza – są znane.
Kluczem jest seed do generatorów, śmiga
## Zadanie 7
**Załóżmy, że Papuga jest zainstalowana na każdym komputerze, jako część systemy operacyjnego. Twoim zadaniem jest opracować metodę kompresji tekstów polskich wykorzystującą ten model językowy. Postaraj się, by opis był na tyle dokładny, żeby dało się go bez kłopotu zaimplementować (uwaga: zakładamy, że wynikiem kompresji może być ciąg bitów, nie musisz przejmować się tym, jak go upakować w bajty i jak reaguje on na zniekształcenia).**
Średnie ppb liczymy z całego tekstu, kody Huffmana
Dla wyrazów z większym prawdopodobieństwem nadajemy krótsze ciągi bitowe, a dla wyrazów z większym prawdopodobieństwem nadajemy dłuższe ciągi bitowe.
Model językowy działa tak, że na podstawie poprzednich wyrazów daje prawdopodobieństwa wyrazów kolejnych. Ponieważ zawsze prawdopodobieństwa są takie same możemy użyc to do kompresji. Jeśli znamy cały poprzedni tekst oraz dostajemy jakiś skompresowany token który mówi nam które prawdopodobieństwo wybrać możemy odszyfrować skompresowany tekst.
Więc kompresujemy go w następujący sposób:
Idąc po kolei słowami patrzymy jakie prawdopodobieństwa zostały przypisane odpowiednim wyrazom i na podstawie tego nadajemy jakiś kod wyrazowi który odpowiada temu który powinien być kolejny w oryginalnym tekście. *Ja bym to widział tak, że możemy przypisywać po prostu wartość liczbową równą miejscu w posortowanej malejąco tablicy prawdopodobieństw.* Wtedy nasz skompresowany tekst ma dla każdego wyrazu tylko jedną liczbę zamiast ciągu znaków. Możemy to kompresować mocniej i np. używać ciągu binarnego który przypiszemy w jakiś sposób.
## Zadanie 8
**W modelu Papuga ważne jest, by prefiks który dajemy modelowi nie kończył się spacją. Zaobserwuj na kilku(nastu) przykładach, jak różnią się generacje dla tego samego prefiksu w wariantach ze spacją na końcu i bez spacji. Wyjaśnij, skąd bierze się ten fenomen.**
Zmienia się tokenizacja, token może zaczynać się od spacji. Takich tokenów będzie o wiele mniej niż tokenów niezaczynających się od spacji przez to możemy dostawać o wiele mniej ppb słowa jako wynik.
<!-- Spacje na początku, takie tokeny przeznaczone są do środka wyrazu -->
Obserwacje:
* przy "ze spacją" czasami dostajemy ciąg `*********`
* raz dostałęm `!= |( &[[1][1][2][2][1][1][1][1][2] ]|| |--.ef| -`
* często zbacza z tematu lekko lub totalnie go odkleja
Przykłady:
* "Wykładowca dał ciekawe zadanie"
* bez spacji
* Wykładowca dał ciekawe zadanie. Przedstawił kilka interesujących przykładów z życia na przykładzie pracy z drewnem i ciesielskimi sprzętami. Pokazał jak trzeba się nauczyć obsługi programów sterujących i jak należy o nie zadbać, by służyły nam przez długie lata
* Wykładowca dał ciekawe zadanie naszym studentom. Okazało się, że wiele z nich ma problemy z komunikacją w języku angielskim, bo słabo władają językiem angielskim (bo język angielski jest dla nich obcy z racji tego, że mówią nim obcym językiem, a w
* Wykładowca dał ciekawe zadanie, ale jego wypowiedź na temat mediów z jednej strony nie pasowała do pozostałych. – Na przykład w książce o telewizji amerykańskiej jest mnóstwo nazwisk, których nie da się przetłumaczyć w sensie dosłownym… ale przecież to jest
* ze spacją
* Wykładowca dał ciekawe zadanie owemu zespołowi. Co prawda tylko w pewnym fragmencie, ale dzięki temu wszystko zostało wyjaśnione. Następnym z tematów była prelekcja dotycząca nowych technologii i technologii społecznych. Czy rzeczywiście człowiek w dzisiejszym świecie ma do zaoferowania
* Wykładowca dał ciekawe zadanie rządzenia nie tylko po polsku, ale również po białorusku (w tym bardzo często ze względu na pochodzenie – polski język migowy). Następnie pokazał nam polskie szkoły biznesu z których jesteśmy dumni - Centrum Nauki Kopernik i Centrum
* Wykładowca dał ciekawe zadanie laryngologowi, to profesorowi Adamowi Kuleczce. Od razu było słychać, że ktoś go lubi, a nawet uwielbia. Doktor zwrócił uwagę, że u niego są w tym wszystkim pewne „błędy lekarskie
* "Największym polskim poetą był":
* bez spacji:
* Największym polskim poetą był chyba Stanisław Lem, czyli jego autor „Słonecznik”, albo jak piszą niektórzy „niemalże w samym środku Puszczy Białowieskiej”. O „Słoneczniku” opowiada książka „Zły i brzydki las” autorstwa
* Największym polskim poetą był m. in. Leopold Staff, który z powodu choroby musiał opuścić nasz kraj, kiedy pracował w Nowym Jorku. W czasie stanu wojennego przebywał w Paryżu, a następnie w Algierze. Jego wiersze, zarówno poety
* Największym polskim poetą był chyba Henryk Sienkiewicz, który po latach napisał, że życie człowieka jest czymś szczególnym. I właśnie jego książki są mi bliskie. Dlatego od wielu lat jestem miłośnikiem i sympatykiem poetów. Kiedy czytałam wiersze Henryka Sienkiewicza,
* ze spacją:
* Największym polskim poetą był Tadeusz Różewicz. Jego twórczość jest często kopiowana z publikacji poetyckiej. Tadeusz Różewicz jest znany ze swego zamiłowania do folkloru. W latach 90. brał udział w konkursie
* Największym polskim poetą był ówczas Leopold Staff "Nieboszcz" i jego twórczość. W swych wierszach bardzo często nawiązuje do tradycji i tradycji ludowych naszych rodaków. "Nieboszcz" to poetycka mieszanka poezji śpiewanej i poezji
* Największym polskim poetą był owerkiem, lecz to właśnie on dał początek słynnej Wielkiej Księdze o poezji w polskiej poezji w 1846 roku. Pierwszy tom tomiku poezji Poety – ouińa poezji tomik zawierający poezję
## Zadanie 9
**Rozważmy wykorzystanie modelu językowego do generacji wierszyków, takich jak poniższy:**
```
Biega, krzyczy pan Hilary:
„Gdzie są moje okulary”
Szuka w spodniach i w surducie,
W prawym bucie, w lewym bucie.
```
**Czym taki tekst się charakteryzuje?**
* **rytm i metrum** – linijki są często napisane w miarowym rytmie, co sprawia, że łatwo się je czyta i zapamiętuje. Wiersz posiada układ sylab, np. w każdym wersie zbliżona liczba sylab.
* **rym** – występują rymy, które zwykle nadają wierszykowi melodyjność (np. "Hilary" – "okulary").
* **prosta struktura gramatyczna** – zdania są krótkie, czasem eliptyczne, i często zawierają powtórzenia, co dodaje tekstowi dynamiki i łatwości przyswajania.
* **element humoru i niespodzianki** – takie wierszyki mają niekiedy dowcipny lub niespodziewany zwrot, co nadaje im lekkości i atrakcyjności dla odbiorcy.
* **postacie lub przedmioty codzienne** – są łatwe do wyobrażenia, a ich obecność ułatwia utożsamienie się lub wzbudzenie emocji w odbiorcy.
**Zaproponuj możliwie realistyczny algorytm, który wykorzystuje taki model jak Papuga do generacji wierszyków (oczywiście nie obędzie się bez przeszukiwania, chodzi zatem o to, jak uczynić ten proces możliwie efektywnym).**
* Krok 1: Przygotowanie i ustawienia początkowe
* Stworzenie tematyki i zbioru słów kluczowych
* Rozpoczynamy od wybrania tematu wierszyka (np. „szukanie czegoś”, „zabawna sytuacja z życia codziennego”). Dobieramy słowa kluczowe (np. "okulary", "szukanie", "krzyczy"), które będą motywem przewodnim tekstu.
* Zdefiniowanie formy i liczby sylab
* Określamy preferowaną strukturę – np. dwa czterowersowe zwrotki z rymami parzystymi (AABB). Możemy również zdefiniować liczby sylab dla każdego wersu (np. 8-7-8-7).
* Określenie metrum i rytmu:
* Decydujemy, jaki rytm (np. trochej lub jamb) powinien zostać zachowany.
* Krok 2: Użycie modelu do wygenerowania wersów
* Generacja z początkowym kontekstem: Wprowadzamy początkowy kontekst (np. „Biega, krzyczy pan Hilary:”). Model kontynuuje generację na podstawie tego kontekstu. Możemy ustawić ograniczenie długości generowanego tekstu, aby nie przekroczyć liczby sylab.
* Selekcja rymów i struktury: Po wygenerowaniu każdej linii, model zwraca kilka opcji kontynuacji, z których wybieramy te spełniające kryterium sylabowe oraz rymowe.
* Algorytm przeszukiwania opcji: Na każdym kroku generacji (wersu) stosujemy przeszukiwanie z ograniczeniami:
* Przeszukiwanie rozgałęzione (beam search): Generujemy kilka wersji wersów i filtrujemy te, które spełniają wymagania dotyczące liczby sylab i rymu.
* Ograniczenie metrum: Możemy użyć dodatkowej funkcji, która analizuje rytm (np. akcenty słów) i ocenia wersy pod kątem ich zgodności z wybranym metrum.
* Edycja rymów: Jeśli model wygeneruje wers zbliżony, ale bez odpowiedniego rymu, możemy powtórzyć generację dla danej linii, wskazując na przykład wyrazy mające się pojawić w ostatnich sylabach wersów, aby dopasować rymy.
* Krok 3: Weryfikacja i poprawa
* Ocena płynności i humoru: Po wygenerowaniu całego wierszyka oceniamy go pod kątem płynności i potencjalnego elementu humorystycznego. Możemy automatycznie sprawdzać, czy wierszyk zawiera słowa nacechowane emocjonalnie lub słowa kluczowe, które nadają mu lekkości.
* Edycja końcowa: Na zakończenie, przeprowadzamy prostą edycję, aby upewnić się, że wersy są zgodne rytmicznie i sylabicznie.
* Przykładowe użycie algorytmu
Model dostaje początkowy kontekst: „Biega, krzyczy pan Hilary:”
Generuje różne propozycje następnych wersów. Algorytm wybiera te, które rymują się oraz spełniają wymaganie dotyczące liczby sylab.
Proces powtarza się, dopóki cały wierszyk nie zostanie wygenerowany.
dodanie logiki kontrolującej metrum, rymy oraz spójność tematyczną.
## Zadanie 10 (*)
**Zaproponuj jakieś zadanie, w którym przewidywanie kolejnego tokenu może dać użyteczną aplikację (lub być w jakiś sposób ciekawe, czy zabawne). Zadanie nie powinno mieć związku z językiem naturalnym (a przynajmniej nie powinno być jedynie związane z językiem naturalnym). Opisz skąd bierzesz (bądź jak generujesz) korpus i jak wygląda tokenizacja.**
* gry planszowe, przewidywanie następnego ruchu (może pomagać uczyć gry w daną grę)
* szachy
* bardziej strukturalne i logiczne sekwencje ruchów niż NLP
* korpus: profesjonalne rozgrywki (GM, IM, FM) ChessBase, Lichess
* tokenizacja:
* tokeny jako pełne ruchy -> ["e4", "e5", "Nf3", "Nc6", "Bb5"]
* tokenizacja pozycyjna: rozdzielamy po kolumnach lub wierszach lub figura i pole, na które chce iść ???
* przykłady użycia:
* podpowiedzi ruchów na bieżąco
* narzędzie edukacyjne: debiuty
* symulacja partii
* Go
* korpus: KGS (Kiseido Go Server), OGS (Online Go Server)
* tokenizacja:
* tokeny jako pełne ruchy -> TODO:
Reszta później:
* być może do jakiś modeli XAI ???
* tworzenie zadań z treścią, historyjek do zadań (np. w stylu Competitive Programming)
* tworzenie muzyki:
* tokenizacja: po nutach (jakaś bardziej własna, chyba są jakieś standardy)
* melodia
* tekst piosenki
* tworzenie tekstów, które wykorzystuje się w różnych aspektach życia (automatyzacja):
* tworzenie poezji, tworzenie prozy, wpisów w social mediach, artykuły na bloga, tworzenie notatek na jakiś temat
* streszczanie prac naukowych na jakiś temat
*