Korpusy, jazykové modely. Automatické morfologické a syntaktické značkování. Klasifikace textů, extrakce informací. Rekurentní neuronové sítě pro jazykové modelování, zpracování sekvencí, transformery. Odpovídání na otázky, strojový překlad. (PA153) ## Korpusy, (klasické) jazykové modely. **korpus** = *je (většinou rozsáhlý) soubor textů určitého jazyka. Jedná se o vnitřně strukturovaný, unifikovaný a obvykle i o indexovaný a ucelený rozsáhlý soubor elektronicky uložených a zpracovaných jazykových dat většinou v textové podobě, organizovaný se zřetelem k využití pro určitý cíl. (wikipedia)* **jazykovy model** = pravděpodobnostní distribuce přes všechny možné sekvence slov. - používá se ke zjistění pravděpodobnostní distribuce následujícího slova => generování textu, doplňování chybějících slov do kontextu - skrz to, pak může řešit další úkoly **Zipf's law** $$\text{word frequency} \, \propto \, \frac{1}{\text{word rank}}$$ - word rank: kolikáté nejčastější slovo v korpusu - word frequency: počet výskytů slova v korpusu **n-gram** = **N-gramy jsou souvislé části textu sestávající z n slov.** 1-gramy neboli unigramy jsou jednotlivá slova, 2-gramy neboli bigramy jsou dvojslovné fráze, 3-gramy (trigramy) trojslovné fráze atd. Ve větě *Skákal pes přes oves* jsou tedy: - unigramy: [skákal, pes, přes, oves] - bigramy: [skákal pes, pes přes, přes oves] - trigramy: [skákal pes přes, pes přes oves] ![image](https://hackmd.io/_uploads/S1kz47jS0.png) ![image](https://hackmd.io/_uploads/SyenMVQoHR.png) **!! pravděpodobnosti při násobení typicky rychle vypadnou z přesnosti floatů => převedeme na součet logprobů** ![image](https://hackmd.io/_uploads/B1_TNXsSR.png) ### Nevýhody - když n-gram není v datech, ale objeví se při inferenci $p(w)=0$ -> potřeba **smoothing** (Add-one, Add-α, Good–Turing smoothing - nijak dál se ve slidech nerozebírá) - pokud je **malé** $n$, máme nedostatečný kontext pro kvalitní predikci následujícího slova - pokud je **velké** $n$ počet poteciálních n-gramů ($|slovník|^n$) naroste a pravděpodobnosti z dat budou extrémně řídký ### Porovnání jazykových modelů (obecně aplikovatelné) ![image](https://hackmd.io/_uploads/ryBh_QirC.png) ![image](https://hackmd.io/_uploads/r1baumiHC.png) ![image](https://hackmd.io/_uploads/rk8fYmsSC.png) --------------------------------------------------------------------------------------- ## Automatické morfologické a syntaktické značkování. Toto s náma Pary na PA153 na podzim 2023 ani 2022 neprobíral.. Velmi stručně, kdyby na tom chtěl někdo vyloženě trvat ZKOPIROVANE ze stareho HackMD: https://hackmd.io/MYIa_15bSvmjt0JAYxs8tw ### Automatická morfologická analýza Jedním z prvních kroků v automatickém zpracování textu někdy bývá morfologická analýza a lemmatizace. #### Morfologická analýza https://is.muni.cz/auth/el/fi/podzim2020/PA153/index.qwarp?prejit=5714569 https://nlp.fi.muni.cz/poc_lingv/slajdy-2019/pl04-2.pdf Pro každý slovní tvar vrací: - základní slovní tvar (lemma - položka slovníku) - možné gramatické významy (značky) - kombinace hodnot relevantních gramatických kategorií jako např. slovní druh (sloveso, zájmeno..), pád, číslo, osoba, jmenný rod (mužský životný, mužský neživotný, ženský...), atd. - příkladem užití jsou morfologický analyzátory Ajka a Majka. Příklad: - Morfologická analýza věty 'Sním je místo něho' - sloupce: analyzovaný tvar:lemma:značky kategorií (V-verb,S-singular...) ![](https://i.imgur.com/BK5AShK.png =150x) - Problém: - Jakou informaci chceme / potřebujeme zachytit a popsat? - Jak si tuto informaci / tato data budeme organizovat? - Jak implementovat analýzu či syntézu nad těmito daty? #### Značky Gramatické informace reprezentujeme jako řetězec znaků, existuje na to více systémů: - Poziční systém (z Prahy): - kategorie je určena pozicí ve značce (15 pozicí) - ![img](http://wiki.korpus.cz/lib/exe/fetch.php/seznamy:tagy.png?cache=) - Atributový systém (z Brna, **takže lepší**): - dvojice atribut-hodnota - nezáleží na pořadí - přehlednější, lehce rozšiřitelný, úspornější?why, čitelný regulárními výrazy https://nlp.fi.muni.cz/projekty/ajka/tags.pdf - *k1gInSc4* - k1 - substantivum - gI - mužský neživotný rod - nS - singulár - c4 - akuzativ - nezachycuje specifikaci a afirmaci ?? - Heterogenní systém (Bratislava...): - jako poziční, ale prázdné pozice jsou vynechané - BNC tagset (english): - pevná množina značek (AJO, AJC, AJS) - problém: které všechny gramatické kategorie popisovat? - které slovní druhy: zkratky, interpunkce, čísla, speciality - které gramatické kategorie: *druhy zájmen*, *číslovek*, *příslovcí*, ... - duál ### Sémantická analýza #### Kolokace jako slovníkové heslo, MWE - pevné kolokace: zakopaný pes, New York, křížem krážem - porušují princip kompozicionality (význam složeného výrazu lze složit z významů jeho složek) - v NLP se používá termín *multiword expression (MWE)* - důležité MWE identifikovat, např. pro strojový překlad - zamrzlé MWE: ad hoc - pevné MWE: zakopaný pes, zakopaného psa - syntaktické anomálie: cobydup, coby dup, co by dup - MWE s možnou přetržkou: více méně, více či méně - MWE jako vzory (patterns): vzít někoho na hůl (někoho ojebat finančně) #### Nalezení významu v kontextu, WSD - *lexikální desambiguace* (Word Sense Disambiguation) - $F: (w, c) \rightarrow s​$ - $w \in W$ - množina slov - $c \in C$ - množina kontextů - $s \in S$ - množina významů - Algoritmy: hledáme význam slova použitého v kontextu - Naivní Leskův algoritmus - rozloží kontext na lemmy - definice hledaného slova jsou taktéž množiny lem - vytvoří průnik, definice, jejíž průnik má největší mohutnost je vybraná - porovnávají se shody slov z kontextu se slovy ve významu ze slovníku => výstup, kde je největší shoda - nevýhoda: nutnost slovníkových definicí - WSD založené na ML - stanovit význam u pevných kolokací (ručně nebo ze slovníku) - iterativně zjistit další kolokace kopie => kopie oddacího listu - opakovat, dokud desambiguované množiny nepřestanou narůstat - nevýhoda: Algoritmy závisejí na inventáři a popisu významů - Kolik významů ma slovo *list*? - SSJČ: 8 - SSČ: 6 - Word Sense Discrimination / Induction - nepočítají s pevným inventářem významů, jen s kontextem (clustering?) #### kontext - verbální (slova vyskytující se před/za slovem/větou) - situační (místo, čas, počet a vědomosti komunikačních partnerů) - sociální (vzdělání publika, sociální status skupiny) ------------------------------------------------------------------------------------------------------------------------------ ## Klasifikace textů, extrakce informací. Ok, tak zase něco normálního. - detekce spamu - identifikace autora - identifikace věku, genderu pisatele - rozpoznání jazyka - anaýza sentimentu **vstup**: dokument; **výstup**: třída (předem definovaná) * ručně vykraftěný pravidla - drahý na vytvoření a údrždu * supervised strojový učení * naive bayes * logisticka regrese * SVM * KNN * ... Ve slajdech je zmíněná konkrétně akorát klasifikace pomocí naive bayesu ### Naive bayes klasifikace - bag-of-words pohled na dokumenty (nezajímá nás pořadí, dokument je pro nás množina slov s počty výskytů) - chceme odhadnout maximal a posteriory pravděpodobnost přes třídy $c$: $c_{MAP} = argmax_{c \in C}P(c|w_1, w_2, w_3, ...)$ - jinak funguje úplně stejně, jako klasickej naive bayes (podrobněji viz https://hackmd.io/WuUsIBmRQKaCMh6LGinfxg) ![image](https://hackmd.io/_uploads/B1CJZBiBR.png) ![image](https://hackmd.io/_uploads/Hk74WHsrA.png) NEBOLI ![image](https://hackmd.io/_uploads/SyaBZrsH0.png) ![image](https://hackmd.io/_uploads/r16O-BiHR.png) #### Problém - co když se nějaké slovo ze zkoumaného dokumentu nevyskytuje v trénovacích datech (případně jen v některých třídách)? - to by vynulovalo pravděpodobnosti všech tříd (kde neylo) a nevěděli bychom nic => **add-1 smoothing** - při počítání frekvence přidáme k výskytu všech zkoumaných slov 1, kompenzujeme i ve jmenovateli + můžeme přidat i +1 za neznámé slovo ![image](https://hackmd.io/_uploads/BkjhLrorC.png) ## Rekurentní neuronové sítě pro jazykové modelování, zpracování sekvencí, transformery. zdroj: https://is.muni.cz/auth/el/fi/podzim2023/PA153/um/07-lec0506-rnn.pdf * jiný pohled na jazykové modelování - model nám dává pravděpodobnost následujícího slova na základě kontextu * vychází z: ![image](https://hackmd.io/_uploads/HJGl9BsH0.png) ### Rekurentní sítě * neuronové sítě ve kterých informační proud není striktně dopředný, což dovoluje vstupům ovlivňovat výpočet sítě i nad vstupy procházející sítí v budoucnu * budují si určitý typ vnitří paměti * pro snazší vizualizaci a pochopení je lze rozvinout a vytvořit tak kvazi dopřednou síť * loss je cross-entropy * model vrací distribuci pravděpodonosti následujícího slova přes slovník * label je one-hot-encoded správné následující slovo ![image](https://hackmd.io/_uploads/BJ2uArjrR.png) ![image](https://hackmd.io/_uploads/Sk0E5HsSA.png) * text se obvykle nařeže na menší kusy => častější updaty nejsou tolik náročné na paměť => SGD * **teacher forcing** = pokud architektura RNN obsahuje zpětnou cestu z výstupního neuronu, můžeme modelu při tréninku vyměňovat jeho (pravděpodobně chybné) odhady následujícího slova za pravdivý label. Tím pádem ho jeho vlastní průběžné chyby nebudou plést * autoregresivní generování textu (výstup z modelu cpeme zpět jako následující vstup) ![image](https://hackmd.io/_uploads/Bkl2g8oHC.png) ![image](https://hackmd.io/_uploads/ByAJ-UjHC.png) #### Vanishing gradient problem ![image](https://hackmd.io/_uploads/Hy0PbIiSA.png) ![image](https://hackmd.io/_uploads/HJKF-IjH0.png) - Opacne taky exploding gradient - ten se da clipovat, ale co vanishing gradient? => #### LSTM soucasti otazky https://hackmd.io/Dd7PryIlSjSiTSusk0kHlg ![image](https://hackmd.io/_uploads/rkOFL8iH0.png) ![image](https://hackmd.io/_uploads/SkjqLIoHR.png) ### Další využití RNN (zpracování sekvencí) * part-of-speech tagging * named entity recognition * zakódování celé věty (encoder) => klasifikace věty * zakódování a následné dekódování (encoder-decoder) * sumarizace * question answering * strojový překlad * transkripce audia ### Transformery součástí otázky: https://hackmd.io/FSCQMYT7TLS6opVxqK_0EQ ## Odpovídání na otázky, strojový překlad. ### Strojový překlad (Neural machine translation, NMT) - standardně architektura encoder-decoder - ale decoder-only transformery to zvladají taky supr - stejné jako obyčejný language modelling, ale generujeme na základě vstupu a navíc už vygenerovaného prefixu - potřeba velkých paralelních korpusů - ke klasickým RNN a bidirectional RNN přibyla Attention - pak už rychlá cesta k transformerům ![image](https://hackmd.io/_uploads/HJOANwoH0.png) ![image](https://hackmd.io/_uploads/By9mBDsHR.png) #### Metody generování - greedy decoding - beam search - sampling - top-k - top-p - sampled beam search - temperature parameter ### Odpovídání na otázky (Question answering, QA) - velice komplexní problém - různé typy otázek - faktické/nefaktické - uzavřená/otevřená doména - výběr z možností/otevřená otázka - porozumění textu (SQuAD dataset) - různé typy odpovědí - krátký kus textu (abstraktivní/extraktivní) - seznam - výběr z možností - ... #### Deep learning QA systémy ##### Porozumění textu (nejlehčí typ QA) - obvykle end-to-end modely (na rozdíl od dřívějších systémů typu IBM Watson) - SQuAD dataset - **vstup**: úryvek z Wikipedie, otázka - **výstup**: odpověď na otázku, která lze najít v úryvku - kolem roku 2021 začaly neuronky porážet lidi - Stanford attentive reader - 2 bidirectional LSTM s attention - predikuje začátek a konec části úruvku, která je odpovědí - BERT based modely - překonaly lidské skóre na SQuAD - **vstup**: [CLS]<otázka>[SEP]<úryvek> - pro každý token "nad úryvkem" spočítáme pravděpodobnost, že je start/end - pravděpodobnost se určí tak, že se výstupní hidden state z BERTa (pro každý token jeden vektor) vynásobí s trénovanými START a END tokeny a strčí se to do softmaxu ##### Otevřené otázky - nemáme k dospozici žádný úryvek -> buď si ho systém musí najít sám, nebo musí odpověď znát - **document retriever** + **document reader** kombinace - i retriever se dá trénovat - reader si přečte nabídnutý text a buď ohraničí nebo vygeneruje odpověď - obecné LLM - buďto si odpovědi pamatují z tréninku - nebo můžou vyhledávat na webu ### Metriky pro evaluaci generativních modelů Vyhodnocovat automaticky generativní modely je těžké, a existuje řada metrik. Jejich kvalita se obvykle posuzuje podle toho jak korelují s lidským posouzením. Při počítání evaluačních metrik se předpokládá znalost nějakých referenčních výstupů (překladů). #### WER (Word Error Rate) - založené na edit distance (Lehvenstein) na úrovni slov $$ \text{WER} = \frac{S + D + I}{N} $$ kde: - $N$ je počet slov v referenci - $S$ je počet substitucí - $D$ počet smazání (Delete) - $I$ je počet vložení (Insert) #### BLEU, SacreBLEU - BLEU je rodina metrik založená na precision n-gramů - Přes rozdílné $n$ (jako n-gramů) se dělá vážený geometrický průměr. geometrický průměr zvýhodňuje predikce, které mají **naráz** dobré přesnosti na úrovni 1-gramů, 2-gramů, ..., - BLEU penalizuje příliš krátké výstupy protože ty mají obvykle vysokou přesnost (na úkor recallu) - SacreBLEU je konkrétní konfigurace (vhodný default) #### Rouge-N, Rouge-L - Rouge-N: - $n=2$ počítá bigramy, $n=3$ trigramy... - za Rouge se bere recall na n-gramech - některé zdroje ale uvádí, že Rouge je F1 skóre (harmonický průměr recallu a precision) - Rouge-L - založena na LCS - longest common subsequence