DP:xsotona:Výsledky

Z FI WIKI
Přejít na: navigace, hledání
  • přepsal jsem DTD verticalu do XML Schema a Relax NG
  • pročetl jsem dokumentaci k projektu Parcels - systém využívající algoritmů strojového učení k detekci nezajímavých častí webových stránek jako jsou reklamy, nesouvisejicí odkazy, atd.
  • při úpravě systému Parcels jsem narazil na několik problémů:
    • Hotovo - Bylo nutné vytvořit vstupní korpus pro QTAG. Jako zdrojový korpus jsem použil DESAM (cca 1,2 milionů řádků, 20 MB; včetně XML značek). Po odstranění, špatně označkovaných slov a XML značek z něho vyšel korpus s 860 tisicí pozicemi, 8,3MB). Množinu POS tagů jsem zvolil takto (zatím základní slovní druhy; viz Desambiguační manuál):
      • k1 = podstatná jména (substantiva)
      • k2 = přídavná jména (adjektiva)
      • k3 = zájmena (pronomina)
      • k4 = číslovky (numeralia)
      • k5 = slovesa (verba)
      • k6 = příslovce (adverbia)
      • k7 = předložky (prepozice)
      • k8 = spojky (konjunkce)
      • k9 = částice (partikule)
      • k0 = citoslovce (interjekce)
      • kA = zkratky (abreviace)
      • kY = [kdyby/aby/by]
    • QTAG (POS tagger) má problémy s českými znaky; problém je pravděpodobně v špatně nastaveném kódování (asi napevno ISO Latin 1) při vytváření zdrojových souborů z označkovaného korpusu. Bohužel není dostupný zdrojový kód, proto jsem kontaktoval autora s žádostí o pomoc (6.2. 2005). Možné řešení je převést české znaky na HTML/XML entity, ale za cenu zvětšení velikosti zdrojových souborů zhruba 1,5x. Řešení by také bylo použití jiného POS taggeru např. Stanford Part-Of-Speech Tagger
      Řešení - non US-ASCII znaky převadím na XML entity (StringEscapeUtils z Jakarta Commons Lang)
    • Další problémem se zdá výkonnost QTAGu. Velikost korpusu je hlavním atributem ovlivňujícím výkon. Jednou z možností jak zlepšit výkon je zmenšení korpusu (např. odstranění nejfrekventovanějších slov); test na 18 slovech 860 000 pozic - 290 s, 20 000 pozic - 79 s, 10 000 pozic - 1,28 s
      Řešení - problém byl v tom, že při převodu z korpusu DESAM se do zdrojoveho korpusu pro QTAG dostala špatně označkovaná slova (např. pr řádek "a tak a tak k8xC" se do QTAG korpusu dostal řádek "a tak" - slovo "a" s tagem "tak") a s tím potom rostla složitost při tagování textu.
    • PTBTokenizer, který Parcels používá k rozdělění textu do slov, neumí správně rozdělovat české věty (problémy mu dělají především české znaky).
      Řešení - Napsal jsem si vlastní tokenizer.
    • Parcels pro počáteční anotování stránek použivá CGI skripty v Perlu běžící na HTTP serveru. Bylo nutné přepsat Perlové skripty do Javy a vybrat vhodný HTTP server v Javě. Jako HTTP server jsem vybral Simple, dále jsem napsal několik services (obdoba servletů) pro obsluhu anotací.
  • Předělal jsme grafické rozhraní, takže nyní používá framework JPF. To znamená že lze jednoduše přidávat funkcionalitu pomocí systému pluginů.
  • Musel jsem v systému Parcels nahradit parser a čistič HTML JTidy - nedokázal se například vypořádat se stránkami, které obsahovaly nesprávně umístěnou procesní instrukci <?xml version="1.0"?>. Jako náhradu jsem použil NekoHTML.
  • Přidal jsem podporu pro hromadné zadávání adres. Zadávání je tvaru "[zOD-DO]", kde
    • z - doplňovat úvodní nuly
    • OD - počáteční index
    • DO - koncový index

Například http://www.domain.com/?page=[z1-10] přidá adresy http://www.domain.com/?page=01 až http://www.domain.com/?page=10. Je možné zadávat více sekcí [zOD-DO] v jednom URL.

  • Přidal jsem podporu pro vícenásobné označkování bloku a jednoduchý export/import definic označkování. Xsotona 16:34, 1. 8. 2006 (CEST)


Popis funkce

Software je založen na systému Parcels
pracuje v několika krocích:

  • stáhne stránky zadané pomocí URL, vyčistí HTML pomocí nástroje JTidy, a vygeneruje soubory pro anotaci. Soubory pro anotaci jsou generovány z vyčistěné verze stránky - text na stránce je rozdělen do jednotlivych bloků, které jsou pak anotovány. Rozdělení do bloků by do určité míry mělo odpovídat tomu jak prochází stránku člověk.
  • v počátku je nutné ručně oanotovat alespoň malou množinu stránek; data z oanotovanych stránek jsou uložena v samostatném souboru (standartně annotations.tsv);
    je připravena aplikace pro ruční anotování (jednoduchý webserver, který postupně předkládá stránky k anotaci)
Řuční anotace stránek pomocí webového prohlížeče
  • dálé pomocí strojového učení s učitelem (data z ruční anotace a množiny lexikálních, stylistickým a kombinovaných vektorů viz dále) systém natrénuje model. Strojové učení používá metody co-training (stylistická a lexikální část) a bootstraping (s pomocí malé množiny oanotovaných dat a velké množiny neoanotovaných dat dává lepší výsledky než pouze s malou množinou oanotovanych dat); před samotným trénováním si ze stažených a vyčištěných stránek a oanotovanych dat (annotations.tsv) vygeneruje vstupní soubory pro učení:
    • lexikální vektory - každému bloku textu (viz výše) odpovídá jeden vektor, vektor obsahuje seznam a počet slov, statistické informace (např. zastoupení slovních druhů; použit POS tagger QTAG), počet odkazů (textový odkaz, odkaz obrázkem), odkaz na email.
    • stylistické vektory - např. cesta k bloku v DOM modelu, hloubka zanoření, jméno bloku, rodičovský tag, počet tagu <br>, <a>, <i>, <b>, <u>, <font>, procentuální zastoupení tagů vzhledem k celému dokumentu, atd.
    • kombinované vektory - kombinací dvou předcházejících vznikne jeden kombinovaný vektor
  • oproti natrénovanému modelu se lze dotazovat na anotaci nových stránek, tyto jsou staženy, vyčistěny, a navíc přídány do množiny neoanotovaných stránek

--Xsotona 16:09, 31. 3. 2006 (CEST)