✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

Gadsimtu senas preses apskats. Katru dienu.

2020. gada 6. februārī, 14 komentāri

Ilgāku laiku man ir gribējies, lai e-pastā katru rītu iekrīt preses apskats. Ar simts gadu nobīdi. Cilvēka sagatavots, pārlapojot precīzi pirms simts gadiem šajā datumā iznākušos preses izdevumus. Var jau sapņot, ne? Vai arī...

Kādā garākā vakarā atrotīju piedurknes, saspļāvu pirkstos un ķēros klāt šo jautājumu papētīt. Nedaudz paķimerējos ar abiem periodika.lv frontendiem, tajos realizēto API izsaukumiem un skriptiem savā pusē. Kad attapos, bija uztapis šis.

Tad, nu, lūdzu. Šodiena pirms simts gadiem preses izdevumu virsrakstos. Katru dienu, kamēr kaut kas nenobruks.

Visi ieteikumi, pamanītās kļūdas, sūdzības un uzslavas vai nu tepat komentāros, vai tviterī @laacz, vai arīdzan uz e-pastu (laacz suņeic laacz.lv). Atspoguļojums nav nelegāls, jo ir saņēmis LNDB svētību.

Un tagad nedaudz pafilozofēsim. Ja vien neesi jau aizgājis un iekritis avīzēs :P

Veidojot šo, saskāros ar milzumu dažādu nianšu, ar kurām drošs, ka ir saskārušies arī LNB projektos iesaistītie, par lielu daļu no kurām 2013. gadā jau rakstīju.

Piemēram, datu kvalitāte. Ja neskaita to, ka vairākiem laikrakstiem ir vairāk nekā viens ieraksts, tad ir arī dažiem nekorekti metadati. Piemēram, Jaunākās Ziņas teitan ir ierakstītas kā spāniski esošas. Savukārt, "Kurzemes vārdam" vispār ir daudz dažādu nekorekti atpazītu nosaukumu.

Spāniski un daudzie Kurzemes vahrdi
Spāniski un daudzie Kurzemes vahrdi

Otra lieta, ar kuru saskāros uzreiz - atpazītā teksta kvalitāte. Savā ziņā tas pat ir labi, jo nedaudz piebremzēja manu vēlmi šo apskatu uztaisīt vēl bagātīgāku, kā rezultātā risinājums ir (manuprāt gaumīgi) tipisks proof of concept. Vecajā drukā pat pie diezgan labas attēla kvalitātes ar teksta atpazīšanu nav veicies sevišķi labi. Bet veco druku ignorēt mēs nedrīkstam. Vecā druka atsevišķiem laikrakstiem tika lietota pat līdz trīsdesmito gadu vidum.

OCR kvalitāte
OCR kvalitāte

Šo problēmu var risināt ar mašīnmācību, taču mans ML pagaidām nav tik labs ML, lai ķertos klāt šim jautājumam. Lai gan soļi vismaz teorētiskie ir skaidri.

  • Paņemam labākās kvalitātes attēlus.
  • Šos attēlus sagatavojam teksta atpazīšanai (kontrasti, robežas, krāsu balansi, utt).
  • Segmentācija (skanēto attēlu dalīšana rakstos), jau ir veikta - to tad varam paņemt esošo.
  • Sākam ar individuālu burtu atpazīšanas apmācību, lai nākamie soļi ietu raitāk.
  • Atpazīstam un rūpīgi ar actiņām validējam atpazīto saturu, pievēršot uzmanību tam, cik precīzi atpazīstās individuāli vārdi.
  • Vēlama arī normalizācija. Visi atpazītie vārdi ir paralēli jāpiefiksē normālformā. Tas ir solis, kurš atvieglos tālākās darbības.
  • No tā veidojam vārdnīcu, n-grammas, markova ķēdes, word2vec, jebko citu, par ko es pat neesmu dzirdējis - ko nu izdomājam un atzīstam par atbilstoši labu esam. Vārdnīcas esamība ir viens no priekšnosacījumiem kvalitatīvai teksta atpazīšanai.
  • Un tālāk jau sarežģītākais - teksta atpazīšanas modeļu izveide.
  • Kad modelis gatavs, neguļam. Turpinām apmācīt.

Paturam prātā, ka mūs interesē tikai saturs - ne reklāmas (segmentācijā tas ir norādīts). Jāapzinās arī viena būtiska problēma, kas prasa papildus OCR izveidot arī satura drukas klasifikatoru. Tas tāpēc, ka, lai arī gotika puslīdz izskatās vienādi, tā nebūt nav. Dažādās tipogrāfijās drukātie laikraksti var būtiski atšķirties. Pārejas periodā Latvijā bija laikraksti, kuri viena numura ietvaros tika iespiesti daļēji vecajā un daļēji jaunajā drukā.

Un, protams, ir arī ļoti sliktas kvalitātes avīžu attēli. Tos vajadzētu spēt ignorēt.

Vecā druka un tā laika regulārā ortogrāfijas nepastāvība rada vēl vairākas foršas problēmas. Turpinajums -> turpinahjums -> turpinājums, wehletaji un vēlētāji, eeeet - ieiet, Mandschurija - Mandžūrija, utt. Lai gan periodika.lv meklētājs šajā ziņā darbojas puslīdz labi. Ja neskaita to, ka nav iespēja ērti un vienkārši filtrēt atlasīto datu kopu.

Varētu šķist, ka visa šī padarīšana ir relatīvi triviāls uzdevums, kolīdz esi vienojies ar sevi par prasībām, stacku un izpildījumu. Bet velns slēpjas detaļās. Lai no visa šī būtu nopietna jēga, ir jābūt skrupulozam, gatavam visu pārstrādāt, spējīgam izvērtēt tagadnes stāvokli un to ekstrapolēt uz visa projekta rezultātiem, būt kritiskam, tanī pat laikā ne pārāk.

Es neko nepārmetu LNB un digitalizācijas projektam. Galu galā - finansējums bija tāds kā bija, mašīnmācības iespējas tolaik arī bija tādas, kādas tās bija. Zinu, ka drīzumā gaidāmi uzlabojumi pašā periodika.lv lapā. Bet šī ir lieta, kurai būtu jāpievēršas pastāvīgi, nevis tikai uz projekta laiku. Es pats atceros un pabakstos reizi divos gados. Varbūt uz pensiju būšu "uzkačājis" savus skillus, lai varētu sasniegt gribēto rezultātu. Bet varbūt nebūšu.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar

2020. gada 7. februārī, plkst. 00:34

Laika mašīna. Šobrīd jūtu ka viss ir saistīts un nekas nav nejaušs. Paldies !

Gravatar Pēteris

2020. gada 7. februārī, plkst. 02:11

Sanāca mazliet pielikt roku toreiz pie tā projekta; skatoties atpakaļ ir acīmredzams, ka (un kā tieši) ar šībrīža metodēm katru procesa elementu varētu uztaisīt būtiski labāk, jo šajā jomā pēdējos piecos gados dikti daudz kas ir mainījies... Taču "Bet šī ir lieta, kurai būtu jāpievēršas pastāvīgi, nevis tikai uz projekta laiku" diemžēl ir grūti realizējama lieta, nu, bišķi par lielu tas pasākums lai hobija līmenī to izvilktu, bet darītājiem algas maksāt tomēr var tieši tikai uz projekta laiku, nevis pastāvīgi - pastāvīgi sanāk tāpēc, ka ir citi projekti, kuros jādara citas lietas, nevis šī.

Par pāris konkrētām lietām: eeeet – ieiet tur bija likumbāzēts risinājums, kurš mazliet brutāls (jo nav vienas "vecās drukas", tur pārejas periodā ir dažādas variācijas) bet puslīdz ok strādā; tur šobrīd ar kādu mašīnmācīšanās neirontīklu sequence2sequence modeli tagad domājams varētu precīzāk izspiest. Tas ķieģelītis pat neprasītu ārkārtīgi daudz cilvēkresursu, viens studenta diplomdarbs vai cilvēkmēnesis zinātājam, bet tur jāskatās ar ātrdarbības sāpi, jo LNDB tekstu ir ļoti, ļoti daudz un jebkura netriviāla metode visam tekstam prasa padaudz laika.

Par OCR savukārt aprakstītos soļus principā tīri labi dara Tesseract opensource risinājums. Toreiz manuprāt gotikas OCR bija vietējo pietjūnēts FineReader, ja es pareizi atceros; tagad ar tiem pašiem treniņdatiem būtu jāsanāk labāk dēļ labākām metodēm, nu un ja sanāk, ka tie gotikas fonti ir tādi paši kā citās zemēs tai laikā (nezinu, vai tā ir), tad gan jau var no kāda Vāczemes projekta arī kaut ko aizņemties. Bet nu atkal, trūkst rociņu; pat ja būtu budžets, tad darītājus grūti noraut no kaut kā cita - jāmāca jauni.

Gravatar laacz Autors

2020. gada 7. februārī, plkst. 08:34

Par finansējumu Tev ir pilnīga taisnība. Bet līdzīgi ir ar kopetenču pirkšanu veikalā arī b2b attiecībās - reāli tur ir ko rakt un rakt, bet līgums beidzas un rakšana apstājas.

Ja mēs teoretizējam, tad ārpus budžeta finansētas amata vietas (ar vienu gan būs par īsu) varianti tomēr ir. Budžetu neizskatām, jo alga neliela un labs speciālists tur ne tikai nenāks, viņš raudās mājās spilvenā, gribēs iet, bet nav altruists.

Ārējais ilgtermiņa finansējums. Tehniski ļoti vienkārši, praksē sarežģīti. Atrast vienu vai vairākus uzņēmumus, kuri ir ar mieru ilgtermiņā nodrošināt finansējumu, lai varētu turēt inhausā vai ārpusē nelielu komandu šī visa risināšanai. Viens no modeļiem.

Nu, protams, eksistē arī tādi kā es - pa vakariem pabakstīties. Lai gan drošs, ka apkārt uzņēmumos ir milzumdaudz ML speciālistu (savādāk kā tie visi stārtapi sulu dabū?), ir vesela kaudze, kas tādu nav.

Ja dati būtu pieejami vienkāršāk (API, damps, utt), tad komplektā ar LU MII (see what I did here?:) nodrošinātu lielisku bezmaksas tiešsaistes ML kursu programmētājiem (kā neliels blakusefekts - Latvija kļūst par ML megadižlielvalsti!:D), kam augstākā matemātika un varbūtību teorija ir tikai nedaudz jāatsvaidzina...

Par tesseract - ja nemaldos, gotikai viņš bija jāpatčo un jātrenē 100% uz mūsu datiem. Un klasifikācijas daļa tāpat ir ārpus tesseract

Gravatar Mahris

2020. gada 7. februārī, plkst. 23:06

Man ir zināma pieredze ar Tesseract. Pirms 7 gadiem paņēmu tīklā darbiņu - kāda Āmurikas organizācija gribēja pārlikt modernā šriftā vecu reliģisku grāmatu gotikā. Piedāvāja stundu darbu ar likmi, varbūt pieņemamu tīrai driķēšanai, bet mani tas neapmierināja. Vienojos par gabaldarbu cerībā ar OCR dabūt labu sagatavi, kas prasītu nelielu roku darbu. Un sāku apmācīt Tesseract tās grāmatas specifikai. Kaut ko jau viņš deva, bet roku darbs izrādījās milzīgs. Kad pasūtītājs piedāvāja nākamo grāmatu, atteicos.

Tiesa, man vajadzēja labu tekstu. Vairāk vai mazāk saprotamam tekstam prasības pieticīgākas.

Gravatar Mahris

2020. gada 7. februārī, plkst. 23:14

Vispār īsti neatceros, ko lietoju. Tai virtuālajā mašīnā instalēti abi, Tesseract un Abby FineReader. Bet rezultāti stāv zem Tesseract.

Gravatar Pēteris

2020. gada 7. februārī, plkst. 02:17

Bet jāpiebilst, ka šādai bildei http://periodika.lv/periodika2-viewer/view/index-dev.html?lang=fr#panel:pa|issue:/p_001_blve1920n031|article:DIVL169|issueType:P ir dikti grūti dabūt labu OCR, padzisušus burtus uzminēt tīri pēc konteksta tekstam ne-mūsdienu ortogrāfijā ir dikti, dikti grūti.

Labāk manuprāt varētu, bet vai labāk būs labi... nezinu.

Gravatar Valdis

2020. gada 7. februārī, plkst. 22:47

Talk about good timing! Uldis B. no mūsu kopējiem Ozolnieku ceļojumiem pieminēja tavu rakstu. :)

Lieta tāda, ka esmu pieslēdzies vienam LNB projektam un nupat nupat pabeidzis pirmo Tesseract testu pielāgošanai Latvijas fraktur īpatnībām.

Rezultāti bija negaidīti labi (ap 98.5% accuracy kas ir daudz labāk nekā Abby un Tesseract 3.01 laikos).

Aptuvenais process bija šāds:

  • Pamīciju XML no LNB DOM
  • noskrāpēju vajadzīgās bildes
  • Veicu segmentāciju izmantojot vācu fraktur.
  • veicu arī sākotnējo OCR ar Tesseract ar vācu fraktur
  • No HOCR izvilku rindiņas
  • Sametu visu nelielā DB
  • Uzmetu mazu lapiņu kur kuratoriem veikt labojumus.
  • 2 mēnešus vairāki brīvprātīgie tiešām rūpīgi veica labojumus
  • Savācu ap 6k rindiņu kuros vismaz 2 labotāju domas SAKRITA
  • Parveidoju visas rindiņas uz Tesseract standarta .tif un .gt.txt (vēl neveicot nekādu īpašu attēlu apstrādi!)
  • Paņēmu labāko pēdejo vācu modeli (kurš trenēts ap 400,000 rindiņām un 5M epohiem ( 4 mēneši) un
  • Palaidu uz 50,000 epohiem (iepriekšējā nedeļas nogale) un turēju īkšus.

Esmu tiešām šokēts, ka ar pirmo piegājienu izdevās jau dabūt sakarīgus rezultātus tiesa gan tikai uz grāmatām. Avīzes vēl nav trenētas, skaidrs tur ies grūtāk(skanos spīd cauri teksts utt)

Vēl ļoti daudz jādara un droši vien līdz periodikai tas viss tik drīz nenonāks.

Principā viss process tagad vienreiz ir iziets bet tāds patrausls: https://xkcd.com/2054/

Patlaban meklēju nākamos korpusus, kur brīvprātīgajiem uzdarboties. Jebkurš var iesaistīties :)

Valdis S. https://frakturs.lnb.lv/

Gravatar laacz Autors

2020. gada 7. februārī, plkst. 22:55

Lieliski! Tas nozīmē, ka iestrādes jau ir. Bet 5M epohas ir ... dafiga. Bet, ja vajag, var noskreipot arī pašu saturu, segmentāciju un bildes no periodikas. Bet, cik saprotu, tas patlaban nav fokuss.

Gravatar Valdis

2020. gada 7. februārī, plkst. 23:39

Bez periodikas ir vēl labāki satura avoti. Skrāpēt periodiku būtu samēra nepatīkami )

Un par epohām, vācieši minēja ka viņiem šķiet strādā ar 99.7% accuracy uz tīriem avotiem.

Tur gan lauvas tiesas nopelniem jābūt tām 400k rindiņām kuras viņi ir iebarojuši. (tā teikt The Unreasonable Effectiveness of Data - https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/35179.pdf)

Ja mēs šeit Latvijā varētu izveidot kādu labu pārstāvošu korpusu no kādām 50k rindiņām mums arī ietu tīri labi.

Gravatar laacz Autors

2020. gada 8. februārī, plkst. 00:21

Bet periodika ir visizaicinošākais avots. Tur bez vairāklīmeņu klasifikatoriem neiztikt :)

Viegli jau ir uztrenēt uz Gūtenberga iespiedmašīnas knock-off'u elegantajiem fontiem un labi saglabātajiem materiāliem. Mums, diemžēl, skanētās periodikas kvalitāte ir ļoti dažāda. Gan iespiešanas ierīču atšķīrību dēļ, gan laika zoba dēļ.

Lai gan, ja paņem to pašu Valdības Vēstnesi, tad tam lielākoties ir lieliska kvalitāte. Bet tam arī ir visaugstākās kvalitātes druka.

Gravatar laacz Autors

2020. gada 11. martā, plkst. 13:25

Pienācis tas brīdis, kad esmu procesā tiktāl, ka saprotu pilnīgi visu, ko uzrakstīji (7. februārī tie bija apmēram 20%:D).

Viens kontroljautājums. Noprotu, ka izmanto rindiņu box'us, nedalot sīkāk pa burtiem. Tas ir ar nolūku? Mani tas interesē tamdēļ, ka fraktūrā tomēr ir ierasts apvienot atsevišķas burtu kopas ir ar ligatūrām vai tuvu pēc definīcijas (, ſ, ſ). Ja padarīšanu uztrenē atpazīt tos kā vienu veselu, tad precizitāti var uzlabot.

Gravatar laacz Autors

2020. gada 11. martā, plkst. 13:26

Ha. Fraktūras unikode pazuda. Iekavās ir (ch, st un si, kur "s" ir garais "s").

Gravatar Pēteris

2020. gada 11. martā, plkst. 21:29

Īsais komentārs par vecās drukas OCR darbiem, ko redzu Twitter utt.

Normālā gadījumā tiklīdz burtu atpazīšana puslīdz korekti strādā, liela daļa precizitātes pieauguma ir nevis no burtu atpazīšanas kvalitātes, bet no t.s. 'valodas modeļa', kas pasaka ka 'lietai' ir krietni ticamāks par 'lietd'; bet vecajai ortogrāfijai tur nekas sakarīgs visticamāk nav un 'leetai' viņam šķiet tikpat labs kā 'leetd'. Valodas modelim turklāt vajag daudz lielāku teksta apjomu nekā tīri burtiņiem.

Attiecīgi uzvarošais gājiens vecās drukas atpazīšanā būtu kaut kādā veidā iekļaut kādus lielus, korektus tekstus (bez obligāta piekārtojuma burtiņu bildēm) vecajā ortogrāfijā. Kaut vai Mērnieku laikus utt un pārliecināties, ka viņi tiek korekti ņemti vērā. Otrs variants būtu mākslīgi ģenerēt tādus tekstus - mūsdienu ziņām pārlaist pārveidotāju, lai 'nepiesienieties' būtu 'nepeeseeneetees'; pretējo versiju, piemēram, likumiem, kas vienā 8 gadus vecā projektiņā bija re kur - https://github.com/LUMII-AILab/Transliterator/blob/master/res/rules/fraktur.xml , tas varētu palīdzēt.

Gravatar laacz Autors

2020. gada 11. martā, plkst. 21:32

Ā. Es ikurāt šodien, braucot mājup, par šo domāju un nonācu pie secinājuma, ka 'valodas modelis' ir nākamais. Un vecās drukas korpusu iegūt varētu no LNB projekta. Drošs, ka dotu, bet tā ir literārā valoda, kas varētu nepasēt gana labi ar periodikā esošo. Un tad gandrīz iebraucu pakaļā vienam, jo iedomājos par senāku tekstu transliterāciju vecajā drukā un šķita, ka tā ir nevienam nekad nekur prātā neienākusi ideja. Izrādās, ka ne :D

Bet es šito vilkšu gadiem, jo katrs nākamais solis automātiski rada vēl trīs citus :D