This commit is contained in:
Jakub Pokrywka 2022-02-27 20:42:21 +01:00
commit ca199d89b3
6 changed files with 5512 additions and 0 deletions

View File

@ -0,0 +1,109 @@
{
"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> Ekstrakcja informacji </h1>\n",
"<h2> 0. <i>Informacje na temat przedmiotu</i> [ćwiczenia]</h2> \n",
"<h3> Jakub Pokrywka (2022)</h3>\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: mgr inż. Jakub Pokrywka\n",
"\n",
"Najlepiej kontaktowąć się ze mną przez MS TEAMS prywatnych wiadomościach lub mailowo jp40407@st.amu.edu.pl. Odpisuję co 2-3 dni. Można też umówić się stacjonarnie, na zdzwonko w godzinach dyżuru (wt 12.00-13.00) lub umówić się w innym terminie.\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",
"\n",
"**Żeby zaliczyć przedmiot należy pojawiać się na laboratoriach. Maksymalna liczba nieobecności to 3. Obecność będę sprawdzał co zajęcia. Jeżeli kogoś nie będzie więcej niż 3 razy, to nie będzie miał zaliczonego przedmiotu** \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"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
}

779
01_Kodowanie_tekstu.ipynb Normal file

File diff suppressed because one or more lines are too long

70
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
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

File diff suppressed because it is too large Load Diff

View File

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