forked from filipg/aitech-eks-pub
Add metadata
This commit is contained in:
parent
9a61b2c06c
commit
fedffd5456
@ -3,7 +3,7 @@
|
||||
#procedura napisywania plików ipynb (generowanie nagłówka i metadanych)
|
||||
import json
|
||||
import sys
|
||||
|
||||
import re
|
||||
|
||||
def modjup(filen,numer,tytul,typ,author,email,lang,title,year):
|
||||
zerocell=['![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n',
|
||||
@ -35,7 +35,7 @@ def modjup(filen,numer,tytul,typ,author,email,lang,title,year):
|
||||
#zmodyfikuj te dane
|
||||
filen=sys.argv[1]
|
||||
|
||||
numer="2"
|
||||
numer=re.match(r'^(?:\D+/)?0*(\d+)', filen).group(1)
|
||||
tytul=sys.argv[2]
|
||||
typ="wykład"
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,22 +1,38 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"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> 5. <i>G\u0119ste reprezentacje wektorowe</i> [wyk\u0142ad]</h2> \n",
|
||||
"<h3> Filip Grali\u0144ski (2021)</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": [
|
||||
"# Zagęszczamy wektory\n",
|
||||
"# Zag\u0119szczamy wektory\n",
|
||||
"\n",
|
||||
"Podstawowy problem z wektorową reprezentacją typu tf-idf polega na tym, że wektory dokumentów (i macierz całej kolekcji dokumentów) są _rzadkie_, tzn. zawierają dużo zer. W praktyce potrzebujemy bardziej \"gęstej\" czy \"kompaktowej\" reprezentacji numerycznej dokumentów. \n",
|
||||
"Podstawowy problem z wektorow\u0105 reprezentacj\u0105 typu tf-idf polega na tym, \u017ce wektory dokument\u00f3w (i macierz ca\u0142ej kolekcji dokument\u00f3w) s\u0105 _rzadkie_, tzn. zawieraj\u0105 du\u017co zer. W praktyce potrzebujemy bardziej \"g\u0119stej\" czy \"kompaktowej\" reprezentacji numerycznej dokument\u00f3w. \n",
|
||||
"\n",
|
||||
"## _Hashing trick_\n",
|
||||
"\n",
|
||||
"Powierzchownie problem możemy rozwiązać przez użycie tzw. _sztuczki z haszowaniem_ (_hashing trick_). Będziemy potrzebować funkcji mieszającej (haszującej) $H$, która rzutuje napisy na liczby, których reprezentacja binarna składa się z $b$ bitów:\n",
|
||||
"Powierzchownie problem mo\u017cemy rozwi\u0105za\u0107 przez u\u017cycie tzw. _sztuczki z haszowaniem_ (_hashing trick_). B\u0119dziemy potrzebowa\u0107 funkcji mieszaj\u0105cej (haszuj\u0105cej) $H$, kt\u00f3ra rzutuje napisy na liczby, kt\u00f3rych reprezentacja binarna sk\u0142ada si\u0119 z $b$ bit\u00f3w:\n",
|
||||
"\n",
|
||||
"$$H : \\Sigma^{*} \\rightarrow \\{0,\\dots,2^b-1\\}$$\n",
|
||||
"\n",
|
||||
"($\\Sigma^{*}$ to zbiór wszystkich napisów.)\n",
|
||||
"($\\Sigma^{*}$ to zbi\u00f3r wszystkich napis\u00f3w.)\n",
|
||||
"\n",
|
||||
"**Pytanie:** Czy funkcja $H$ może być różnowartościowa?\n",
|
||||
"**Pytanie:** Czy funkcja $H$ mo\u017ce by\u0107 r\u00f3\u017cnowarto\u015bciowa?\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -24,7 +40,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jako funkcji $H$ możemy np. użyć funkcji MurmurHash2 lub 3."
|
||||
"Jako funkcji $H$ mo\u017cemy np. u\u017cy\u0107 funkcji MurmurHash2 lub 3."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -122,14 +138,14 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Pytanie:** podobne napisy mają zupełnie różne wartości funkcji haszującej, czy to dobrze, czy to źle?"
|
||||
"**Pytanie:** podobne napisy maj\u0105 zupe\u0142nie r\u00f3\u017cne warto\u015bci funkcji haszuj\u0105cej, czy to dobrze, czy to \u017ale?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Musimy tylko sparametryzować naszą funkcję rozmiarem \"odcisku\" (parametr $b$)."
|
||||
"Musimy tylko sparametryzowa\u0107 nasz\u0105 funkcj\u0119 rozmiarem \"odcisku\" (parametr $b$)."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -188,12 +204,12 @@
|
||||
"\n",
|
||||
"import Data.Text\n",
|
||||
"\n",
|
||||
"-- pomocnicza funkcja, która konwertuje wartość specjalnego\n",
|
||||
"-- typu Hash64 do zwykłej liczby całkowitej\n",
|
||||
"-- pomocnicza funkcja, kt\u00f3ra konwertuje warto\u015b\u0107 specjalnego\n",
|
||||
"-- typu Hash64 do zwyk\u0142ej liczby ca\u0142kowitej\n",
|
||||
"hashValueAsInteger :: Hash64 -> Integer\n",
|
||||
"hashValueAsInteger = toInteger . asWord64\n",
|
||||
"\n",
|
||||
"-- unpack to funkcja, która wartość typu String konwertuje do Text\n",
|
||||
"-- unpack to funkcja, kt\u00f3ra warto\u015b\u0107 typu String konwertuje do Text\n",
|
||||
"hash :: Integer -> Text -> Integer\n",
|
||||
"hash b t = hashValueAsInteger (hash64 $ unpack t) `mod` (2 ^ b)\n",
|
||||
"\n",
|
||||
@ -208,21 +224,21 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Pytanie:** Jakie wartości $b$ będą bezsensowne?"
|
||||
"**Pytanie:** Jakie warto\u015bci $b$ b\u0119d\u0105 bezsensowne?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Sztuczka z haszowaniem polega na tym, że zamiast numerować słowa korzystając ze słownika, po prostu używamy funkcji haszującej. W ten sposób wektor będzie _zawsze_ rozmiar $2^b$ - bez względu na rozmiar słownika."
|
||||
"Sztuczka z haszowaniem polega na tym, \u017ce zamiast numerowa\u0107 s\u0142owa korzystaj\u0105c ze s\u0142ownika, po prostu u\u017cywamy funkcji haszuj\u0105cej. W ten spos\u00f3b wektor b\u0119dzie _zawsze_ rozmiar $2^b$ - bez wzgl\u0119du na rozmiar s\u0142ownika."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zacznijmy od przywołania wszystkich potrzebnych definicji."
|
||||
"Zacznijmy od przywo\u0142ania wszystkich potrzebnych definicji."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -240,8 +256,8 @@
|
||||
"isStopWord :: Text -> Bool\n",
|
||||
"isStopWord \"w\" = True\n",
|
||||
"isStopWord \"jest\" = True\n",
|
||||
"isStopWord \"że\" = True\n",
|
||||
"isStopWord w = w ≈ [re|^\\p{P}+$|]\n",
|
||||
"isStopWord \"\u017ce\" = True\n",
|
||||
"isStopWord w = w \u2248 [re|^\\p{P}+$|]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"removeStopWords :: [Text] -> [Text]\n",
|
||||
@ -272,10 +288,10 @@
|
||||
"mockInflectionDictionary = Map.fromList [\n",
|
||||
" (\"kota\", \"kot\"),\n",
|
||||
" (\"butach\", \"but\"),\n",
|
||||
" (\"masz\", \"mieć\"),\n",
|
||||
" (\"ma\", \"mieć\"),\n",
|
||||
" (\"masz\", \"mie\u0107\"),\n",
|
||||
" (\"ma\", \"mie\u0107\"),\n",
|
||||
" (\"buta\", \"but\"),\n",
|
||||
" (\"zgubiłem\", \"zgubić\")]\n",
|
||||
" (\"zgubi\u0142em\", \"zgubi\u0107\")]\n",
|
||||
"\n",
|
||||
"lemmatizeWord :: Map Text Text -> Text -> Text\n",
|
||||
"lemmatizeWord dict w = findWithDefault w w dict\n",
|
||||
@ -507,10 +523,10 @@
|
||||
" where n = vectorNorm vs\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"(✕) :: [Double] -> [Double] -> Double\n",
|
||||
"(✕) v1 v2 = sum $ Prelude.zipWith (*) v1 v2\n",
|
||||
"(\u2715) :: [Double] -> [Double] -> Double\n",
|
||||
"(\u2715) v1 v2 = sum $ Prelude.zipWith (*) v1 v2\n",
|
||||
"\n",
|
||||
"cosineSim v1 v2 = toUnitVector v1 ✕ toUnitVector v2\n",
|
||||
"cosineSim v1 v2 = toUnitVector v1 \u2715 toUnitVector v2\n",
|
||||
"\n",
|
||||
"paintMatrix cosineSim labelsLimited limitedL"
|
||||
]
|
||||
@ -519,9 +535,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Powyższa macierz reprezentuje porównanie przy użyciu podobieństwa kosinusowego. Spróbujmy teraz użyć gęstszych wektorów przy użyciu hashing trick. Jako wartość $b$ przyjmijmy 6.\n",
|
||||
"Powy\u017csza macierz reprezentuje por\u00f3wnanie przy u\u017cyciu podobie\u0144stwa kosinusowego. Spr\u00f3bujmy teraz u\u017cy\u0107 g\u0119stszych wektor\u00f3w przy u\u017cyciu hashing trick. Jako warto\u015b\u0107 $b$ przyjmijmy 6.\n",
|
||||
"\n",
|
||||
"Zobaczmy najpierw, w które \"przegródki\" będą wpadały poszczególne wyrazy słownika.\n",
|
||||
"Zobaczmy najpierw, w kt\u00f3re \"przegr\u00f3dki\" b\u0119d\u0105 wpada\u0142y poszczeg\u00f3lne wyrazy s\u0142ownika.\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
@ -549,18 +565,18 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Pytanie:** Czy jakieś dwa termy wpadły do jednej przegródki?"
|
||||
"**Pytanie:** Czy jakie\u015b dwa termy wpad\u0142y do jednej przegr\u00f3dki?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Stwórzmy najpierw funkcję, która będzie wektoryzowała pojedynczy term $t$. Po prostu stworzymy wektor, które będzie miał rozmiar $2^b$, wszędzie będzie miał 0 z wyjątkiem pozycji o numerze $H_b(t)$ - tam wpiszmy odwrotną częstość dokumentową.\n",
|
||||
"Stw\u00f3rzmy najpierw funkcj\u0119, kt\u00f3ra b\u0119dzie wektoryzowa\u0142a pojedynczy term $t$. Po prostu stworzymy wektor, kt\u00f3re b\u0119dzie mia\u0142 rozmiar $2^b$, wsz\u0119dzie b\u0119dzie mia\u0142 0 z wyj\u0105tkiem pozycji o numerze $H_b(t)$ - tam wpiszmy odwrotn\u0105 cz\u0119sto\u015b\u0107 dokumentow\u0105.\n",
|
||||
"\n",
|
||||
"$$\\vec{t} = [0,\\dots,\\idf_c t,\\dots,0]$$\n",
|
||||
"\n",
|
||||
"Teraz dla dokumentu $d = (t_1,\\dots,t_n)$ i dla schematu ważenia tf-idf:\n",
|
||||
"Teraz dla dokumentu $d = (t_1,\\dots,t_n)$ i dla schematu wa\u017cenia tf-idf:\n",
|
||||
"\n",
|
||||
"$$\\vec{d} = \\sum \\vec{t_i}$$"
|
||||
]
|
||||
@ -616,7 +632,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Teraz wystarczy zsumować wektory dla poszczególnych słów, żeby otrzymać wektor dokumentu. Najpierw zdefiniujmy sobie sumę wektorową."
|
||||
"Teraz wystarczy zsumowa\u0107 wektory dla poszczeg\u00f3lnych s\u0142\u00f3w, \u017ceby otrzyma\u0107 wektor dokumentu. Najpierw zdefiniujmy sobie sum\u0119 wektorow\u0105."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -645,7 +661,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Przydatna będzie jeszcze funkcja, która tworzy wektor z samymi zerami o zadanej długości:"
|
||||
"Przydatna b\u0119dzie jeszcze funkcja, kt\u00f3ra tworzy wektor z samymi zerami o zadanej d\u0142ugo\u015bci:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -838,7 +854,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zobaczmy, jak zagęszczenie wpływa na macierz podobieństwa."
|
||||
"Zobaczmy, jak zag\u0119szczenie wp\u0142ywa na macierz podobie\u0144stwa."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -880,19 +896,19 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Pytanie:** Co się stanie, gdy zwiększymy $b$, a co jeśli zmniejszymi?\n",
|
||||
"**Pytanie:** Co si\u0119 stanie, gdy zwi\u0119kszymy $b$, a co je\u015bli zmniejszymi?\n",
|
||||
"\n",
|
||||
"Zalety sztuczki z haszowaniem:\n",
|
||||
"\n",
|
||||
"* zagwarantowany stały rozmiar wektora\n",
|
||||
"* zagwarantowany sta\u0142y rozmiar wektora\n",
|
||||
"* szybsze obliczenia\n",
|
||||
"* w naturalny sposób uwzględniamy termy, których nie było w początkowej kolekcji (ale uwaga na idf!)\n",
|
||||
"* nie musimy pamiętać odzworowania rzutującego słowa na ich numery\n",
|
||||
"* w naturalny spos\u00f3b uwzgl\u0119dniamy termy, kt\u00f3rych nie by\u0142o w pocz\u0105tkowej kolekcji (ale uwaga na idf!)\n",
|
||||
"* nie musimy pami\u0119ta\u0107 odzworowania rzutuj\u0105cego s\u0142owa na ich numery\n",
|
||||
"\n",
|
||||
"Wady:\n",
|
||||
"\n",
|
||||
"* dwa różne słowa mogą wpaść do jednej przegródki (szczególnie częste, jeśli $b$ jest za małe)\n",
|
||||
"* jeśli $b$ ustawimy za duże, wektory mogą być nawet większe niż w przypadku standardowego podejścia\n",
|
||||
"* dwa r\u00f3\u017cne s\u0142owa mog\u0105 wpa\u015b\u0107 do jednej przegr\u00f3dki (szczeg\u00f3lnie cz\u0119ste, je\u015bli $b$ jest za ma\u0142e)\n",
|
||||
"* je\u015bli $b$ ustawimy za du\u017ce, wektory mog\u0105 by\u0107 nawet wi\u0119ksze ni\u017c w przypadku standardowego podej\u015bcia\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
@ -905,11 +921,11 @@
|
||||
"source": [
|
||||
"## Word2vec\n",
|
||||
"\n",
|
||||
"A może istnieje dobra wróżka, która dałaby nam dobre wektory słów (z których będziemy składali proste wektory dokumentów przez sumowanie)?\n",
|
||||
"A mo\u017ce istnieje dobra wr\u00f3\u017cka, kt\u00f3ra da\u0142aby nam dobre wektory s\u0142\u00f3w (z kt\u00f3rych b\u0119dziemy sk\u0142adali proste wektory dokument\u00f3w przez sumowanie)?\n",
|
||||
"\n",
|
||||
"**Pytanie:** Jakie własności powinny mieć dobre wektory słów?\n",
|
||||
"**Pytanie:** Jakie w\u0142asno\u015bci powinny mie\u0107 dobre wektory s\u0142\u00f3w?\n",
|
||||
"\n",
|
||||
"Tak! Istnieją gotowe \"bazy danych\" wektorów. Jedną z najpopularniejszych (i najstarszych) metod uzyskiwania takich wektorów jest Word2vec. Jak dokładnie Word2vec, dowiemy się później, na dzisiaj po prostu użyjmy tych wektorów.\n",
|
||||
"Tak! Istniej\u0105 gotowe \"bazy danych\" wektor\u00f3w. Jedn\u0105 z najpopularniejszych (i najstarszych) metod uzyskiwania takich wektor\u00f3w jest Word2vec. Jak dok\u0142adnie Word2vec, dowiemy si\u0119 p\u00f3\u017aniej, na dzisiaj po prostu u\u017cyjmy tych wektor\u00f3w.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
@ -927,7 +943,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Najpierw wprowadźmy alternatywną normalizację zgodną z tym, jak został wygenerowany model."
|
||||
"Najpierw wprowad\u017amy alternatywn\u0105 normalizacj\u0119 zgodn\u0105 z tym, jak zosta\u0142 wygenerowany model."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -1315,7 +1331,7 @@
|
||||
"toOurVector :: WVector -> [Double]\n",
|
||||
"toOurVector (WVector v _) = map realToFrac $ V.toList v\n",
|
||||
"\n",
|
||||
"balwanV = toOurVector $ fromJust $ getVector model \"bałwan\"\n",
|
||||
"balwanV = toOurVector $ fromJust $ getVector model \"ba\u0142wan\"\n",
|
||||
"balwanV\n",
|
||||
"Prelude.length balwanV\n",
|
||||
"\n",
|
||||
@ -1381,7 +1397,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Możemy próbować mnożyć wektory z modelu Word2vec z idf. Najpierw zdefiniujmy mnożenie przez skalar."
|
||||
"Mo\u017cemy pr\u00f3bowa\u0107 mno\u017cy\u0107 wektory z modelu Word2vec z idf. Najpierw zdefiniujmy mno\u017cenie przez skalar."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -1410,7 +1426,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Teraz będziemy przemnażali wektory Word2vec przez idf (jako skalar)."
|
||||
"Teraz b\u0119dziemy przemna\u017cali wektory Word2vec przez idf (jako skalar)."
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -1616,7 +1632,13 @@
|
||||
"name": "haskell",
|
||||
"pygments_lexer": "Haskell",
|
||||
"version": "8.10.4"
|
||||
}
|
||||
},
|
||||
"author": "Filip Grali\u0144ski",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"lang": "pl",
|
||||
"subtitle": "5.G\u0119ste reprezentacje wektorowe[wyk\u0142ad]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
|
@ -1,5 +1,19 @@
|
||||
{
|
||||
"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> 6. <i>Wyzwania uczenia maszynowego</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</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": {},
|
||||
@ -367,11 +381,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -382,8 +399,11 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"subtitle": "6.Wyzwania uczenia maszynowego[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
|
@ -1,5 +1,20 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "45264aad",
|
||||
"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> 7. <i>Naiwny klasyfikator bayesowski w ekstrakcji informacji</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</h3>\n",
|
||||
"</div>\n",
|
||||
"\n",
|
||||
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "moderate-array",
|
||||
@ -347,11 +362,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -362,8 +380,11 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"subtitle": "7.Naiwny klasyfikator bayesowski w ekstrakcji informacji[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
|
@ -1,5 +1,20 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "35c19016",
|
||||
"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> 8. <i>Regresja liniowa</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</h3>\n",
|
||||
"</div>\n",
|
||||
"\n",
|
||||
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "cathedral-newark",
|
||||
@ -141,6 +156,8 @@
|
||||
"\n",
|
||||
"![Morskie Oko - Krzysztof Dudzik](08_files/morskieoko.jpg)\n",
|
||||
"\n",
|
||||
"(Źródło: https://pl.wikipedia.org/wiki/Morskie_Oko#/media/Plik:Morskie_Oko_ze_szlaku_przez_%C5%9Awist%C3%B3wk%C4%99.jpg, licencja CC BY 3.0)\n",
|
||||
"\n",
|
||||
"Schodź wzdłuż lokalnego spadku funkcji błędu.\n",
|
||||
"\n",
|
||||
"Tak więc w praktyce zamiast podstawiać do wzoru lepiej się uczyć iteracyjnie -\n",
|
||||
@ -279,11 +296,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -294,8 +314,11 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"subtitle": "8.Regresja liniowa[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
|
@ -1,5 +1,19 @@
|
||||
{
|
||||
"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> 9. <i>Przegląd składowych sieci neuronowych</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</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": {},
|
||||
@ -1463,13 +1477,7 @@
|
||||
"1.938151240348816 1.998972773551941 950 4 tensor([[0.1241, 0.1263, 0.1215, 0.1199, 0.1355, 0.1184, 0.1261, 0.1283]],\n",
|
||||
" grad_fn=<ExpBackward>) Andrzej Kostyra stworzył \"idealnego polskiego boksera\". Jest dużo cech Tomasza Adamka Andrzej Kostyra, ekspert bokserski, stworzył model \"idealnego polskiego pięściarza\". Wymienił najlepsze cechy poszczególnych bokserów. Najwięcej jest Tomasza Adamka.\n",
|
||||
"1.928910732269287 1.9361062049865723 1000 1 tensor([[0.1222, 0.1443, 0.1320, 0.1216, 0.1117, 0.1137, 0.1200, 0.1346]],\n",
|
||||
" grad_fn=<ExpBackward>) Rajd Niemiec: Andreas Mikkelsen i Jari-Matti Latvala najszybsi na shakedown W czwartek kierowcy mieli do pokonania odcinek testowy przed Rajdem Niemiec. Na mecie okazało się, że Andreas Mikkelsen i Jari-Matti Latvala uzyskali identyczny czas.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" grad_fn=<ExpBackward>) Rajd Niemiec: Andreas Mikkelsen i Jari-Matti Latvala najszybsi na shakedown W czwartek kierowcy mieli do pokonania odcinek testowy przed Rajdem Niemiec. Na mecie okazało się, że Andreas Mikkelsen i Jari-Matti Latvala uzyskali identyczny czas.\n",
|
||||
"1.9247257709503174 1.9077305793762207 1050 4 tensor([[0.1264, 0.1246, 0.1286, 0.1161, 0.1484, 0.1108, 0.1174, 0.1276]],\n",
|
||||
" grad_fn=<ExpBackward>) Była rywalka Joanny Jędrzejczyk na dopingu. Czeka ją zawieszenie Była pretendenta to tytułu mistrzyni UFC w wadze słomkowej, Jessica Penne (MMA 12-5) została zawieszona przez Amerykańską Agencję Antydopingową za stosowanie niedozwolonego środka. Amerykankę czeka 1,5-roczne zawieszenie.\n",
|
||||
"1.9094451665878296 1.8653218746185303 1100 2 tensor([[0.1117, 0.1150, 0.1548, 0.1148, 0.1137, 0.1239, 0.1094, 0.1566]],\n",
|
||||
@ -1511,13 +1519,7 @@
|
||||
"1.7356246709823608 1.938697099685669 2000 6 tensor([[0.1114, 0.0960, 0.1303, 0.1193, 0.1003, 0.1257, 0.1439, 0.1731]],\n",
|
||||
" grad_fn=<ExpBackward>) KMŚ 2017: ZAKSA - Sarmayeh Bank Teheran na żywo. Gdzie oglądać transmisję TV i online? We wtorek, ZAKSA Kędzierzyn-Koźle zmierzy się z Sarmayeh Bank Teheran w ramach Klubowych Mistrzostw Świata w siatkówce. Transmisja TV na antenie Polsat Sport. Stream online w Ipla TV. Relacja LIVE w WP SportoweFakty za darmo.\n",
|
||||
"1.7901594638824463 1.9917528629302979 2050 1 tensor([[0.1212, 0.1365, 0.1351, 0.1287, 0.1104, 0.1252, 0.1179, 0.1250]],\n",
|
||||
" grad_fn=<ExpBackward>) Wakacyjny freestyle Przygońskiego i Pawlusiaka na pustyni Pędzące po wydmach dakarowe MINI, specjalnie dostosowany snowboard, lina i dwóch utalentowanych sportowców - tak w skrócie można opisać projekt \"Przygoński & Pawlusiak Dune Freestyle\".\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" grad_fn=<ExpBackward>) Wakacyjny freestyle Przygońskiego i Pawlusiaka na pustyni Pędzące po wydmach dakarowe MINI, specjalnie dostosowany snowboard, lina i dwóch utalentowanych sportowców - tak w skrócie można opisać projekt \"Przygoński & Pawlusiak Dune Freestyle\".\n",
|
||||
"1.7326788902282715 1.8687950372695923 2100 5 tensor([[0.1091, 0.1428, 0.1050, 0.1267, 0.1092, 0.1543, 0.1100, 0.1429]],\n",
|
||||
" grad_fn=<ExpBackward>) Martynas Sajus: Sobin jest bardziej doświadczonym graczem, ale w przyszłości będę od niego lepszy Pojedynek Josipa Sobina z Martynasem Sajusem może być jednym ze smaczków piątkowego spotkania Anwilu z Polpharmą. Który ze środkowych da więcej swojej ekipie? - On jest bardziej doświadczony, ale w przyszłości to ja będę lepszy - śmieje się Sajus.\n",
|
||||
"1.7521668672561646 1.5104379653930664 2150 2 tensor([[0.0978, 0.1259, 0.2208, 0.1105, 0.1043, 0.1174, 0.1048, 0.1186]],\n",
|
||||
@ -1557,13 +1559,7 @@
|
||||
"1.6379656791687012 1.4863052368164062 3000 3 tensor([[0.0881, 0.0816, 0.1089, 0.2262, 0.0698, 0.1202, 0.1658, 0.1394]],\n",
|
||||
" grad_fn=<ExpBackward>) Liga Mistrzów: Paris Saint-Germain HB kolejnym uczestnikiem Final Four Paris Saint-Germain HB zremisował z MOL-Pickiem Szeged 30:30 w rewanżowym meczu ćwierćfinałowym Ligi Mistrzów 2016/2017, tym samym zdobywając awans do turnieju finałowego w Kolonii.\n",
|
||||
"1.620102047920227 1.955077886581421 3050 5 tensor([[0.0998, 0.1599, 0.1024, 0.1031, 0.1239, 0.1416, 0.1172, 0.1520]],\n",
|
||||
" grad_fn=<ExpBackward>) Chewbacca ma nową twarz. Jak koszykarz z Finlandii trafił do \"Gwiezdnych Wojen\" Zbliżający się weekend będzie tym, w którym miliony fanów \"Gwiezdnych Wojen\" zaczną szturmować kina, by obejrzeć 8. część sagi. Wielu z nich nie wie, że za maską Chewbakki od niedawna skrywa się nowa twarz - fińskiego koszykarza, Joonasa Suotamo.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" grad_fn=<ExpBackward>) Chewbacca ma nową twarz. Jak koszykarz z Finlandii trafił do \"Gwiezdnych Wojen\" Zbliżający się weekend będzie tym, w którym miliony fanów \"Gwiezdnych Wojen\" zaczną szturmować kina, by obejrzeć 8. część sagi. Wielu z nich nie wie, że za maską Chewbakki od niedawna skrywa się nowa twarz - fińskiego koszykarza, Joonasa Suotamo.\n",
|
||||
"1.6508986949920654 1.7872048616409302 3100 7 tensor([[0.1113, 0.1329, 0.0890, 0.1126, 0.1327, 0.1295, 0.1246, 0.1674]],\n",
|
||||
" grad_fn=<ExpBackward>) Ireneusz Mamrot liczy na przełamanie. \"Jest sportowa złość, która musi się przełożyć na naszą korzyść\" - Nie ma zdenerwowania, ale jest duża sportowa złość. To musi się przełożyć na naszą korzyść - mówi przed sobotnim pojedynkiem z Koroną Kielce trener Jagiellonii Białystok, Ireneusz Mamrot. - Nie można wiecznie mieć gorszego okresu - dodaje.\n",
|
||||
"1.5091105699539185 1.5536433458328247 3150 2 tensor([[0.1030, 0.1194, 0.2115, 0.1183, 0.1021, 0.1098, 0.1085, 0.1274]],\n",
|
||||
@ -1603,13 +1599,7 @@
|
||||
"1.4597876071929932 1.3940199613571167 4000 7 tensor([[0.0933, 0.1557, 0.0803, 0.0930, 0.1256, 0.1070, 0.0970, 0.2481]],\n",
|
||||
" grad_fn=<ExpBackward>) Grzegorz Krychowiak na zakręcie. Mundial to ostatnia szansa Grzegorz Krychowiak znowu jest na zakręcie i musi szukać nowego klubu. Paris-Saint Germain chce się pozbyć Polaka na dobre. Mundial w Rosji to dla mistrzów Francji ostatnia szansa, żeby sprzedać go za godne pieniądze.\n",
|
||||
"1.4579588174819946 1.5661852359771729 4050 6 tensor([[0.0991, 0.1113, 0.0903, 0.1400, 0.0902, 0.1380, 0.2088, 0.1223]],\n",
|
||||
" grad_fn=<ExpBackward>) ZAKSA Kędzierzyn-Koźle trenuje już niemal w komplecie Na początku tygodnia do kędzierzyńskiej drużyny dołączyli zawodnicy, którzy brali udział w mistrzostwach Europy. Wyjątkiem jest francuski rozgrywający Benjamin Toniutti.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" grad_fn=<ExpBackward>) ZAKSA Kędzierzyn-Koźle trenuje już niemal w komplecie Na początku tygodnia do kędzierzyńskiej drużyny dołączyli zawodnicy, którzy brali udział w mistrzostwach Europy. Wyjątkiem jest francuski rozgrywający Benjamin Toniutti.\n",
|
||||
"1.524263858795166 1.2569677829742432 4100 1 tensor([[0.0736, 0.2845, 0.0688, 0.0741, 0.1107, 0.1046, 0.1125, 0.1710]],\n",
|
||||
" grad_fn=<ExpBackward>) Krzysztof Hołowczyc trzyma kciuki za Kubicę. \"Ci, którzy nie chcą jego powrotu, po prostu się go boją\" Trwa walka Roberta Kubicy o powrót do Formuły 1. Polak jest jednym z kandydatów do reprezentowania w przyszłym sezonie barw zespołu Williams. Za Kubicę kciuki trzyma Krzysztof Hołowczyc.\n",
|
||||
"1.4493881464004517 1.4371377229690552 4150 1 tensor([[0.1067, 0.2376, 0.1001, 0.0918, 0.1164, 0.1187, 0.1077, 0.1211]],\n",
|
||||
@ -2226,11 +2216,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -2241,10 +2234,13 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"subtitle": "9.Przegląd składowych sieci neuronowych[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
@ -1,5 +1,19 @@
|
||||
{
|
||||
"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> 11. <i>Sieci rekurencyjne</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</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": {},
|
||||
@ -498,11 +512,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -513,9 +530,12 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"subtitle": "11.Sieci rekurencyjne[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
|
310
wyk/12_bpe.ipynb
310
wyk/12_bpe.ipynb
@ -1,10 +1,26 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"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> 12. <i>Kodowanie BPE</i> [wyk\u0142ad]</h2> \n",
|
||||
"<h3> Filip Grali\u0144ski (2021)</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": [
|
||||
"## Podział na jednostki podwyrazowe\n",
|
||||
"## Podzia\u0142 na jednostki podwyrazowe\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -12,7 +28,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Słownik nie może być za duży…\n",
|
||||
"### S\u0142ownik nie mo\u017ce by\u0107 za du\u017cy\u2026\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -20,14 +36,14 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jeśli używamy wyuczalnych zanurzeń słów (embeddingów), wówczas musimy\n",
|
||||
"je dopisać do listy parametrów całego modelu — jest to $|V|n$ wag,\n",
|
||||
"gdzie $n$ to rozmiar embeddingów; w wypadku uczenia dodatkowo musimy\n",
|
||||
"jeszcze pamiętać związane z embeddingami gradienty. Pamięć RAM karty\n",
|
||||
"graficznej jest rzecz jasna ograniczona, słownik więc nie może być\n",
|
||||
"dowolnie duży. Dla danego modelu karty graficznej dość łatwo ustalić\n",
|
||||
"maksymalny rozmiar słownika — jest „twarde” ograniczenie, które musimy\n",
|
||||
"spełnić.\n",
|
||||
"Je\u015bli u\u017cywamy wyuczalnych zanurze\u0144 s\u0142\u00f3w (embedding\u00f3w), w\u00f3wczas musimy\n",
|
||||
"je dopisa\u0107 do listy parametr\u00f3w ca\u0142ego modelu \u2014 jest to $|V|n$ wag,\n",
|
||||
"gdzie $n$ to rozmiar embedding\u00f3w; w wypadku uczenia dodatkowo musimy\n",
|
||||
"jeszcze pami\u0119ta\u0107 zwi\u0105zane z embeddingami gradienty. Pami\u0119\u0107 RAM karty\n",
|
||||
"graficznej jest rzecz jasna ograniczona, s\u0142ownik wi\u0119c nie mo\u017ce by\u0107\n",
|
||||
"dowolnie du\u017cy. Dla danego modelu karty graficznej do\u015b\u0107 \u0142atwo ustali\u0107\n",
|
||||
"maksymalny rozmiar s\u0142ownika \u2014 jest \u201etwarde\u201d ograniczenie, kt\u00f3re musimy\n",
|
||||
"spe\u0142ni\u0107.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -35,7 +51,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### Czy rzeczywiście słownik może być taki duży?\n",
|
||||
"#### Czy rzeczywi\u015bcie s\u0142ownik mo\u017ce by\u0107 taki du\u017cy?\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -43,7 +59,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ile jest różnych form fleksyjnych w języku polskim? Zobaczmy w słowniku PoliMorf…\n",
|
||||
"Ile jest r\u00f3\u017cnych form fleksyjnych w j\u0119zyku polskim? Zobaczmy w s\u0142owniku PoliMorf\u2026\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -71,12 +87,12 @@
|
||||
"Aaru\n",
|
||||
"Aarze\n",
|
||||
"Aara\n",
|
||||
"Aarą\n",
|
||||
"Aarę\n",
|
||||
"Aar\u0105\n",
|
||||
"Aar\u0119\n",
|
||||
"Aaro\n",
|
||||
"Aary\n",
|
||||
"Aarze\n",
|
||||
"uniq: błąd zapisu: Przerwany potok\n"
|
||||
"uniq: b\u0142\u0105d zapisu: Przerwany potok\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@ -105,13 +121,13 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**Pytanie** W którym języku europejskim wyrazów będzie jeszcze więcej niż języku polskim?\n",
|
||||
"**Pytanie** W kt\u00f3rym j\u0119zyku europejskim wyraz\u00f3w b\u0119dzie jeszcze wi\u0119cej ni\u017c j\u0119zyku polskim?\n",
|
||||
"\n",
|
||||
"Tak naprawdę form jest jeszcze więcej, oczywiście PoliMorf nie wyczerpuje zbioru…\n",
|
||||
"Tak naprawd\u0119 form jest jeszcze wi\u0119cej, oczywi\u015bcie PoliMorf nie wyczerpuje zbioru\u2026\n",
|
||||
"\n",
|
||||
"**Pytanie** Podaj przykłady „oczywistych” wyrazów, których nie ma w PoliMorfie. Jak w sposób systematyczny szukać takich wyrazów?\n",
|
||||
"**Pytanie** Podaj przyk\u0142ady \u201eoczywistych\u201d wyraz\u00f3w, kt\u00f3rych nie ma w PoliMorfie. Jak w spos\u00f3b systematyczny szuka\u0107 takich wyraz\u00f3w?\n",
|
||||
"\n",
|
||||
"Z drugiej strony, w PoliMorfie jest dużo dziwnych, „sztucznych” wyrazów.\n",
|
||||
"Z drugiej strony, w PoliMorfie jest du\u017co dziwnych, \u201esztucznych\u201d wyraz\u00f3w.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -124,24 +140,24 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"niebiałościenną\n",
|
||||
"nieponadosobowości\n",
|
||||
"nieknerający\n",
|
||||
"inspektoratów\n",
|
||||
"niebia\u0142o\u015bcienn\u0105\n",
|
||||
"nieponadosobowo\u015bci\n",
|
||||
"niekneraj\u0105cy\n",
|
||||
"inspektorat\u00f3w\n",
|
||||
"Korytkowskich\n",
|
||||
"elektrostatyczności\n",
|
||||
"elektrostatyczno\u015bci\n",
|
||||
"Okola\n",
|
||||
"bezsłowny\n",
|
||||
"bezs\u0142owny\n",
|
||||
"indygowcu\n",
|
||||
"gadany\n",
|
||||
"nieładowarkowościach\n",
|
||||
"niepawężnicowate\n",
|
||||
"nie\u0142adowarkowo\u015bciach\n",
|
||||
"niepaw\u0119\u017cnicowate\n",
|
||||
"Thom\n",
|
||||
"poradlmy\n",
|
||||
"olejący\n",
|
||||
"Ziemianinów\n",
|
||||
"olej\u0105cy\n",
|
||||
"Ziemianin\u00f3w\n",
|
||||
"stenotropizmami\n",
|
||||
"wigiliowości\n",
|
||||
"wigiliowo\u015bci\n",
|
||||
"pognanej\n",
|
||||
"niekinezyterapeutycznym\n"
|
||||
]
|
||||
@ -155,8 +171,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Inaczej, zobaczmy, ile różnych wyrazów jest w jakimś rzeczywistym zbiorze tekstów, rozpatrzmy\n",
|
||||
"teksty zebrane na potrzeby identyfikacji płci autora tekstu:\n",
|
||||
"Inaczej, zobaczmy, ile r\u00f3\u017cnych wyraz\u00f3w jest w jakim\u015b rzeczywistym zbiorze tekst\u00f3w, rozpatrzmy\n",
|
||||
"teksty zebrane na potrzeby identyfikacji p\u0142ci autora tekstu:\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -195,37 +211,37 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"ˆ\n",
|
||||
"ˇ\n",
|
||||
"゚\n",
|
||||
"\u02c6\n",
|
||||
"\u02c7\n",
|
||||
"\uff9f\n",
|
||||
"a\n",
|
||||
"A\n",
|
||||
"á\n",
|
||||
"Á\n",
|
||||
"à\n",
|
||||
"À\n",
|
||||
"ă\n",
|
||||
"Ă\n",
|
||||
"â\n",
|
||||
"Â\n",
|
||||
"å\n",
|
||||
"Å\n",
|
||||
"ä\n",
|
||||
"Ä\n",
|
||||
"Ã\n",
|
||||
"ā\n",
|
||||
"\u00e1\n",
|
||||
"\u00c1\n",
|
||||
"\u00e0\n",
|
||||
"\u00c0\n",
|
||||
"\u0103\n",
|
||||
"\u0102\n",
|
||||
"\u00e2\n",
|
||||
"\u00c2\n",
|
||||
"\u00e5\n",
|
||||
"\u00c5\n",
|
||||
"\u00e4\n",
|
||||
"\u00c4\n",
|
||||
"\u00c3\n",
|
||||
"\u0101\n",
|
||||
"aa\n",
|
||||
"aA\n",
|
||||
"Aa\n",
|
||||
"AA\n",
|
||||
"aĂ\n",
|
||||
"AĂ\n",
|
||||
"aâ\n",
|
||||
"aÂ\n",
|
||||
"Aâ\n",
|
||||
"aÅ\n",
|
||||
"aÄ\n",
|
||||
"ª\n",
|
||||
"a\u0102\n",
|
||||
"A\u0102\n",
|
||||
"a\u00e2\n",
|
||||
"a\u00c2\n",
|
||||
"A\u00e2\n",
|
||||
"a\u00c5\n",
|
||||
"a\u00c4\n",
|
||||
"\u00c2\u00aa\n",
|
||||
"aaa\n",
|
||||
"aAa\n",
|
||||
"Aaa\n",
|
||||
@ -273,9 +289,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Co gorsza, nawet jak weźmiemy cały taki słownik bez ograniczeń i tak\n",
|
||||
"nie pokryje on sporej części tekstów przetwarzanych w czasie inferencji.\n",
|
||||
"Zobaczmy, ilu wyrazów ze zbioru deweloperskiego nie będzie w słowniku.\n",
|
||||
"Co gorsza, nawet jak we\u017amiemy ca\u0142y taki s\u0142ownik bez ogranicze\u0144 i tak\n",
|
||||
"nie pokryje on sporej cz\u0119\u015bci tekst\u00f3w przetwarzanych w czasie inferencji.\n",
|
||||
"Zobaczmy, ilu wyraz\u00f3w ze zbioru deweloperskiego nie b\u0119dzie w s\u0142owniku.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -308,7 +324,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Obcięcie słownika\n",
|
||||
"### Obci\u0119cie s\u0142ownika\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -316,9 +332,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Najprostszy sposób ograniczenia słownika to po prostu obcięcie do $N$ najczęstszych słów.\n",
|
||||
"Najprostszy spos\u00f3b ograniczenia s\u0142ownika to po prostu obci\u0119cie do $N$ najcz\u0119stszych s\u0142\u00f3w.\n",
|
||||
"\n",
|
||||
"Spróbujmy zastosować do korpusu „płci”:\n",
|
||||
"Spr\u00f3bujmy zastosowa\u0107 do korpusu \u201ep\u0142ci\u201d:\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -331,8 +347,8 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"sort: błąd zapisu: 'standardowe wyjście': Przerwany potok\n",
|
||||
"sort: błąd zapisu\n"
|
||||
"sort: b\u0142\u0105d zapisu: 'standardowe wyj\u015bcie': Przerwany potok\n",
|
||||
"sort: b\u0142\u0105d zapisu\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@ -344,15 +360,15 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Daje to lepszy efekt niż można się spodziewać. Odrzucamy w ten sposób\n",
|
||||
"tylko bardzo rzadkie słowa (albo takie, które wystąpiły tylko raz w\n",
|
||||
"korpusie — tzw. *hapax legomena*), choć tych słów jest bardzo dużo.\n",
|
||||
"Daje to lepszy efekt ni\u017c mo\u017cna si\u0119 spodziewa\u0107. Odrzucamy w ten spos\u00f3b\n",
|
||||
"tylko bardzo rzadkie s\u0142owa (albo takie, kt\u00f3re wyst\u0105pi\u0142y tylko raz w\n",
|
||||
"korpusie \u2014 tzw. *hapax legomena*), cho\u0107 tych s\u0142\u00f3w jest bardzo du\u017co.\n",
|
||||
"\n",
|
||||
"**Zagadka**: 50000 najczęstszych słów (1,9% **typów**) pokrywa jaki odsetek **wystąpień**?\n",
|
||||
"**Zagadka**: 50000 najcz\u0119stszych s\u0142\u00f3w (1,9% **typ\u00f3w**) pokrywa jaki odsetek **wyst\u0105pie\u0144**?\n",
|
||||
"\n",
|
||||
"Rozkład normalny w języku nie jest… normalny — nie spotkamy się z nim\n",
|
||||
"badając języki. W tekstach dominują „skrzywione” rozkłady z długimi,\n",
|
||||
"„chudymi” ogonami.\n",
|
||||
"Rozk\u0142ad normalny w j\u0119zyku nie jest\u2026 normalny \u2014 nie spotkamy si\u0119 z nim\n",
|
||||
"badaj\u0105c j\u0119zyki. W tekstach dominuj\u0105 \u201eskrzywione\u201d rozk\u0142ady z d\u0142ugimi,\n",
|
||||
"\u201echudymi\u201d ogonami.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -437,27 +453,27 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Lematyzacja wydaje się dobrym pomysłem, zwłaszcza dla języków dla bogatej fleksji:\n",
|
||||
"Lematyzacja wydaje si\u0119 dobrym pomys\u0142em, zw\u0142aszcza dla j\u0119zyk\u00f3w dla bogatej fleksji:\n",
|
||||
"\n",
|
||||
"- znacznie redukujemy słownik,\n",
|
||||
"- formy fleksyjne tego samego wyrazu są traktowane tak samo (co wydaje się słuszne).\n",
|
||||
"- znacznie redukujemy s\u0142ownik,\n",
|
||||
"- formy fleksyjne tego samego wyrazu s\u0105 traktowane tak samo (co wydaje si\u0119 s\u0142uszne).\n",
|
||||
"\n",
|
||||
"W praktyce współcześnie **nie** stosuje się lematyzacji (w połączeniu z\n",
|
||||
"W praktyce wsp\u00f3\u0142cze\u015bnie **nie** stosuje si\u0119 lematyzacji (w po\u0142\u0105czeniu z\n",
|
||||
"metodami opartymi na sieciach neuronowych):\n",
|
||||
"\n",
|
||||
"- lematyzacja wymaga wiedzy językowej (reguł lub słownika),\n",
|
||||
" wytworzenie takiej wiedzy może być kosztowne, obecnie preferowane\n",
|
||||
" są metody niezależne od języka;\n",
|
||||
"- tracimy pewną informację niesioną przez formę fleksyjną (co w szczególnych\n",
|
||||
" przypadkach może być niefortunne, np. *aspiracja* i *aspiracje*);\n",
|
||||
"- lematyzacja nie jest trywialnym problemem ze względu na niejednoznaczności\n",
|
||||
" (*Lekarzu, lecz się sam*);\n",
|
||||
"- niektóre niejednoznaczności są seryjne, wybór lematu może być arbitralny,\n",
|
||||
"- lematyzacja wymaga wiedzy j\u0119zykowej (regu\u0142 lub s\u0142ownika),\n",
|
||||
" wytworzenie takiej wiedzy mo\u017ce by\u0107 kosztowne, obecnie preferowane\n",
|
||||
" s\u0105 metody niezale\u017cne od j\u0119zyka;\n",
|
||||
"- tracimy pewn\u0105 informacj\u0119 niesion\u0105 przez form\u0119 fleksyjn\u0105 (co w szczeg\u00f3lnych\n",
|
||||
" przypadkach mo\u017ce by\u0107 niefortunne, np. *aspiracja* i *aspiracje*);\n",
|
||||
"- lematyzacja nie jest trywialnym problemem ze wzgl\u0119du na niejednoznaczno\u015bci\n",
|
||||
" (*Lekarzu, lecz si\u0119 sam*);\n",
|
||||
"- niekt\u00f3re niejednoznaczno\u015bci s\u0105 seryjne, wyb\u00f3r lematu mo\u017ce by\u0107 arbitralny,\n",
|
||||
" np. czy *posiadanie*, *gotowanie*, *skakanie* to rzeczowniki czy czasowniki?\n",
|
||||
" a *urządzenie*, *mieszkanie*?\n",
|
||||
" a *urz\u0105dzenie*, *mieszkanie*?\n",
|
||||
"- zazwyczaj sieci neuronowe (czy nawet prostsze modele typu Word2vec)\n",
|
||||
" są w stanie nauczyć się rekonstruowania zależności między formami fleksyjnymi\n",
|
||||
" (i więcej: błędnych form, błędów ortograficznych, form archaicznych itd.)\n",
|
||||
" s\u0105 w stanie nauczy\u0107 si\u0119 rekonstruowania zale\u017cno\u015bci mi\u0119dzy formami fleksyjnymi\n",
|
||||
" (i wi\u0119cej: b\u0142\u0119dnych form, b\u0142\u0119d\u00f3w ortograficznych, form archaicznych itd.)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -465,7 +481,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Zejście na poziom znaków\n",
|
||||
"### Zej\u015bcie na poziom znak\u00f3w\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -473,19 +489,19 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Skoro słownik wyrazów jest zbyt duży, to może zejść na poziom znaków?\n",
|
||||
"Skoro s\u0142ownik wyraz\u00f3w jest zbyt du\u017cy, to mo\u017ce zej\u015b\u0107 na poziom znak\u00f3w?\n",
|
||||
"\n",
|
||||
"- pojedynczy znak alfabetu wprawdzie nic nie znaczy (co znaczy *h*?)\n",
|
||||
"\n",
|
||||
"- … ale rozmiar wejścia przy kodowaniu gorącą jedynką\n",
|
||||
" dramatycznie się zmniejsza\n",
|
||||
"- \u2026 ale rozmiar wej\u015bcia przy kodowaniu gor\u0105c\u0105 jedynk\u0105\n",
|
||||
" dramatycznie si\u0119 zmniejsza\n",
|
||||
"\n",
|
||||
"- może działać, jeśli dodać wielowarstwową sieć\n",
|
||||
" neuronową\n",
|
||||
"- mo\u017ce dzia\u0142a\u0107, je\u015bli doda\u0107 wielowarstwow\u0105 sie\u0107\n",
|
||||
" neuronow\u0105\n",
|
||||
"\n",
|
||||
"- … ale może być bardzo kosztowne obliczeniowo\n",
|
||||
"- \u2026 ale mo\u017ce by\u0107 bardzo kosztowne obliczeniowo\n",
|
||||
"\n",
|
||||
"A może coś pośredniego między znakami a wyrazami?\n",
|
||||
"A mo\u017ce co\u015b po\u015bredniego mi\u0119dzy znakami a wyrazami?\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -501,22 +517,22 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ani znaki, ani wyrazy — coś pomiędzy: jednostki podwyrazowe (*subword\n",
|
||||
"units*). Moglibyśmy np. dzielić wyraz *superkomputera* na dwie\n",
|
||||
"jednostki *super/+/komputera*, a może nawet trzy: *super/+/komputer/+/a*?\n",
|
||||
"Ani znaki, ani wyrazy \u2014 co\u015b pomi\u0119dzy: jednostki podwyrazowe (*subword\n",
|
||||
"units*). Mogliby\u015bmy np. dzieli\u0107 wyraz *superkomputera* na dwie\n",
|
||||
"jednostki *super/+/komputera*, a mo\u017ce nawet trzy: *super/+/komputer/+/a*?\n",
|
||||
"\n",
|
||||
"Najpopularniejszy algorytm podziału na jednostki podwyrazowe to BPE\n",
|
||||
"Najpopularniejszy algorytm podzia\u0142u na jednostki podwyrazowe to BPE\n",
|
||||
"(*byte-pair encoding*), zainspirowany algorytmami kompresji danych.\n",
|
||||
"Lista jednostek jest automatycznie indukowana na podstawie tekstu (nie\n",
|
||||
"potrzeba żadnej wiedzy o języku!). Ich liczba musi być natomiast z góry\n",
|
||||
"określona.\n",
|
||||
"potrzeba \u017cadnej wiedzy o j\u0119zyku!). Ich liczba musi by\u0107 natomiast z g\u00f3ry\n",
|
||||
"okre\u015blona.\n",
|
||||
"\n",
|
||||
"W kroku początkowym zaznaczamy końce wyrazów (tokenów), robimy to po\n",
|
||||
"to, żeby jednostki podwyrazowe nie przekraczały granic wyrazów.\n",
|
||||
"W kroku pocz\u0105tkowym zaznaczamy ko\u0144ce wyraz\u00f3w (token\u00f3w), robimy to po\n",
|
||||
"to, \u017ceby jednostki podwyrazowe nie przekracza\u0142y granic wyraz\u00f3w.\n",
|
||||
"\n",
|
||||
"Następnie wykonujemy tyle kroków iteracji, ile wynosi rozmiar zadanego\n",
|
||||
"słownika. W każdym kroku szukamy najczęstszego bigramu, od tego\n",
|
||||
"momentu traktujemy go jako całostkę (wkładamy go do „pudełka”).\n",
|
||||
"Nast\u0119pnie wykonujemy tyle krok\u00f3w iteracji, ile wynosi rozmiar zadanego\n",
|
||||
"s\u0142ownika. W ka\u017cdym kroku szukamy najcz\u0119stszego bigramu, od tego\n",
|
||||
"momentu traktujemy go jako ca\u0142ostk\u0119 (wk\u0142adamy go do \u201epude\u0142ka\u201d).\n",
|
||||
"\n",
|
||||
"![img](./bpe.png)\n",
|
||||
"\n"
|
||||
@ -581,8 +597,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Słownik jednostek podwyrazowych możemy zastosować do dowolnego tekstu, np. do tekstu,\n",
|
||||
"na którym słownik był wyuczony:\n",
|
||||
"S\u0142ownik jednostek podwyrazowych mo\u017cemy zastosowa\u0107 do dowolnego tekstu, np. do tekstu,\n",
|
||||
"na kt\u00f3rym s\u0142ownik by\u0142 wyuczony:\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -628,15 +644,15 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zauważmy, że oprócz jednostek podwyrazowych zostały izolowane litery,\n",
|
||||
"zazwyczaj dodajemy je do słownika. (I zazwyczaj, słownik jest trochę\n",
|
||||
"większy niż wartość podana jako parametr przy uczeniu BPE — jest\n",
|
||||
"większy o znaki i specjalne tokeny typu `UNK`, `BOS`, `EOS`, `PAD`.)\n",
|
||||
"Zauwa\u017cmy, \u017ce opr\u00f3cz jednostek podwyrazowych zosta\u0142y izolowane litery,\n",
|
||||
"zazwyczaj dodajemy je do s\u0142ownika. (I zazwyczaj, s\u0142ownik jest troch\u0119\n",
|
||||
"wi\u0119kszy ni\u017c warto\u015b\u0107 podana jako parametr przy uczeniu BPE \u2014 jest\n",
|
||||
"wi\u0119kszy o znaki i specjalne tokeny typu `UNK`, `BOS`, `EOS`, `PAD`.)\n",
|
||||
"\n",
|
||||
"**Pytanie**: Jaki problem może pojawić przy zastosowaniu BPE dla tekstu,\n",
|
||||
"gdzie pojawiają się chińskie znaki? Jak można sobie z nim poradzić?\n",
|
||||
"**Pytanie**: Jaki problem mo\u017ce pojawi\u0107 przy zastosowaniu BPE dla tekstu,\n",
|
||||
"gdzie pojawiaj\u0105 si\u0119 chi\u0144skie znaki? Jak mo\u017cna sobie z nim poradzi\u0107?\n",
|
||||
"\n",
|
||||
"Słownik jednostek podwyrazowych można stosować dla dowolnego tekstu:\n",
|
||||
"S\u0142ownik jednostek podwyrazowych mo\u017cna stosowa\u0107 dla dowolnego tekstu:\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -664,10 +680,10 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jak można zauważyć algorytm BPE daje dwa rodzaje jednostek podwyrazowych:\n",
|
||||
"Jak mo\u017cna zauwa\u017cy\u0107 algorytm BPE daje dwa rodzaje jednostek podwyrazowych:\n",
|
||||
"\n",
|
||||
"- jednostki, które mogą doklejane na początku wyrazu;\n",
|
||||
"- jednostki, które stanowią koniec wyrazu, w szczególności są całym wyrazem.\n",
|
||||
"- jednostki, kt\u00f3re mog\u0105 doklejane na pocz\u0105tku wyrazu;\n",
|
||||
"- jednostki, kt\u00f3re stanowi\u0105 koniec wyrazu, w szczeg\u00f3lno\u015bci s\u0105 ca\u0142ym wyrazem.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -683,8 +699,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Po raz pierwszy BPE użyto do neuronowego tłumaczenia maszynowego.\n",
|
||||
"Użyjmy modułu autorstwa Rica Sennricha ([https://github.com/rsennrich/subword-nmt](https://github.com/rsennrich/subword-nmt)).\n",
|
||||
"Po raz pierwszy BPE u\u017cyto do neuronowego t\u0142umaczenia maszynowego.\n",
|
||||
"U\u017cyjmy modu\u0142u autorstwa Rica Sennricha ([https://github.com/rsennrich/subword-nmt](https://github.com/rsennrich/subword-nmt)).\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -701,7 +717,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Wyindukujmy słownik dla zbioru uczącego zadania identyfikacji płci\n",
|
||||
"Wyindukujmy s\u0142ownik dla zbioru ucz\u0105cego zadania identyfikacji p\u0142ci\n",
|
||||
"autora tekstu:\n",
|
||||
"\n"
|
||||
]
|
||||
@ -719,7 +735,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Procedura trwa kilka minut, trzeba uzbroić się w cierpliwość (ale wypisywanie bigramów przyspieszy!).\n",
|
||||
"Procedura trwa kilka minut, trzeba uzbroi\u0107 si\u0119 w cierpliwo\u015b\u0107 (ale wypisywanie bigram\u00f3w przyspieszy!).\n",
|
||||
"\n",
|
||||
" pair 0: n i -> ni (frequency 17625075)\n",
|
||||
" pair 1: i e -> ie (frequency 11471590)\n",
|
||||
@ -737,7 +753,7 @@
|
||||
" pair 13: n a -> na (frequency 5300380)\n",
|
||||
" pair 14: r o -> ro (frequency 5181363)\n",
|
||||
" pair 15: n a</w> -> na</w> (frequency 5125807)\n",
|
||||
" pair 16: a ł -> ał (frequency 4786696)\n",
|
||||
" pair 16: a \u0142 -> a\u0142 (frequency 4786696)\n",
|
||||
" pair 17: j e -> je (frequency 4599579)\n",
|
||||
" pair 18: s i -> si (frequency 4300984)\n",
|
||||
" pair 19: a l -> al (frequency 4276823)\n",
|
||||
@ -751,40 +767,40 @@
|
||||
" pair 27: p rz -> prz (frequency 3494551)\n",
|
||||
" pair 28: g o</w> -> go</w> (frequency 3279997)\n",
|
||||
" pair 29: a r -> ar (frequency 3081492)\n",
|
||||
" pair 30: si ę</w> -> się</w> (frequency 2973681)\n",
|
||||
" pair 30: si \u0119</w> -> si\u0119</w> (frequency 2973681)\n",
|
||||
" ...\n",
|
||||
" pair 49970: brz mieniu</w> -> brzmieniu</w> (frequency 483)\n",
|
||||
" pair 49971: bieżą cych</w> -> bieżących</w> (frequency 483)\n",
|
||||
" pair 49972: biegu nkę</w> -> biegunkę</w> (frequency 483)\n",
|
||||
" pair 49973: ban kowości</w> -> bankowości</w> (frequency 483)\n",
|
||||
" pair 49971: bie\u017c\u0105 cych</w> -> bie\u017c\u0105cych</w> (frequency 483)\n",
|
||||
" pair 49972: biegu nk\u0119</w> -> biegunk\u0119</w> (frequency 483)\n",
|
||||
" pair 49973: ban kowo\u015bci</w> -> bankowo\u015bci</w> (frequency 483)\n",
|
||||
" pair 49974: ba ku</w> -> baku</w> (frequency 483)\n",
|
||||
" pair 49975: ba cznie</w> -> bacznie</w> (frequency 483)\n",
|
||||
" pair 49976: Przypad kowo</w> -> Przypadkowo</w> (frequency 483)\n",
|
||||
" pair 49977: MA Ł -> MAŁ (frequency 483)\n",
|
||||
" pair 49977: MA \u0141 -> MA\u0141 (frequency 483)\n",
|
||||
" pair 49978: Lep pera</w> -> Leppera</w> (frequency 483)\n",
|
||||
" pair 49979: Ko za -> Koza (frequency 483)\n",
|
||||
" pair 49980: Jak byś</w> -> Jakbyś</w> (frequency 483)\n",
|
||||
" pair 49980: Jak by\u015b</w> -> Jakby\u015b</w> (frequency 483)\n",
|
||||
" pair 49981: Geni alne</w> -> Genialne</w> (frequency 483)\n",
|
||||
" pair 49982: Że nada</w> -> Żenada</w> (frequency 482)\n",
|
||||
" pair 49983: ń czykiem</w> -> ńczykiem</w> (frequency 482)\n",
|
||||
" pair 49984: zwie ń -> zwień (frequency 482)\n",
|
||||
" pair 49985: zost ałaś</w> -> zostałaś</w> (frequency 482)\n",
|
||||
" pair 49982: \u017be nada</w> -> \u017benada</w> (frequency 482)\n",
|
||||
" pair 49983: \u0144 czykiem</w> -> \u0144czykiem</w> (frequency 482)\n",
|
||||
" pair 49984: zwie \u0144 -> zwie\u0144 (frequency 482)\n",
|
||||
" pair 49985: zost a\u0142a\u015b</w> -> zosta\u0142a\u015b</w> (frequency 482)\n",
|
||||
" pair 49986: zni szczona</w> -> zniszczona</w> (frequency 482)\n",
|
||||
" pair 49987: ze stawi -> zestawi (frequency 482)\n",
|
||||
" pair 49988: za sób</w> -> zasób</w> (frequency 482)\n",
|
||||
" pair 49989: węd rówkę</w> -> wędrówkę</w> (frequency 482)\n",
|
||||
" pair 49990: wysko czyła</w> -> wyskoczyła</w> (frequency 482)\n",
|
||||
" pair 49988: za s\u00f3b</w> -> zas\u00f3b</w> (frequency 482)\n",
|
||||
" pair 49989: w\u0119d r\u00f3wk\u0119</w> -> w\u0119dr\u00f3wk\u0119</w> (frequency 482)\n",
|
||||
" pair 49990: wysko czy\u0142a</w> -> wyskoczy\u0142a</w> (frequency 482)\n",
|
||||
" pair 49991: wyle czenia</w> -> wyleczenia</w> (frequency 482)\n",
|
||||
" pair 49992: wychowaw cze</w> -> wychowawcze</w> (frequency 482)\n",
|
||||
" pair 49993: w t -> wt (frequency 482)\n",
|
||||
" pair 49994: un da -> unda (frequency 482)\n",
|
||||
" pair 49995: udzie lałem</w> -> udzielałem</w> (frequency 482)\n",
|
||||
" pair 49996: tę czy</w> -> tęczy</w> (frequency 482)\n",
|
||||
" pair 49995: udzie la\u0142em</w> -> udziela\u0142em</w> (frequency 482)\n",
|
||||
" pair 49996: t\u0119 czy</w> -> t\u0119czy</w> (frequency 482)\n",
|
||||
" pair 49997: tro sce</w> -> trosce</w> (frequency 482)\n",
|
||||
" pair 49998: słusz ności</w> -> słuszności</w> (frequency 482)\n",
|
||||
" pair 49998: s\u0142usz no\u015bci</w> -> s\u0142uszno\u015bci</w> (frequency 482)\n",
|
||||
" pair 49999: su me</w> -> sume</w> (frequency 482\n",
|
||||
"\n",
|
||||
"Zastosujmy teraz wyindukowany słownik BPE dla jakiegoś rzeczywistego tekstu.\n",
|
||||
"Zastosujmy teraz wyindukowany s\u0142ownik BPE dla jakiego\u015b rzeczywistego tekstu.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -797,19 +813,19 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Cier@@ piałem na straszne la@@ gi kilkanaście sekund lub dłużej czarnego ekranu przy próbie przełą@@ czenia się uruchomienia prawie każdej aplikacji Dodatkowo telefon mi się wyłą@@ czał czasem bez powodu sam z siebie albo rese@@ tował Ostatnio nawet przeglądarka zaczęła się często zawie@@ szać i Android proponował wymu@@ szone zamknięcie Do tego te problemy z połączeniem do komputera przez USB "
|
||||
"Cier@@ pia\u0142em na straszne la@@ gi kilkana\u015bcie sekund lub d\u0142u\u017cej czarnego ekranu przy pr\u00f3bie prze\u0142\u0105@@ czenia si\u0119 uruchomienia prawie ka\u017cdej aplikacji Dodatkowo telefon mi si\u0119 wy\u0142\u0105@@ cza\u0142 czasem bez powodu sam z siebie albo rese@@ towa\u0142 Ostatnio nawet przegl\u0105darka zacz\u0119\u0142a si\u0119 cz\u0119sto zawie@@ sza\u0107 i Android proponowa\u0142 wymu@@ szone zamkni\u0119cie Do tego te problemy z po\u0142\u0105czeniem do komputera przez USB "
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"! echo 'Cierpiałem na straszne lagi – kilkanaście sekund lub dłużej czarnego ekranu przy próbie przełączenia się / uruchomienia prawie każdej aplikacji. Dodatkowo telefon mi się wyłączał czasem bez powodu – sam z siebie, albo resetował. Ostatnio nawet przeglądarka zaczęła się często zawieszać i Android proponował wymuszone zamknięcie. Do tego te problemy z połączeniem do komputera przez USB.' | perl -C -ne 'print \"$& \" while/\\p{L}+/g;' | python -m subword_nmt.apply_bpe -c bpe_vocab.txt"
|
||||
"! echo 'Cierpia\u0142em na straszne lagi \u2013 kilkana\u015bcie sekund lub d\u0142u\u017cej czarnego ekranu przy pr\u00f3bie prze\u0142\u0105czenia si\u0119 / uruchomienia prawie ka\u017cdej aplikacji. Dodatkowo telefon mi si\u0119 wy\u0142\u0105cza\u0142 czasem bez powodu \u2013 sam z siebie, albo resetowa\u0142. Ostatnio nawet przegl\u0105darka zacz\u0119\u0142a si\u0119 cz\u0119sto zawiesza\u0107 i Android proponowa\u0142 wymuszone zamkni\u0119cie. Do tego te problemy z po\u0142\u0105czeniem do komputera przez USB.' | perl -C -ne 'print \"$& \" while/\\p{L}+/g;' | python -m subword_nmt.apply_bpe -c bpe_vocab.txt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Ta konkretna implementacja zaznacza za pomocą sekwencji ~@@ ~ koniec jednostki podwyrazowej.\n",
|
||||
"Ta konkretna implementacja zaznacza za pomoc\u0105 sekwencji ~@@ ~ koniec jednostki podwyrazowej.\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
@ -832,7 +848,13 @@
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"author": "Filip Grali\u0144ski",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"lang": "pl",
|
||||
"subtitle": "12.Kodowanie BPE[wyk\u0142ad]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
|
@ -1,10 +1,26 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"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> 13. <i>Podej\u015bcie generatywne w ekstrakcji informacji</i> [wyk\u0142ad]</h2> \n",
|
||||
"<h3> Filip Grali\u0144ski (2021)</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": [
|
||||
"## Ekstrakcja informacji a podejście generatywne\n",
|
||||
"## Ekstrakcja informacji a podej\u015bcie generatywne\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -12,7 +28,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Podejście generatywne\n",
|
||||
"### Podej\u015bcie generatywne\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -20,21 +36,21 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Do tej pory zadanie ekstrakcji informacji traktowaliśmy jako zadanie etykietowania sekwencji, tzn. uczyliśmy system zaznaczać tokeny składające się na ekstrahowane informacje.\n",
|
||||
"Do tej pory zadanie ekstrakcji informacji traktowali\u015bmy jako zadanie etykietowania sekwencji, tzn. uczyli\u015bmy system zaznacza\u0107 tokeny sk\u0142adaj\u0105ce si\u0119 na ekstrahowane informacje.\n",
|
||||
"\n",
|
||||
"![img](./ie-seqlab.png)\n",
|
||||
"\n",
|
||||
"Możliwe jest inne podeście, **generatywne**, w którym podchodzimy do problemu ekstrakcji informacji jak do swego rodzaju **tłumaczenia maszynowego** — „tłumaczymy” tekst (wraz z pytaniem lub etykietą) na informację.\n",
|
||||
"Mo\u017cliwe jest inne pode\u015bcie, **generatywne**, w kt\u00f3rym podchodzimy do problemu ekstrakcji informacji jak do swego rodzaju **t\u0142umaczenia maszynowego** \u2014 \u201et\u0142umaczymy\u201d tekst (wraz z pytaniem lub etykiet\u0105) na informacj\u0119.\n",
|
||||
"\n",
|
||||
"![img](./ie-gener.png)\n",
|
||||
"\n",
|
||||
"To podejście może się wydawać trudniejsze niż etykietowanie sekwencji, ale wystarczająco zaawansowanej architekturze sieci, jest wykonalne.\n",
|
||||
"To podej\u015bcie mo\u017ce si\u0119 wydawa\u0107 trudniejsze ni\u017c etykietowanie sekwencji, ale wystarczaj\u0105co zaawansowanej architekturze sieci, jest wykonalne.\n",
|
||||
"\n",
|
||||
"Zalety:\n",
|
||||
"\n",
|
||||
"- informacja nie musi być dosłownie zapisana w tekście, ekstraktor może nauczyć się również normalizacji czy parafrazowania,\n",
|
||||
"- nie wprowadzamy wielu kroków przetwarzania (gdzie błędy mogą się\n",
|
||||
" namnażać), system działa na zasadzie *end-to-end*.\n",
|
||||
"- informacja nie musi by\u0107 dos\u0142ownie zapisana w tek\u015bcie, ekstraktor mo\u017ce nauczy\u0107 si\u0119 r\u00f3wnie\u017c normalizacji czy parafrazowania,\n",
|
||||
"- nie wprowadzamy wielu krok\u00f3w przetwarzania (gdzie b\u0142\u0119dy mog\u0105 si\u0119\n",
|
||||
" namna\u017ca\u0107), system dzia\u0142a na zasadzie *end-to-end*.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -50,40 +66,40 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Pierwsze systemu neuronowego tłumaczenia maszynowego używały siecie LSTM. Dopiero jednak dodanie tzw. atencji (*attention*) umożliwiło duży przeskok jakościowy. Najpierw atencję dodano do sieci rekurencyjnych, później powstały sieci oparte *wyłącznie* na atencji — modele Transformer.\n",
|
||||
"Pierwsze systemu neuronowego t\u0142umaczenia maszynowego u\u017cywa\u0142y siecie LSTM. Dopiero jednak dodanie tzw. atencji (*attention*) umo\u017cliwi\u0142o du\u017cy przeskok jako\u015bciowy. Najpierw atencj\u0119 dodano do sieci rekurencyjnych, p\u00f3\u017aniej powsta\u0142y sieci oparte *wy\u0142\u0105cznie* na atencji \u2014 modele Transformer.\n",
|
||||
"\n",
|
||||
"Idea atencji polega na tym, że sieć może kierować selektywnie „snop” uwagi na wyrazy na wejściu lub do tej pory wygenerowane wyrazy.\n",
|
||||
"Idea atencji polega na tym, \u017ce sie\u0107 mo\u017ce kierowa\u0107 selektywnie \u201esnop\u201d uwagi na wyrazy na wej\u015bciu lub do tej pory wygenerowane wyrazy.\n",
|
||||
"\n",
|
||||
"Mechanizm atencji korzysta z:\n",
|
||||
"\n",
|
||||
"- z poprzedniego stanu sieci $\\vec{s^{k-1}}$ (to jest „miejsce”, z którego „kierujemy” atencję),\n",
|
||||
"- z wektora reprezentującego słowo $\\vec{v}(t_i)$ (to jest „miejsce”, na które kierujemy atencję), gdzie\n",
|
||||
"- z poprzedniego stanu sieci $\\vec{s^{k-1}}$ (to jest \u201emiejsce\u201d, z kt\u00f3rego \u201ekierujemy\u201d atencj\u0119),\n",
|
||||
"- z wektora reprezentuj\u0105cego s\u0142owo $\\vec{v}(t_i)$ (to jest \u201emiejsce\u201d, na kt\u00f3re kierujemy atencj\u0119), gdzie\n",
|
||||
" $\\vec{v}(t_i)$ to reprezentacja wektorowa wyrazu $t_i$ (statyczny embedding lub reprezentacja wektorowa\n",
|
||||
" z poprzedniej warstwy dla sieci wielowarstwowej),\n",
|
||||
"\n",
|
||||
"aby wytworzyć wektor kontekstu $\\vec{\\xi^k}$ (który z kolei będzie w jakiś sposób wnosił wkład do wyliczenia nowej wartości stanu $\\vec{s^k}$ lub wyjścia $y^k$.\n",
|
||||
"aby wytworzy\u0107 wektor kontekstu $\\vec{\\xi^k}$ (kt\u00f3ry z kolei b\u0119dzie w jaki\u015b spos\u00f3b wnosi\u0142 wk\u0142ad do wyliczenia nowej warto\u015bci stanu $\\vec{s^k}$ lub wyj\u015bcia $y^k$.\n",
|
||||
"\n",
|
||||
"Najpierw wyliczymy skalarne wartości atencji, tzn. liczby, które będą sygnalizowały, jak bardzo wektor $\\vec{v}(t_i)$ „pasuje” do $\\vec{s^{k-1}}$, w najprostszej wersji można po prostu skorzystać z iloczynu skalarnego (o ile $n=m$),\n",
|
||||
"Najpierw wyliczymy skalarne warto\u015bci atencji, tzn. liczby, kt\u00f3re b\u0119d\u0105 sygnalizowa\u0142y, jak bardzo wektor $\\vec{v}(t_i)$ \u201epasuje\u201d do $\\vec{s^{k-1}}$, w najprostszej wersji mo\u017cna po prostu skorzysta\u0107 z iloczynu skalarnego (o ile $n=m$),\n",
|
||||
"\n",
|
||||
"$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{s^{k-1}}\\vec{v}(t_i).$$\n",
|
||||
"\n",
|
||||
"**Pytanie**: co jeśli $n$ nie jest równe $m$, tzn. rozmiar embeddingu nie jest równy rozmiarowi wektora stanu?\n",
|
||||
"**Pytanie**: co je\u015bli $n$ nie jest r\u00f3wne $m$, tzn. rozmiar embeddingu nie jest r\u00f3wny rozmiarowi wektora stanu?\n",
|
||||
"\n",
|
||||
"W przypadku sieci LSTM korzysta się częściej z bardziej skomplikowanego wzoru zawierającego dodatkowe wyuczalne wagi:\n",
|
||||
"W przypadku sieci LSTM korzysta si\u0119 cz\u0119\u015bciej z bardziej skomplikowanego wzoru zawieraj\u0105cego dodatkowe wyuczalne wagi:\n",
|
||||
"\n",
|
||||
"$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{w_a}\\operatorname{tanh}(W_a\\vec{s^{k-1}} + U_a\\vec{v}(t_i))$$\n",
|
||||
"\n",
|
||||
"**Pytanie**: jakie rozmiary mają macierze $W_a$, $U_a$ i wektor $w_a$?\n",
|
||||
"**Pytanie**: jakie rozmiary maj\u0105 macierze $W_a$, $U_a$ i wektor $w_a$?\n",
|
||||
"\n",
|
||||
"Powtórzmy, że wartości $a$ są wartościami skalarnymi, natomiast nie są one znormalizowane (nie sumują się do jedynki), normalizujemy je używając schematu podobnego do softmaxa:\n",
|
||||
"Powt\u00f3rzmy, \u017ce warto\u015bci $a$ s\u0105 warto\u015bciami skalarnymi, natomiast nie s\u0105 one znormalizowane (nie sumuj\u0105 si\u0119 do jedynki), normalizujemy je u\u017cywaj\u0105c schematu podobnego do softmaxa:\n",
|
||||
"\n",
|
||||
"$$\\alpha_{i} = \\frac{e^{a(\\vec{s^{k-1}}, \\vec{v}(t_i))}}{\\sum_j e^{a(\\vec{s^{k-1}}, \\vec{v}(t_j))}}$$\n",
|
||||
"\n",
|
||||
"Wektor kontekstu $\\vec{\\xi^k}$ będzie po prostu średnią ważoną wektorowych reprezentacji słów:\n",
|
||||
"Wektor kontekstu $\\vec{\\xi^k}$ b\u0119dzie po prostu \u015bredni\u0105 wa\u017con\u0105 wektorowych reprezentacji s\u0142\u00f3w:\n",
|
||||
"\n",
|
||||
"$$\\vec{\\xi^k} = \\sum_i \\alpha_i\\vec{v}(t_i)$$\n",
|
||||
"\n",
|
||||
"**Pytanie**: zasadniczo atencja jest środkiem do celu (żeby sieć się sprawniej uczyła), czy można atencja sama w sobie może być do czegoś przydatna?\n",
|
||||
"**Pytanie**: zasadniczo atencja jest \u015brodkiem do celu (\u017ceby sie\u0107 si\u0119 sprawniej uczy\u0142a), czy mo\u017cna atencja sama w sobie mo\u017ce by\u0107 do czego\u015b przydatna?\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
@ -106,7 +122,13 @@
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"author": "Filip Grali\u0144ski",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"lang": "pl",
|
||||
"subtitle": "13.Podej\u015bcie generatywne w ekstrakcji informacji[wyk\u0142ad]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
|
@ -1,5 +1,21 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"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> 14. <i>Pretrenowane modele j\u0119zyka</i> [wyk\u0142ad]</h2> \n",
|
||||
"<h3> Filip Grali\u0144ski (2021)</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": {},
|
||||
@ -12,27 +28,27 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"System AlphaZero uczy się grając sam ze sobą — wystarczy 24 godziny,\n",
|
||||
"by system nauczył się grać w szachy lub go na nadludzkim poziomie.\n",
|
||||
"System AlphaZero uczy si\u0119 graj\u0105c sam ze sob\u0105 \u2014 wystarczy 24 godziny,\n",
|
||||
"by system nauczy\u0142 si\u0119 gra\u0107 w szachy lub go na nadludzkim poziomie.\n",
|
||||
"\n",
|
||||
"**Pytanie**: Dlaczego granie samemu ze sobą nie jest dobrym sposobem\n",
|
||||
" nauczenia się grania w szachy dla człowieka, a dla maszyny jest?\n",
|
||||
"**Pytanie**: Dlaczego granie samemu ze sob\u0105 nie jest dobrym sposobem\n",
|
||||
" nauczenia si\u0119 grania w szachy dla cz\u0142owieka, a dla maszyny jest?\n",
|
||||
"\n",
|
||||
"Co jest odpowiednikiem grania samemu ze sobą w świecie przetwarzania tekstu?\n",
|
||||
"Tzn. **pretrenowanie** (*pretraining*) na dużym korpusie tekstu. (Tekst jest tani!)\n",
|
||||
"Co jest odpowiednikiem grania samemu ze sob\u0105 w \u015bwiecie przetwarzania tekstu?\n",
|
||||
"Tzn. **pretrenowanie** (*pretraining*) na du\u017cym korpusie tekstu. (Tekst jest tani!)\n",
|
||||
"\n",
|
||||
"Jest kilka sposobów na pretrenowanie modelu, w każdym razie sprowadza\n",
|
||||
"się do odgadywania następnego bądź zamaskowanego słowa.\n",
|
||||
"W każdym razie zawsze stosujemy softmax (być może ze „sztuczkami” takimi jak\n",
|
||||
"negatywne próbkowanie albo hierarchiczny softmax) na pewnej **reprezentacji kontekstowej**:\n",
|
||||
"Jest kilka sposob\u00f3w na pretrenowanie modelu, w ka\u017cdym razie sprowadza\n",
|
||||
"si\u0119 do odgadywania nast\u0119pnego b\u0105d\u017a zamaskowanego s\u0142owa.\n",
|
||||
"W ka\u017cdym razie zawsze stosujemy softmax (by\u0107 mo\u017ce ze \u201esztuczkami\u201d takimi jak\n",
|
||||
"negatywne pr\u00f3bkowanie albo hierarchiczny softmax) na pewnej **reprezentacji kontekstowej**:\n",
|
||||
"\n",
|
||||
"$$\\vec{p} = \\operatorname{softmax}(f(\\vec{c})).$$\n",
|
||||
"\n",
|
||||
"Model jest karany używając funkcji log loss:\n",
|
||||
"Model jest karany u\u017cywaj\u0105c funkcji log loss:\n",
|
||||
"\n",
|
||||
"$$-\\log(p_j),$$\n",
|
||||
"\n",
|
||||
"gdzie $w_j$ jest wyrazem, który pojawił się rzeczywiście w korpusie.\n",
|
||||
"gdzie $w_j$ jest wyrazem, kt\u00f3ry pojawi\u0142 si\u0119 rzeczywi\u015bcie w korpusie.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -40,7 +56,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Przewidywanie słowa (GPT-2)\n",
|
||||
"### Przewidywanie s\u0142owa (GPT-2)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -48,10 +64,10 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Jeden ze sposobów pretrenowania modelu to po prostu przewidywanie\n",
|
||||
"następnego słowa.\n",
|
||||
"Jeden ze sposob\u00f3w pretrenowania modelu to po prostu przewidywanie\n",
|
||||
"nast\u0119pnego s\u0142owa.\n",
|
||||
"\n",
|
||||
"Zainstalujmy najpierw bibliotekę transformers.\n",
|
||||
"Zainstalujmy najpierw bibliotek\u0119 transformers.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -79,36 +95,36 @@
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[('Âł', 0.6182783842086792),\n",
|
||||
" ('È', 0.1154019758105278),\n",
|
||||
" ('Ñģ', 0.026960616931319237),\n",
|
||||
"[('\u00c2\u0142', 0.6182783842086792),\n",
|
||||
" ('\u00c8', 0.1154019758105278),\n",
|
||||
" ('\u00d1\u0123', 0.026960616931319237),\n",
|
||||
" ('_____', 0.024418892338871956),\n",
|
||||
" ('________', 0.014962316490709782),\n",
|
||||
" ('ÃĤ', 0.010653386823832989),\n",
|
||||
" ('ä¸Ń', 0.008340531960129738),\n",
|
||||
" ('Ñ', 0.007557711564004421),\n",
|
||||
" ('Ê', 0.007046067621558905),\n",
|
||||
" ('ãĢ', 0.006875576451420784),\n",
|
||||
" ('\u00c3\u0124', 0.010653386823832989),\n",
|
||||
" ('\u00e4\u00b8\u0143', 0.008340531960129738),\n",
|
||||
" ('\u00d1', 0.007557711564004421),\n",
|
||||
" ('\u00ca', 0.007046067621558905),\n",
|
||||
" ('\u00e3\u0122', 0.006875576451420784),\n",
|
||||
" ('ile', 0.006685272324830294),\n",
|
||||
" ('____', 0.006307446397840977),\n",
|
||||
" ('âĢĭ', 0.006306538358330727),\n",
|
||||
" ('ÑĢ', 0.006197483278810978),\n",
|
||||
" ('ĠBelarus', 0.006108700763434172),\n",
|
||||
" ('Æ', 0.005720408633351326),\n",
|
||||
" ('ĠPoland', 0.0053678699769079685),\n",
|
||||
" ('á¹', 0.004606408067047596),\n",
|
||||
" ('îĢ', 0.004161055199801922),\n",
|
||||
" ('\u00e2\u0122\u012d', 0.006306538358330727),\n",
|
||||
" ('\u00d1\u0122', 0.006197483278810978),\n",
|
||||
" ('\u0120Belarus', 0.006108700763434172),\n",
|
||||
" ('\u00c6', 0.005720408633351326),\n",
|
||||
" ('\u0120Poland', 0.0053678699769079685),\n",
|
||||
" ('\u00e1\u00b9', 0.004606408067047596),\n",
|
||||
" ('\u00ee\u0122', 0.004161055199801922),\n",
|
||||
" ('????', 0.004056799225509167),\n",
|
||||
" ('_______', 0.0038176667876541615),\n",
|
||||
" ('ä¸', 0.0036082742735743523),\n",
|
||||
" ('Ì', 0.003221835708245635),\n",
|
||||
" ('\u00e4\u00b8', 0.0036082742735743523),\n",
|
||||
" ('\u00cc', 0.003221835708245635),\n",
|
||||
" ('urs', 0.003080119378864765),\n",
|
||||
" ('________________', 0.0027312245219945908),\n",
|
||||
" ('ĠLithuania', 0.0023860156070441008),\n",
|
||||
" ('\u0120Lithuania', 0.0023860156070441008),\n",
|
||||
" ('ich', 0.0021211160346865654),\n",
|
||||
" ('iz', 0.002069818088784814),\n",
|
||||
" ('vern', 0.002001357264816761),\n",
|
||||
" ('ÅĤ', 0.001717406208626926)]"
|
||||
" ('\u00c5\u0124', 0.001717406208626926)]"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
@ -145,22 +161,22 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zalety tego podejścia:\n",
|
||||
"Zalety tego podej\u015bcia:\n",
|
||||
"\n",
|
||||
"- prostota,\n",
|
||||
"- dobra podstawa do strojenia systemów generowania tekstu zwłaszcza\n",
|
||||
" „otwartego” (systemy dialogowe, generowanie (fake) newsów, streszczanie tekstu),\n",
|
||||
" ale niekoniecznie tłumaczenia maszynowego,\n",
|
||||
"- zaskakująca skuteczność przy uczeniu *few-shot* i *zero-shot*.\n",
|
||||
"- dobra podstawa do strojenia system\u00f3w generowania tekstu zw\u0142aszcza\n",
|
||||
" \u201eotwartego\u201d (systemy dialogowe, generowanie (fake) news\u00f3w, streszczanie tekstu),\n",
|
||||
" ale niekoniecznie t\u0142umaczenia maszynowego,\n",
|
||||
"- zaskakuj\u0105ca skuteczno\u015b\u0107 przy uczeniu *few-shot* i *zero-shot*.\n",
|
||||
"\n",
|
||||
"Wady:\n",
|
||||
"\n",
|
||||
"- asymetryczność, przetwarzanie tylko z lewej do prawej, preferencja\n",
|
||||
"- asymetryczno\u015b\u0107, przetwarzanie tylko z lewej do prawej, preferencja\n",
|
||||
" dla lewego kontekstu,\n",
|
||||
"- mniejsza skuteczność przy dostrajaniu do zadań klasyfikacji i innych zadań\n",
|
||||
" niepolegających na prostym generowaniu.\n",
|
||||
"- mniejsza skuteczno\u015b\u0107 przy dostrajaniu do zada\u0144 klasyfikacji i innych zada\u0144\n",
|
||||
" niepolegaj\u0105cych na prostym generowaniu.\n",
|
||||
"\n",
|
||||
"Przykłady modeli: GPT, GPT-2, GPT-3, DialoGPT.\n",
|
||||
"Przyk\u0142ady modeli: GPT, GPT-2, GPT-3, DialoGPT.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -168,7 +184,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Maskowanie słów (BERT)\n",
|
||||
"### Maskowanie s\u0142\u00f3w (BERT)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -176,18 +192,18 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Inną metodą jest maskowanie słów (*Masked Language Modeling*, *MLM*).\n",
|
||||
"Inn\u0105 metod\u0105 jest maskowanie s\u0142\u00f3w (*Masked Language Modeling*, *MLM*).\n",
|
||||
"\n",
|
||||
"W tym podejściu losowe wybrane zastępujemy losowe słowa specjalnym\n",
|
||||
"tokenem (`[MASK]`) i każemy modelowi odgadywać w ten sposób\n",
|
||||
"zamaskowane słowa (z uwzględnieniem również prawego kontekstu!).\n",
|
||||
"W tym podej\u015bciu losowe wybrane zast\u0119pujemy losowe s\u0142owa specjalnym\n",
|
||||
"tokenem (`[MASK]`) i ka\u017cemy modelowi odgadywa\u0107 w ten spos\u00f3b\n",
|
||||
"zamaskowane s\u0142owa (z uwzgl\u0119dnieniem r\u00f3wnie\u017c prawego kontekstu!).\n",
|
||||
"\n",
|
||||
"Móciąc ściśle, w jednym z pierwszych modeli tego typu (BERT)\n",
|
||||
"zastosowano schemat, w którym również niezamaskowane słowa są odgadywane (!):\n",
|
||||
"M\u00f3ci\u0105c \u015bci\u015ble, w jednym z pierwszych modeli tego typu (BERT)\n",
|
||||
"zastosowano schemat, w kt\u00f3rym r\u00f3wnie\u017c niezamaskowane s\u0142owa s\u0105 odgadywane (!):\n",
|
||||
"\n",
|
||||
"- wybieramy losowe 15% wyrazów do odgadnięcia\n",
|
||||
"- 80% z nich zastępujemy tokenem `[MASK]`,\n",
|
||||
"- 10% zastępujemy innym losowym wyrazem,\n",
|
||||
"- wybieramy losowe 15% wyraz\u00f3w do odgadni\u0119cia\n",
|
||||
"- 80% z nich zast\u0119pujemy tokenem `[MASK]`,\n",
|
||||
"- 10% zast\u0119pujemy innym losowym wyrazem,\n",
|
||||
"- 10% pozostawiamy bez zmian.\n",
|
||||
"\n"
|
||||
]
|
||||
@ -209,16 +225,16 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"W którym państwie leży Bombaj? W USA. (score: 0.16715531051158905)\n",
|
||||
"W którym państwie leży Bombaj? W India. (score: 0.09912960231304169)\n",
|
||||
"W którym państwie leży Bombaj? W Indian. (score: 0.039642028510570526)\n",
|
||||
"W którym państwie leży Bombaj? W Nepal. (score: 0.027137665078043938)\n",
|
||||
"W którym państwie leży Bombaj? W Pakistan. (score: 0.027065709233283997)\n",
|
||||
"W którym państwie leży Bombaj? W Polsce. (score: 0.023737527430057526)\n",
|
||||
"W którym państwie leży Bombaj? W .... (score: 0.02306722290813923)\n",
|
||||
"W którym państwie leży Bombaj? W Bangladesh. (score: 0.022106658667325974)\n",
|
||||
"W którym państwie leży Bombaj? W .... (score: 0.01628892682492733)\n",
|
||||
"W którym państwie leży Bombaj? W Niemczech. (score: 0.014501162804663181)\n"
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W USA. (score: 0.16715531051158905)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W India. (score: 0.09912960231304169)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Indian. (score: 0.039642028510570526)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Nepal. (score: 0.027137665078043938)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Pakistan. (score: 0.027065709233283997)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Polsce. (score: 0.023737527430057526)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W .... (score: 0.02306722290813923)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Bangladesh. (score: 0.022106658667325974)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W .... (score: 0.01628892682492733)\n",
|
||||
"W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W Niemczech. (score: 0.014501162804663181)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@ -229,7 +245,7 @@
|
||||
"tokenizer = AutoTokenizer.from_pretrained(\"xlm-roberta-large\")\n",
|
||||
"model = AutoModelWithLMHead.from_pretrained(\"xlm-roberta-large\")\n",
|
||||
"\n",
|
||||
"sequence = f'W którym państwie leży Bombaj? W {tokenizer.mask_token}.'\n",
|
||||
"sequence = f'W kt\u00f3rym pa\u0144stwie le\u017cy Bombaj? W {tokenizer.mask_token}.'\n",
|
||||
"\n",
|
||||
"input_ids = tokenizer.encode(sequence, return_tensors=\"pt\")\n",
|
||||
"mask_token_index = torch.where(input_ids == tokenizer.mask_token_id)[1]\n",
|
||||
@ -249,7 +265,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Przykłady: BERT, RoBERTa (również Polish RoBERTa).\n",
|
||||
"Przyk\u0142ady: BERT, RoBERTa (r\u00f3wnie\u017c Polish RoBERTa).\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -257,7 +273,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Podejście generatywne (koder-dekoder).\n",
|
||||
"### Podej\u015bcie generatywne (koder-dekoder).\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
@ -265,8 +281,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"System ma wygenerować odpowiedź na różne pytania (również\n",
|
||||
"odpowiadające zadaniu MLM), np.:\n",
|
||||
"System ma wygenerowa\u0107 odpowied\u017a na r\u00f3\u017cne pytania (r\u00f3wnie\u017c\n",
|
||||
"odpowiadaj\u0105ce zadaniu MLM), np.:\n",
|
||||
"\n",
|
||||
"- \"translate English to German: That is good.\" => \"Das ist gut.\"\n",
|
||||
"- \"cola sentence: The course is jumping well.\" => \"not acceptable\"\n",
|
||||
@ -339,7 +355,7 @@
|
||||
"source": [
|
||||
"(Zob. [https://arxiv.org/pdf/1910.10683.pdf](https://arxiv.org/pdf/1910.10683.pdf))\n",
|
||||
"\n",
|
||||
"Przykład: T5, mT5\n",
|
||||
"Przyk\u0142ad: T5, mT5\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
@ -362,7 +378,13 @@
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"author": "Filip Grali\u0144ski",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"lang": "pl",
|
||||
"subtitle": "14.Pretrenowane modele j\u0119zyka[wyk\u0142ad]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
|
@ -1,5 +1,19 @@
|
||||
{
|
||||
"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> 15. <i>Sieci Transformer i ich zastosowanie w ekstrakcji informacji</i> [wykład]</h2> \n",
|
||||
"<h3> Filip Graliński (2021)</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": {},
|
||||
@ -226,11 +240,14 @@
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"author": "Filip Graliński",
|
||||
"email": "filipg@amu.edu.pl",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"lang": "pl",
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
@ -241,10 +258,13 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
"version": "3.9.6"
|
||||
},
|
||||
"org": null
|
||||
"org": null,
|
||||
"subtitle": "15.Sieci Transformer i ich zastosowanie w ekstrakcji informacji[wykład]",
|
||||
"title": "Ekstrakcja informacji",
|
||||
"year": "2021"
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user