NPFL068 - Martin Majlis

Assignment 2

Zadání

Best Friends

V této úloze bylo mým cílem zjistit, která slova se nejčastěji vyskytují společně, a která se naopak společně vyskytují nejméně. Abych toto určil, použil jsem pointwise mutual information (dále jen PMI). Ze vzorečku vzoreček plyne:

Čeština - sousedící

LevéPravéPMI
HamburgerSV28.7299168703278
LosAngeles28.1248967172654
TomášJežek27.7324437983568
Č.Budějovice27.589138214545
JohnaNewcomba27.5257761535475
Lidovénoviny27.5078542455503
turnajovésérie27.4968654946523
Lidovýchnovin27.4489605564967
teplotaminus27.4224883451355
jadernézbraně27.3964931366026
lidskýchpráv27.166340324887
sérieATP27.1443995935794
JánČarnogurský27.1334587307688
veřejnéhomínění27.1248967172654
PohárUEFA26.9288410111603
jadernýchzbraní26.8907058822735
únoru194826.8819199637728
vzájemnýchvztazích26.8699473221067
městskéhozastupitelstva26.7664427463529
ŠKPBratislava26.7350785754435
 
LevéPravéPMI
.ale0.139905420110418
,být0.110635650583036
,Na-0.0208691325454561
a--0.0523673146472103
:,-0.131735577102845
.tak-0.200707238041871
.jsou-0.213381068076982
.o-0.274124258630837
.bude-0.372516883829126
.ve-0.490020968674514
.?-0.526025922130008
,?-0.711184633412841
.to-0.71315723897866
,(-0.747964482687601
.z-0.841164851354731
na.-0.87196476673567
,--0.970262576321843
.že-2.51923675646737
.se-3.51326991470556
,.-4.0500587401917

Angličtina - sousedící

LevéPravéPMI
LaPlata28.6017884035734
AsaGray28.3267813560735
facedtumbler27.6948978079649
lowlyorganised27.511813249906
FritzMuller27.3090066543455
MalayArchipelago27.279860308686
worthwhile27.1803246351351
shoulderstripe27.0008843589832
GreatBritain26.7620120038234
branchedoff26.6722779220993
restrictedranges26.5847148902144
receivecolonists26.4053911907699
familiarexamples26.4053911907699
westernshores26.3912214176337
Englishcarrier26.3729697130775
selffertilisation26.3708339687335
mentalqualities26.3090066543455
entireabsence26.2018577966847
moveablemandible26.1643830912661
deservesnotice26.1643830912661
 
LevéPravéPMI
.to-0.567853271031073
,case-0.58763857753321
ofI-0.753353069474304
ofin-0.773492540489505
.and-0.851725538669221
ofon-1.21822172470515
toand-1.22824288513299
a,-1.56264605218956
.in-1.63388564569516
of,-1.72395977860991
ofand-1.72829802762977
and.-1.82385647953925
toof-1.98687943910381
ofto-2.02938826071278
inof-2.11894418843199
.of-2.61036209264004
thebe-2.90618958427749
.the-3.11586688002525
of.-3.34112958748089
the,-4.73496935338032

Tabulky pro oba jazyky vypadají vypadají velmi podobně. Nejčastěji se spolu vyskytují více slovná vlastní jména a ustálená slovní spojení. Naopak nejméně často se spolu vyskytují slovní spojení, která se vedle sebe můžou vyskytnout jen v důsledku nějaké chyby při předzpracování text (2 interpunknční znaménka, 2 pomocná slova).

Čeština - vzdálená

LevéPravéPMI
výhervýher23.8105663696109
želžel23.439298780593
SandžakuSandžaku23.2668468511216
BělehradBenfica23.1293433273717
BenficaBělehrad22.9918398036218
PetrofPetrof22.9631704607905
CIACIA22.9449187562343
IVvýher22.7074194425076
BělehradAtény22.7074194425076
BenficaAtény22.6439165002015
BělehradKyjev22.6388156285086
IFSIFS22.6152471573702
teplotateplota22.5298812569554
silničnísilniční22.5298812569554
OKDOKD22.5298812569554
BělehradBělehrad22.5298812569554
želkm22.4970751118722
393922.4777436336203
VPNODÚ22.4043503748716
ODÚVPN22.4043503748716
 
LevéPravéPMI
:19481.41975739410623
že=1.36771178952097
:výročí1.33229455285589
:rodiny1.33229455285589
:pokles1.33229455285589
:mohly1.33229455285589
:dnů1.33229455285589
aBělehrad1.32634713583647
:opatření1.17182988066265
:zahraničního1.09782929921887
:koalice1.09782929921887
:privatizačních1.02743997132747
:atd1.02743997132747
"#0.773772790575014
:pravděpodobně0.719317675965139
:životní0.664869891942763
v13h0.556124858891647
:vývoj0.512866798497712
:hospodářské0.290474377161265
se#-0.0877930363840365

Angličtina - vzdálená

LevéPravéPMI
driedfloated23.1242166556261
drieddried22.7351743648802
driedgerminated22.5976708411303
germinateddried22.4601673173803
floateddried22.2762197490711
germinatedfloated22.2642471074051
metamorphosedmetamorphosed22.24974753771
drieddays22.24974753771
cavecave22.24974753771
Pacificeastern22.1811913676775
heathheath22.1142126679488
headsheads22.1002713722939
vibraculaavicularia22.0232390079013
pouterfantail21.9867131318762
headsclover21.9747404902101
THETHE21.9460711473788
easternPacific21.9401832681737
yellowyellow21.9278194428226
mudmud21.9278194428226
fosterfoster21.9278194428226
 
LevéPravéPMI
havegerminated3.384500552334
,arguments3.37263063587984
speciescells3.34600374503857
thecompetitors3.3372220745172
theinternal3.32189042076121
thehome3.31694967949094
thedried3.30327474259386
speciesmasters3.30020005542545
speciesglands3.30020005542545
speciesbeauty3.30020005542545
asbars3.29796500150524
havedecrease3.25896967025014
thegeometrical3.21838584500735
theconclusions3.21212685453567
bepupae3.15954743397048
ofrarer3.05940205087046
speciesflying3.05227254198186
speciescomb2.97827196053809
specieswax2.90788263264669
speciesbones2.25580593606699

Pro obě tabulky opět platí, že jsou velmi podobné. Výskyt dvou stejných slov je způsoben tím, že několik sousedících vět (vzdálenost 50) popisuje jedno téma, a proto se v ních opakuje jedno slovo.

Český korpus obsahoval velké množství výsledků sportovních utkání (fotbal a tenis), které obsahovaly velké množství čísel a dvojteček. Toto je patrné zejména na české tabulce s negativními asociacemi.

Přijde mi zajímavé, že jsou všechny hodnoty kladné (kromě 1 hodnoty pro češtinu)

Zdroje

Řešené je možné získat pomocí příkazu make task1, případně pomocí ./task1a.pl CORPUS pro sousední slova a ./task1b.pl CORPUS pro vzdálená slova.

Word Classes

V této úloze bylo mým úkolem spočítat úplnou hierarchii slov. Použil jsem prvních 8000 slov z korpusu. Pomocí hladového algoritmu, který využíval vzájemnou informaci (mutual information, MI) jsem slučoval slova, která se v korpusu vyskytla alespoň 10 do tříd. Ostatní slova jsem používal jen pro výpočet pravděpodobností.

Nejdříve jsem implementoval základní verzi algoritmu, která byla dostatečně rychlá pro všechny zadání, kromě slučování značek v českém korpusu. Optimalizovaná verze dává rozdílné výsledky, protože díky chybám v zaokrouhlování se hodnoty mírně liší. Výsledek také ovlivní, pokud si pamatujeme první nebo poslední největší zrátu.

Čeština - slučování

TřídLevéPravéMIΔNová třída
60listopaduOKD7.558001627774080.00308288427059992((listopadu) + (OKD))
59kterýkteré7.555682855708430.00337715725827173((který) + (které))
58státuJ7.553072861224960.00403078845443623((státu) + (J))
57násbylo7.549810412293440.00443001740582646((nás) + (bylo))
56musíbude7.545924731598990.00443832113333579((musí) + (bude))
55aleaby7.542263645468710.00458514828119256((ale) + (aby))
54sinás7.538419301539960.00433575562679432((si) + ((nás) + (bylo)))
53musí7.532739977259430.00472057564992331((už) + ((musí) + (bude)))
52pouzebýt7.526574596702580.00474951358616901((pouze) + (být))
51však7.522182152479350.00468440359779063((však) + ((už) + ((musí) + (bude))))
50zesi7.515200021806390.00499826269513748((ze) + ((si) + ((nás) + (bylo))))
49NATO&slash;7.50672053037140.0049734009713178((NATO) + (&slash;))
48ustátu7.501909779699720.00530621996946778((u) + ((státu) + (J)))
47jehoNATO7.493733929028280.00500827752330371((jeho) + ((NATO) + (&slash;)))
46zákonaze7.486700908695530.00517320151793244((zákona) + ((ze) + ((si) + ((nás) + (bylo)))))

Sloučení slov (který + které) a (musí + bude) do jedné třídy hned nazačátku je podle očákávání. Sloučení (listopadu + OKD), případně (státu + J) je překvapivé.

Čeština - třídy

  1. (a)
  2. (,)
  3. (")
  4. (((že) + (((který) + (které)) + ((ale) + (aby)))) + (((ČSFR) + ((jsou) + (byl))) + ((pro) + ((pouze) + (být)))))
  5. (v)
  6. ((s) + ((po) + ((od) + (mezi))))
  7. ((((zákona) + ((ze) + ((si) + ((nás) + (bylo))))) + ((za) + ((však) + ((už) + ((musí) + (bude)))))) + ((do) + ((V) + (Na))))
  8. (((z) + ((včera) + ((listopadu) + (OKD)))) + ((i) + (:)))
  9. (-)
  10. (.)
  11. ((se) + ((je) + ((jako) + ((budou) + (?)))))
  12. (()) + (())
  13. (((ve) + ((u) + ((státu) + (J)))) + ((to) + ((při) + ((před) + ((jeho) + ((NATO) + (&slash;)))))))
  14. ((o) + ((k) + (by)))
  15. (na)

Na těchto třídách mi přijde zajímavé, že předložky (na) a (v) zůstaly samostatné, přestože již existuje několik tříd, které předložky obsahují - 6, 13, 14. Také je zajímavé, že interpunkční znaménka (,), (.), (-) zůstaly samostatně. Zřejmě je to způsobené tím, že se používají v rozdílých kontextech.

Angličtina - slučování

TřídLevéPravéMIΔNová třída
111subjectcase4.997263261625180.00219656653357569((subject) + (case))
110maycannot4.995510785787680.00267307199568141((may) + (cannot))
109structureindividuals4.993285158018070.00267867444717366((structure) + (individuals))
108thereIt4.991053279302440.00348686342639491((there) + (It))
107variationstructure4.988015826053030.00326440020171332((variation) + ((structure) + (individuals)))
106lesseven4.983278939883840.00366788840496749((less) + (even))
105whatthere4.980063338040470.00371129669485222((what) + ((there) + (It)))
104shallsee4.974949913925010.00373999234908198((shall) + (see))
103suchless4.971490020810170.00386262176886489((such) + ((less) + (even)))
102distinctcertain4.966520184866230.00381367578955801((distinct) + (certain))
101slightshort4.962963846387320.00393371087351907((slight) + (short))
100variationnature4.959493231827280.0040345181712515(((variation) + ((structure) + (individuals))) + (nature))
99subjectstate4.955796798866490.00412132286218402(((subject) + (case)) + (state))
98mustcan4.951952743830510.00416841070827361((must) + (can))
97whenif4.948121463670930.00420406443163896((when) + (if))

Podle očekávání se na začátku sloučila pomocná slovesa (may + cannot), (must + can), stejně jako zájména (there + it) a spojky (when + if).

Angličtina -třídy

  1. ((((which) + ((what) + ((there) + (It)))) + ((very) + (((variation) + ((structure) + (individuals))) + (nature)))) + ((it) + ((is) + (has))))
  2. (((that) + ((slight) + (short))) + ((so) + ((but) + (and))))
  3. (((with) + (((when) + (if)) + (((varieties) + (races)) + ((conditions) + (breeds))))) + ((more) + ((from) + (In))))
  4. ((((we) + ((than) + ((such) + ((less) + (even))))) + ((often) + (not))) + ((on) + ((of) + (between))))
  5. ((to) + (((they) + ((only) + (how))) + ((their) + ((our) + ((my) + ((great) + ((domesticated) + ((distinct) + (certain)))))))))
  6. ((have) + ((by) + (at)))
  7. (((wild) + (((shall) + (see)) + ((believe) + ())))) + ((same) + ((most) + (many))))
  8. ((((the) + (each)) + ((an) + (a))) + (((several) + (its)) + ((one) + ((me) + ((differ) + (())))))
  9. (((((would) + ((must) + (can))) + ((will) + (could))) + ((may) + (cannot))) + ((been) + ((are) + ((The) + (I)))))
  10. ((or) + ((much) + (long)))
  11. ((in) + ((for) + (as)))
  12. (((this) + ((these) + ((nearly) + ((do) + ((cases) + (animals)))))) + ((some) + ((any) + (all))))
  13. ((be) + (.))
  14. ((;) + (,))
  15. (((under) + (((subject) + (case)) + (state))) + (((species) + ((manner) + (facts))) + ((plants) + ((other) + ((domestic) + ((different) + (:)))))))

Pro angličtinu mi přijde zajímavá třída číslo 9, která obsahuje pomocná slovesa.

Zdroje

Tag Classes

Tento úkol je velmí podobný úkolu Word Classes. Jen místo slov jsem použil značky. Prováděl jsem slučování těch značek, které se vyskytly alespoň pět krát.

Čeština měla 676 takovýchto tříd, zatímco angličtina jen 35.

Čeština

TřídLevéPravéMIΔNová třída
676CrIP6----------AAIP6----3A----1.652566791267020((CrIP6----------) + (AAIP6----3A----))
675NNNXX-----A---8J^------------81.652567725939432.53247078646642e-06((NNNXX-----A---8) + (J^------------8))
674PSFS6-P1-------AAFS6----2A----1.652566128972091.1930582269243e-05((PSFS6-P1-------) + (AAFS6----2A----))
673Vi-P---1--N----PJXP2----------1.652555139574332.002719144699e-05((Vi-P---1--N----) + (PJXP2----------))
672PSFS6-P1-------AAFS6----3A----1.65253605009012.0320662501027e-05(((PSFS6-P1-------) + (AAFS6----2A----)) + (AAFS6----3A----))
671AGIP3-----A----AAIP3----3A----1.652516668541182.2740379430976e-05((AGIP3-----A----) + (AAIP3----3A----))
670PZXP6----------PSXP6-P1-------1.652494873800292.33503104394993e-05((PZXP6----------) + (PSXP6-P1-------))
669PLXP6----------AGFP6-----A----1.652472491002852.36489903890711e-05((PLXP6----------) + (AGFP6-----A----))
668PSFS7-P1-------AGFS7-----A----1.652449797248662.61364738529226e-05((PSFS7-P1-------) + (AGFS7-----A----))
667VB-S---2P-NA---NNNXX-----A---81.652424616032612.62461565891859e-05((VB-S---2P-NA---) + ((NNNXX-----A---8) + (J^------------8)))
666CrNP6----------AANP6----1A----1.652376335122692.7001722845481e-05((CrNP6----------) + (AANP6----1A----))
665AAFP7----2A----AAFP7----1N----1.65234801496382.78939134954551e-05((AAFP7----2A----) + (AAFP7----1N----))
664AAIS6----3A----AAIS6----1N----1.652321071780832.7920856205121e-05((AAIS6----3A----) + (AAIS6----1N----))
663PDFS3----------ClFS3----------1.652294117901942.92521506371643e-05((PDFS3----------) + (ClFS3----------))
662PWZS6----------AAIS6----3A----1.652265841671112.82919116085627e-05((PWZS6----------) + ((AAIS6----3A----) + (AAIS6----1N----)))

Z výsledku je patrné, že se nejdříve slučovaly slovní druhy, které se ve větě podobně chovají. Například hned první sloučení je mezi číslovkou a přídavným jménem se shodou v čísle a pádě. Většina výsledků z první patnáctky jsou sloučení neurčitých zájmén, číslovek a přídavných jmén se shodou v čísle a pádě.

Angličtina

TřídLevéPravéMIΔNová třída
35WP$RBR0.8833476441158760.000218938901571533((WP$) + (RBR))
34WP$JJR0.883126174336010.000348883371974458(((WP$) + (RBR)) + (JJR))
33NNPSSYM0.8827747584553610.00081936595676983((NNPS) + (SYM))
32PRPEX0.8819528562315510.00108471985485757((PRP) + (EX))
31NNPFW0.8808655951510470.0012186099436301((NNP) + (FW))
30(.0.8796444384175160.00131696119660064((() + (.))
29WP"0.8783183996447370.0013896994339382((WP) + ("))
28JJJJS0.8769261410439610.0017369574603936((JJ) + (JJS))
27WP$RBS0.8751866165077280.00210767263749093((((WP$) + (RBR)) + (JJR)) + (RBS))
26WPWRB0.8730763672085170.00231054429217332(((WP) + (")) + (WRB))
25DTPRP$0.870763235751010.002654018724977((DT) + (PRP$))
24CDJJ0.8681066178033690.00328816183362138((CD) + ((JJ) + (JJS)))
23NNPNNPS0.8648158418212810.00364973320405668(((NNP) + (FW)) + ((NNPS) + (SYM)))
22WPWDT0.861163477907310.00601226015664256((((WP) + (")) + (WRB)) + (WDT))
21,:0.8551485597929790.0059474568665758((,) + (:))
20VBNVBD0.8491984180136840.00619973092647955((VBN) + (VBD))

Ve druhém kole slučování se sloučí komparativ přídavného jména a příslovce. V osmém kole dojde ke sloučení přídavných jmen.

Zdroje

Assignment 3

Textový korpus jsem rozdělil na část pro testování (40000 slov), vyhlazování (20000 slov) a zbytek. Velikosti jednotlivých částí jsou nepatrně větší, protože jsem korpus dělil po větách.

Příprava dat

Celkově jsem vytvořil 5 různých rozdělení. První dva způsoby dělení jsem použil ze zadání (testovací data, 20000 slov na vyhlazování, 40000 slov na testování) a (40000 slov na testování, 20000 slov na vyhlazování, testovací data). Pro zbylá 3 dělení jsem použil náhodné rozdělení. Tento přístup jsem zvolil, abych se vyhnul problémům, když by jednotlivé části korpusu byly získány z různých zdrojů.

Spuštění

Data se připraví pomocí příkazu ./prepare-data.pl CORPUS. Výsledkem je 15 nových souboru CORPUS.01.train, CORPUS.01.heldout, CORPUS.01.test, CORPUS.02.train, ..., CORPUS.05.test.

Většině pomocných skriptů stačí zadat jako parametr CORPUS.01 a skript sám použije jednotlivé soubory.

Vyhodnocení

Součástí Brillova taggeru je také skript pro vyhodnocení úspěšnosti na slovech. Já jsem se rozhodl použít vlastní skript eval.pl, který spočítá úspěšnost na jednotlivých slovech i větách. Také vypíše nejčastější chyby. Spouští se pomocí příkazu ./eval.pl CORPUS_EXPECTED CORPUS_ACTUAL

Experimenty

Ke každému taggeru existuje Makefile, který provede všechny akce s konkrétním taggerem.

Pro spuštění úkolu s brillovým taggerem stačí jen napsat: nohup nice -n19 make -f Makefile.brill > out.brill &.

Ke každému taggeru také existuje pomocný skript, který provede natrénování i vyhodnocení na zadaném korpusu.

Tento pomocný skript vytvoří adresář CORPUS_TAGGER, do tohoto adresáře překopíruje použité soubory, a také v něm vytváří všechny pomocné soubory. Výsledek je v souboru CORPUS.result. Spuštění skriptu může vypadat například takto: ./brill-tagger.sh texten2.ptg.01.

Brill Tagger

Brillův tagger jsem získal ze zdroje uvedeného na wikipedii.

Aby bylo možné tento tagger použít i pro češtinu, tak jsem musel změnit velikost bufferu pro maximální velikost řádku z 500 na 50000 (ani zvětšení na 5000 nebylo dostatečné).

Nejdříve jsem nastavil prahovou hranici pro ukončení učení nových lexikálních a kontextových pravidel na 3. Na anglických datech trval celý proces 2h, zatímco na českých datech ani 12 dní nestačilo.

Proto jsem postupně zvyšoval prahové hranice pro lexikální a kontextová pravidla. Nakonec jsme použil hodnoty (30, 10) (lexikální, kontextové).

Pro češtinu jsem zjistil, že používání nízkých prahových hodnot nepřináší příliš výhod:

DobaSlovaVěty
12 dní84.5183%24.1216%
8 hodin84.3085%20.0249%
7 hodin83.6464%18.6539%
6 hodin82.8245%17.2419%

Výsledky

  Angličtina (3, 3) Angličtina (30, 10) Čeština (30, 10)
Set Slova Slova (%) Věty Věty (%) Slova Slova (%) Věty Věty (%) Slova Slova (%) Věty Věty (%)
1. 37982/40009 94.9336% 599/1715 34.9271% 37771/40009 94.4063% 511/1715 29.7959% 33203/40005 82.9971% 539/2533 21.2791%
2. 38017/40004 95.0330% 621/1709 36.3370% 37831/40004 94.5680% 559/1709 32.7092% 33371/40015 83.3962% 473/2507 18.8672%
3. 38179/40010 95.4236% 663/1709 38.7946% 38067/40010 95.1437% 622/1709 36.3956% 33858/40001 84.6429% 501/2357 21.2558%
4. 38099/40004 95.2380% 623/1676 37.1718% 37898/40004 94.7355% 565/1676 33.7112% 33750/40000 84.3750% 507/2441 20.7702%
5. 38165/40027 95.3481% 643/1686 38.1376% 38006/40027 94.9509% 579/1686 34.3416% 33747/40028 84.3085% 482/2407 20.0249%
Celkem 95.0898% ± 0.4094% 37.0736% ± 1.5210% 94.8663% ± 0.2206% 33.3907% ± 2.4199% 83.9439% ± 0.7078% 20.4394% ± 1.0155%

Zvýšení hranic pro lexikální a kontextová pravidla příliš nesnížili úspěšnost taggeru na jednotlivých slovech, ale významně snižilo úspěšnost správného otagování celé věty.

Tagger měl na českých datech nižší úspěšnost. Tato nižší úspěšnost je důsledkem mnohem většího počtu značek a omezeným výhledem taggeru.

Pro češtinu často docházelo k chybám u tvarů, které mají mají stejné koncovky (viz ukázka). Toto bylo zřejmě způsebeno tím, že tagger měl přístup jen k sousedním slovům, takže nemohl určit nějaká lepší pravidla.

	NNIS1-----A----	NNIS4-----A----	127
	RR--6----------	RR--4----------	119
	X@-------------	NNMS1-----A----	88
	NNIS4-----A----	NNIS1-----A----	86
	NNFP1-----A----	NNFS2-----A----	85
	NNNS4-----A----	NNNS1-----A----	63	
	

Zdroje

HMM Tagger

V tomto úkolu jsem implementoval HMM tagger. Tento tagger používá trigramový model pro přechodové pravděpodobnosti (dvojice značek) a lexikální model pro výstupní pravděpodobnosti.

Pro vyhlazování jsem použil EM algoritmus z minulého semestru. U lexikálního modelu se navíc část heldout dat používá pro odhad distribuce neznámých slov.

Opět byl problém s českým korpusem. Proto jsem implementoval prořezávání, které v každé etapě nechávalo pouze N nejlepších stavů. Opět se ukázalo, že nemá příliš smysl optimalizovat algoritmus, protože snížením parametru N nedochází příliš k poklesu úspěšnosti.

Když jsem spustil HMM tagger s prořezáváním na 60 paprsků, tak pro angličtinu bylo potřeba jen okolo 150MB paměti, zatímco pro češtinu nebylo možné tento tagger spustit, protože potřeboval více než 4GB paměti.

Snížil jsem tedy počet paprsků na 15, takže i pro českou verzi stačilo 170MB paměti.

  Angličtina (60) Angličtina (15) Čeština (15)
Set Slova Slova (%) Věty Věty (%) Slova Slova (%) Věty Věty (%) Slova Slova (%) Věty Věty (%)
1. 37559/40009 93.8764% 543/1715 31.6618% 37560/40009 93.8789% 543/1715 31.6618% 32565/40005 81.4023% 469/2533 18.5156%
2. 37400/40004 93.4907% 534/1709 31.2463% 37399/40004 93.4882% 533/1709 31.1878% 32988/40015 82.4391% 513/2507 20.4627%
3. 37755/40010 94.3639% 587/1709 34.3476% 37758/40010 94.3714% 588/1709 34.4060% 33366/40001 83.4129% 546/2357 23.1650%
4. 37691/40004 94.2181% 570/1676 34.0095% 37697/40004 94.2330% 572/1676 34.1289% 33177/40000 82.9425% 552/2441 22.6137%
5. 37810/40027 94.4612% 603/1686 35.7651% 37814/40027 94.4712% 604/1686 35.8244% 33342/40028 83.2967% 548/2407 22.7669%
Celkem 94.0820% ± 0.3980% 33.4061% ± 1.9054% 94.0885% ± 0.4036% 33.4418% ± 1.95752% 82.6987% ± 0.8178% 21.5048% ± 1.9748%

Zdroje

HMM Tagger + Baum-Welch

Nesplněno.

Srovnání jednotlivých taggerů

Angličtina

  Brill HMM
Set Slova (%) Věty (%) Slova (%) Věty (%)
1. 94.4063% 29.7959% 93.8789% 31.6618%
2. 94.5680% 32.7092% 93.4882% 31.1878%
3. 95.1437% 36.3956% 94.3714% 34.4060%
4. 94.7355% 33.7112% 94.2330% 34.1289%
5. 94.9509% 34.3416% 94.4712% 35.8244%
Celkem 94.8663% ± 0.2206% 33.3907% ± 2.4199% 94.0885% ± 0.4036% 33.4418% ± 1.95752%

Oba taggery měly na setech 1 a 2 nižší úspěšnost, než na zbylých třech, které byly vytvořeny náhodně. To může být způsobeno tím, že korpus byl složen z několika tématicky rozdílných částí.

Oba taggery také dosáhly srovnatelných výsledků - jak na slovech tak na celých větách.

Čeština

  Brill HMM
Set Slova (%) Věty (%) Slova (%) Věty (%)
1. 82.9971% 21.2791% 81.4023% 18.5156%
2. 83.3962% 18.8672% 82.4391% 20.4627%
3. 84.6429% 21.2558% 83.4129% 23.1650%
4. 84.3750% 20.7702% 82.9425% 22.6137%
5. 84.3085% 20.0249% 83.2967% 22.7669%
Celkem 83.9439% ± 0.7078% 20.4394% ± 1.0155% 82.6987% ± 0.8178% 21.5048% ± 1.9748%

Opět nastala situace, kdy na náhodně rozdělených korpusech taggery dosáhly lepších výsledků, než na pevně rozdělených korpusech.

HMM tagger měl sice nižší úspěšnost najednotlivých slovech, ale měl vyšší úspěšnost na větách. To je zřejmě způsobeno trigramovým modelem, který je součástí HMM.

Závěr

V těchto úlohách jsem se naučil, že kvalita výstupu se přidáváním času zlepšuje velmi pomalu. Hlavně u úlohy s Brillovým taggerem, kdy po 288h běhu byla úspěšnost taggeru 84.5183%, zatímco už po 6h běhu je možné mít 82.8245% úspěšnost. Takže před nějakými pokusy o optimalizaci algoritmu je dobré nejdříve snížit parametry, a zjistit, o kolik se zhorší výsledek. Pokud není zhoršení příliš významné, nemá smysl se do optimalizací pouštět.

Kompletní zdrojové kódy