This commit is contained in:
Paweł Skórzewski 2024-02-27 14:35:01 +01:00
parent 8134e2a8da
commit 21fa178802
7 changed files with 1091 additions and 2 deletions

View File

@ -1,3 +1,70 @@
# moj-2024
# Modelowanie języka 2023
Modelowanie języka 2024
Tutaj znajdują się informacje dotyczące wykładu i ćwiczeń z
„Modelowania języka”, zajęć prowadzonych przez prof. UAM dr. hab.
Filip Gralińskiego.
**Uwaga** Informacje podane w plikach w podkatalogach `wyk/` i `cw/`
nie muszą być aktualne (są to materiały przeniesione z poprzedniego
roku). W szczególności proszę nie wykonywać żadnych zadań z materiałów
ćwiczeniowych, chyba że wyraźnie wskazano je tutaj lub pojawiły się
jako zadanie na platformie Teams.
## Podział materiału
Materiał — zarówno na wykładzie, jak i na ćwiczeniach — podzielony jest
na trzy, mniej więcej równe objętością, działy:
1. Podstawy modelowania języka.
2. Neuronowe modele języka (bez sieci Transformer).
3. Sieci Transformer.
## Zasady zaliczenia wykładu
Wykład kończy się egzaminem. Z egzaminu można uzyskać zwolnienie pod
następującymi warunkami:
* ocena co najmniej dobry plus z ćwiczeń,
* uzyskanie co najmniej 20 punktów wykładowych.
Punkt wykładowy można zdobyć za różnego rodzaju aktywności związane z wykładem:
* zgłoszenie (jakiegokolwiek: merytorycznego, językowego,
technicznego) błędu w materiałach do wykładu (punkt otrzymuje
pierwszy zgłaszający),
* zadanie sensownego pytania na wykładzie,
* odpowiedź na pytanie na wykładzie,
* udział w dyskusji po wykładzie na platformie Teams (zadanie pytania
lub odpowiedź na pytanie innego studenta).
Punkt wykładowy jest zaliczony tylko pod warunkiem obecności na danym wykładzie.
Dodatkowo przy liczeniu sumy punktów wykładowych obowiązują następujące ograniczenia:
* liczymy maksymalnie 3 punkty na wykład,
* z każdego działu liczymy maksymalnie 8 punktów.
## Zasady zaliczenia ćwiczeń
Zaliczenia z ćwiczeń uzyskujemy przez zdobywanie punktów za zadania i
projekty. Zasadniczo punkty zdobywamy poprzez wykonywanie zadań na
bieżąco na ćwiczeniach lub najpóźniej do kolejnych zajęć. Dodatkowo
będzie też możliwość zdobywania punktów poprzez wykonywanie projektów.
Na ogół na każdych ćwiczeniach jest do zdobycia 40 punktów, z czego
zazwyczaj 20 punktów będzie do zdobycia za wykonanie części zadania od
razu w trakcie zajęć.
Przelicznik punktów na ocenę:
* -299 — 2
* 300-349 — 3
* 350-399 — 3+
* 400-449 — 4
* 450-499 — 4+
* 500- — 5
Dodatkowo przyjmuje się następujące ograniczenie: za każdy dział
liczymy maksymalnie 200 punktów.
Technicznie rozwiązania zadań zgłaszamy na platformie Moodle lub na platformie Gonito.

View File

@ -0,0 +1,104 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Modelowanie języka </h1>\n",
"<h2> 0. <i>Informacje na temat przedmiotu</i> [ćwiczenia]</h2> \n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Informacje ogólne"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Kontakt z prowadzącym\n",
"\n",
"prowadzący: dr Paweł Skórzewski\n",
"\n",
"Najlepiej kontaktowąć się ze mną przez MS Teams lub mailowo.\n",
"\n",
"\n",
"## Literatura\n",
"Polecana literatura do przedmiotu:\n",
"\n",
"- Koehn, P. (2009). Statistical Machine Translation. Cambridge: Cambridge University Press. doi:10.1017/CBO9780511815829\n",
"- Philipp Koehn. \"Neural Machine Translation\". 2020.\n",
"- https://web.stanford.edu/~jurafsky/slp3/3.pdf\n",
"- Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. North American Association for Computational Linguistics (NAACL).\n",
"- Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu. 2020. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. Journal of Machine Learning Research vol 21, number 140, pages 1-67.\n",
"- Radford, Alec and Wu, Jeff and Child, Rewon and Luan, David and Amodei, Dario and Sutskever, Ilya. 2019. Language Models are Unsupervised Multitask Learners\n",
"- https://jalammar.github.io/illustrated-transformer/\n",
"- https://www.youtube.com/watch?v=-9evrZnBorM&ab_channel=YannicKilcher\n",
"- https://www.youtube.com/watch?v=u1_qMdb0kYU&ab_channel=YannicKilcher\n",
"\n",
"\n",
"\n",
"## Zaliczenie\n",
"\n",
"\n",
"\n",
"Do zdobycia będzie conajmniej 600 punktów.\n",
"\n",
"Ocena:\n",
"\n",
"- -299 — 2\n",
"\n",
"- 300-349 — 3\n",
"\n",
"- 350-399 — 3+\n",
"\n",
"- 400-449 — 4\n",
"\n",
"- 450—499 — 4+\n",
"\n",
"- 500- — 5\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"author": "Jakub Pokrywka",
"email": "kubapok@wmi.amu.edu.pl",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"lang": "pl",
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
},
"subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]",
"title": "Ekstrakcja informacji",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

File diff suppressed because one or more lines are too long

70
lab/01_materialy/a.txt Normal file
View File

@ -0,0 +1,70 @@
# tekst pochodzi z https://wolnelektury.pl/media/book/txt/baczynski-orfeusz-w-lesie.txt
Pod tym dębem, pod stuletnim, wśród gałęzi skrył się,
a deszcz pierzchnął, siedmiobarwnym łukiem nad nim wzbił się.
Ledwie okiem w nim utonął, w barwnej brodząc nucie,
blady błękit tęczę wchłonął, dąb zawołał: «Zbudź się.
Czas na ciebie, czeka lira, nowej pieśni głodna,
wdrąż się w ziemię, bij o niebo, serca przepal do dna.
Ze mną, boski Orfeuszu, zmierz muzyczną siłę,
mnie pokonasz — śmierć przemożesz, którą zwyciężyłem.
Popatrz: uschnie młoda łoza, runie smukła jodła,
patrz: topole śmierć podcięła, ale mnie nie zmogła.
W niebo śpiewem rosnę, w ziemię korzeniami wrastam,
me milczenie jest strumieniem, a ma pieśń liściasta!»
Więc Orfeusz chwycił lirę rozmodloną dłonią,
strunę trącił, już obłoki przebudzone dzwonią.
Jeszcze głosu nie wydobył, już na wargi drżące,
jak na liście, promieniście wbiega młode słońce.
I pieśń począł.
Wrył się w ziemię takim jasnym tonem,
że wzleciały ponad drzewa krety uskrzydlone,
że strumienie, co pod ziemią ciemno się poczęły,
nad brzegami, co je więżą, w lirę się wygięły.
Wzniósł się w górę, ręką jeno ciężar strun odmierzał,
a już wiatrem swego głosu w żołędzie uderzał,
a żołędzie melodyjnie trącając się wzajem,
rozdzwoniły włosy wierzby nad leśnym ruczajem,
a w tych włosach smutek nagły wylągł się tak cicho,
że nie będąc jeszcze szeptem, szeptał: «Eurydyko…»
Jeno woda pochwyciła to czułe wezwanie,
a już w kwiaty je wkropliła na leśnej polanie,
a tam trawy zielonawe w korzenie wszeptały
i już drzewa jej imieniem szumieć poczynały.
Targnął strunę, bo nie szeptem śmierć miał głuchą przemóc,
lecz wołaniem tak wysokim, jak gwiazda nad ziemią:
«Chcecie? Rozpacz wam wyśpiewam: płomieniste góry
rosną we mnie, burza wraża w ziemię kły wichury.
Chcecie? Błyskawicą chłostam, serca gryzę gromem,
w ręku piorun mam i rozpacz w oku nieruchomem,
a ta rozpacz w gniew urasta, a ten gniew jest burzą
przeciw tobie, której kształty czarno się marmurzą».
Już nie słowem, ale głosem w twardą korę nieba
tłukł Orfeusz, aż sypnęła ciężkich gwiazd ulewa…
Wtedy przerwał, bowiem uczuł, że mu głos uwięźnie
w niebie drżącym jeszcze…
Ale dąb milczał potężniej.
6. Porażka
«Eurydyko, porażka jest słodka.
Chwała tobie, któryś mnie zwyciężył!»
Mijał strumień. Trzcina wiała wiotka.
Las się kończył i zaczynał księżyc.
A te skały, co wyrosły ostre,
zdały mu się czułym zapewnieniem.
A tę noc obejmował jak siostrę,
nazywał najczulszym imieniem.
I przemierzał strunami śpiącemi
oddalenie nie objęte słowem,
i jak klucz do zamkniętych podziemi
niósł na wargach milczenie dębowe.
910 luty 1942

69
lab/01_materialy/b.txt Normal file
View File

@ -0,0 +1,69 @@
# tekst pochodzi z https://pl.wikipedia.org/wiki/UTF-8
UTF-8 (ang. 8-bit Unicode Transformation Format) system kodowania Unicode, wykorzystujący od 1 do 4 bajtów do zakodowania pojedynczego znaku, w pełni kompatybilny z ASCII. Jest najczęściej wykorzystywany do przechowywania napisów w plikach i komunikacji sieciowej.
Spis treści
1 Zalety i wady
1.1 Zalety
1.2 Wady
2 Sposób kodowania
3 Przykład
4 Zobacz też
5 Linki zewnętrzne
Zalety i wady
Zalety
Każdy tekst w ASCII jest tekstem w UTF-8.
Żaden znak spoza ASCII nie zawiera bajtu z ASCII.
Zachowuje porządek sortowania UCS-4.
Typowy tekst ISO-Latin-X rozrasta się w bardzo niewielkim stopniu po przekonwertowaniu do UTF-8.
Nie zawiera bajtów 0xFF i 0xFE, więc łatwo można go odróżnić od tekstu UTF-16.
Znaki o kodzie różnym od 0 nie zawierają bajtu 0, co pozwala stosować UTF-8 w ciągach zakończonych zerem.
O każdym bajcie wiadomo, czy jest początkiem znaku, czy też leży w jego środku, co nie jest dostępne np. w kodowaniu EUC.
Nie ma problemów z little endian vs big endian.
Jest domyślnym kodowaniem w XML (również w jego aplikacjach: XHTML, SVG, XSL, CML, MathML).
Wady
Znaki CJK zajmują po 3 bajty zamiast 2 w kodowaniach narodowych.
Znaki alfabetów niełacińskich zajmują po 2 bajty zamiast jednego w kodowaniach narodowych.
UTF-8 nie używa przesunięć zasięgów, co stanowi dodatkowe utrudnienie dla implementacji UTF-8 (szczegóły poniżej)
Sposób kodowania
Mapowanie znaków Unicode na ciągi bajtów:
0x00 do 0x7F bity 0xxxxxxx, gdzie kolejne „x” to bity licząc od najwyższego
0x80 do 0x7FF bity 110xxxxx 10xxxxxx
0x800 do 0xFFFF bity 1110xxxx 10xxxxxx 10xxxxxx
0x10000 do 0x1FFFFF bity 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x200000 do 0x3FFFFFF bity 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x4000000 do 0x7FFFFFFF bity 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Znaki z przedziału ASCII (0 do 127) kodowane są jako jeden bajt, czyli m.in. litery alfabetu łacińskiego. Polskie znaki diakrytyczne kodowane już są jako dwa bajty. W listopadzie 2003 roku kodowanie UTF-8 zostało ograniczone zgodnie z RFC 3629 ↓ do 0x10FFFF pozycji, w celu zapewnienia zgodności z ograniczeniami systemu UTF-16. Rezultatem było usunięcie wszystkich sekwencji złożonych z 5 i 6 bajtów oraz około połowy sekwencji 4-bajtowych. W ten sposób pozostało dokładnie 17 • 65536 - 2048, czyli 1 112 064 pozycji znaków możliwych do zakodowania w UTF-8. Pomniejszenie liczby kodów o 2048 wynika z zarezerwowania kodów z zakresu od U+D800 do U+DFFF dla kodowania UTF-16.
Teoretycznie w UTF-8 ten sam znak można zapisać na kilka sposobów. Przykładowo znak ASCII / (ukośnik) można zapisać jako:
00101111
11000000 10101111
11100000 10000000 10101111itd.
Stanowi to zagrożenie bezpieczeństwa m.in. dla serwerów, które sprawdzają obecność znaku / w ścieżkach. Z tego powodu standard UTF-8 przewiduje, że poprawny jest wyłącznie najkrótszy możliwy sposób zapisu, a każdy program musi odrzucać znaki zapisane dłuższymi sekwencjami niż minimalna.
Problemu tego można byłoby uniknąć, przy okazji skracając nieznacznie wielkość danych, jeśli wykorzystano by zasadę przesunięć typu:
sekwencje 1-bajtowe kodują 0x80 (128) różnych znaków od 0x00 do 0x7F
sekwencje 2-bajtowe kodują 0x800 (2048) różnych znaków od 0x80 do 0x87F
sekwencje 3-bajtowe kodują 0x10000 (65536) różnych znaków od 0x880 do 0x1087F
itd.
Przykład
Kodowanie na podstawie znaku euro €:
Znak € w Unicode ma oznaczenie U+20AC.
Zgodnie z informacjami w poprzednim podrozdziale taka wartość jest możliwa do zakodowania na 3 bajtach.
Liczba szesnastkowa 20AC to binarnie 0010 0000 1010 1100 po uzupełnieniu wiodącymi zerami do 16 bitów, ponieważ tyle bitów trzeba zakodować na 3 bajtach w UTF-8.
Kodowanie na trzech bajtach wymaga użycia w pierwszym bajcie trzech wiodących bitów ustawionych na 1, a czwartego na 0 (1110…).
Pozostałe bity pierwszego bajtu pochodzą z najstarszych czterech bitów kodowanej wartości w Unicode, co daje (1110 0010), a reszta bitów dzielona jest na dwa bloki po 6 bitów każdy (…0000 1010 1100).
Do tych bloków dodawane są wiodące bity 10, by tworzyły następujące 8-bitowe wartości 1000 0010 i 1010 1100).
W ten sposób rezultatem są trzy bajty w postaci 1110 0010 1000 0010 1010 1100, co w systemie szesnastkowych przyjmuje postać E2 82 AC.
Poniższa tabela pozwala zrozumieć sposób kodowana różnej długości numerów kodowych Unicode w UTF-8.
Unicode Unicode binarnie UTF-8 binarnie
1. bajt 2. bajt 3. bajt 4. bajt UTF-8 szesnastkowo
$ U+0024 0100100 00100100 24
¢ U+00A2 000 10100010 11000010 10100010 C2 A2
€ U+20AC 00100000 10101100 11100010 10000010 10101100 E2 82 AC
𐍈 U+10348 00001 00000011 01001000 11110000 10010000 10001101 10001000 F0 90 8D 88

View File

@ -0,0 +1 @@
zażółć gęślą jaźń

View File

@ -0,0 +1,15 @@
Charles Baudelaire
O pierwszej nad ranem
tłum. Stefan Napierski
Nareszcie! sam jeden! Słychać już tylko przetaczanie się kilku zapóźnionych i wymęczonych dorożek. Na niewiele godzin uzyskamy milczenie, jeśli nawet nie spokój. Nareszcie! znikła tyrania twarzy ludzkiej i cierpieć będę już tylko przez samego siebie.
Nareszcie! zezwolono mi zatem rozprostować się w kąpieli ciemności! Naprzód podwójne zawarcie drzwi. Wydaje mi się, że to przekręcenie klucza wzmoże samotność moją i wzmocni barykady, które oto dzielą mnie od świata.
Straszliwe życie! Straszliwe miasto! Streśćmy powtórnie dzień: widzenie garstki literatów, z których jeden zapytywał mnie, czy można udać sie do Rosji drogą lądową (najwidoczniej sądził, że Rosja jest wyspą); wielkoduszna dysputa z kierownikiem pewnego czasopisma, który na każdy argument odpowiadał: „Tutaj, to partia ludzi uczciwych”, co zakłada milcząco, że wszystkie inne dzienniki redagują szubrawcy; ukłon, oddany jakimś dwudziestu osobom, z których piętnaście jest mi nieznanych; rozdawanie uścisku dłoni w tej samej proporcji, i to zaniedbawszy przez nieostrożność zaopatrzenia się wprzód w rękawiczki; wdrapanie się, gwoli zabicia czasu, podczas ulewy, na pięterko do baletniczki, która prosiła mnie o narysowanie jej kostiumu do *Venus*; ubieganie się w sposób przypochlebny o jednego z dyrektorów teatru, który powiedział, żegnając się ze mną: „Kto wie, czy nie powinien pan zwrócić się do Z…; jest to najbardziej ociężały, najgłupszy i najgłośniejszy z wszystkich mych autorów; z nim, być może, zdoła pan co osiągnąć. Niech go pan odszuka, a potem się zobaczy”; przechwalanie się (po co?) kilkoma szkaradnymi czynami, których nie popełniłem, i tchórzliwe zaprzeczenie kilku innych występków, których dokonałem z radością, przestępstwo fanfaronady, zbrodnia na czci ludzkiej; odmówienie przyjacielowi łatwej przysługi i udzielenie poparcia na piśmie skończonemu łotrowi; uf! czyżby to wreszcie koniec?
Niezadowolony z siebie i niezadowolony z wszystkich, pragnąłbym siebie odkupić i odzyskać nieco dumy w milczeniu i samotności nocy. Dusze tych, których miłowałem, dusze tych, których opiewałem, skrzepcie mnie, podtrzymajcie, oddalcie ode mnie kłamstwo i zatruwające wyziewy świata; i ty, Panie mój i Boże! użycz mi łaski zestawienia kilku pięknych wierszy, które by udowodniły mi, że nie jestem ostatnim z ludzi, że gorszy nie jestem od tych, którymi gardzę.