Lab 1
This commit is contained in:
parent
8134e2a8da
commit
21fa178802
71
README.md
71
README.md
@ -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.
|
||||
|
104
lab/00_Informacje_na_temat_przedmiotu.ipynb
Normal file
104
lab/00_Informacje_na_temat_przedmiotu.ipynb
Normal 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
|
||||
}
|
763
lab/01_Kodowanie_tekstu.ipynb
Normal file
763
lab/01_Kodowanie_tekstu.ipynb
Normal file
File diff suppressed because one or more lines are too long
70
lab/01_materialy/a.txt
Normal file
70
lab/01_materialy/a.txt
Normal 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.
|
||||
|
||||
9–10 luty 1942
|
69
lab/01_materialy/b.txt
Normal file
69
lab/01_materialy/b.txt
Normal 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
|
1
lab/01_materialy/polski_tekst.txt
Normal file
1
lab/01_materialy/polski_tekst.txt
Normal file
@ -0,0 +1 @@
|
||||
zażółć gęślą jaźń
|
15
lab/01_materialy/polski_tekst_2.txt
Normal file
15
lab/01_materialy/polski_tekst_2.txt
Normal 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ę.
|
||||
|
Loading…
Reference in New Issue
Block a user