[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
treex:api-implementation [2016/01/07 18:02]
popel
treex:api-implementation [2016/01/08 00:09]
popel
Line 173: Line 173:
  
 ===== Benchmark načítání CoNLL-U vPerlu ===== ===== Benchmark načítání CoNLL-U vPerlu =====
-Načítám cs-ud-train-l.conllu.+Načítám cs-ud-train-l.conllu (68 MB, 41k sentences, 0.8 MWords) .
  
  0.479s while (<$fh>) {chomp;}  0.479s while (<$fh>) {chomp;}
Line 181: Line 181:
 10.917s nedělá se split ani rehang, všechny atributy jsou prázdný řetězec, stromy ale mají uzly 10.917s nedělá se split ani rehang, všechny atributy jsou prázdný řetězec, stromy ale mají uzly
 13.460s korektní načtení, netestují se cykly, nevolá se set_parent (ale zopakuje se jeho kód) 13.460s korektní načtení, netestují se cykly, nevolá se set_parent (ale zopakuje se jeho kód)
-15.903s korektní načtení, netestují se cykly, volá se set_parent($parent, {cycles=>'no-check'} ); +15.903s korektní načtení, netestují se cykly, volá se set_parent($parent, {cycles=>'no-check'}) 
-16.646s korektní načtení, testují se cykly+16.646s korektní načtení, testují se cykly, volá se set_parent($parent)
 26.666s původní implementace načítání, kde se uzly vytvářejí pomocí $root->create_child a převěšují se pak z kořene na skutečného rodiče a děti jsou pole 26.666s původní implementace načítání, kde se uzly vytvářejí pomocí $root->create_child a převěšují se pak z kořene na skutečného rodiče a děti jsou pole
 19.029s totéž, ale bez převěšování, tedy vše visí na kořenu 19.029s totéž, ale bez převěšování, tedy vše visí na kořenu
  
 +  * Původní implementace byla velmi neefektivní, protože se při převěšování z kořene musely uzly odebrat z pole dětí kořene, čili se muselo to pole překopírovat a zmenšit o jeden prvek a složitost byla kvadratická. Převěšení trvalo 7s. Kdyby byly děti implementované spojákem místo pole (to mám stále v plánu), tak to bude rychlejší, ale stejně je zbytečné při načítání CoNLL-U uzly dávat do spojáků dětí kořene, ze kterého vím, že je budu za chvíli odebírat.
 +  * Ušetřil jsem 10s, tedy víc než 7s. Volám přímo ''UD::Node->new(...)'' místo ''$root->create_child(...)''.
 +  * Ještě víc by šlo ušetřit vypuštěním testování cyklů v CoNLL-U závislostech (1s) a optimalizací kódu set_parent bez volání této metody (další 2s).
 +  * Nyní se nejvíc času stráví samotným vytvářením uzlů (10.917s-0.479s). To musím ještě prozkoumat.
  

[ Back to the navigation ] [ Back to the content ]