14 Mart 2018 Çarşamba

Stanford Core NLP Parse annotation ve model alternatifleri

Ön bilgi:
annotator (fiil) : To furnish (a literary work) with critical commentary or explanatory notes;
annotator (isim): a commentator who writes notes to a text
annotation (isim):  a note added in explanation, etc, esp of some literary work.

Doğal dil işlemede dependency parsing (bağımlı / bağlantılı eşleştirme), cümledeki sözcük diziminin yapısı ve sözcükler arasındaki ilişkiyi tanımlama işlevi görür.
Örnek olarak subject-object ilişkisi ya da adjectival modifier.
Gösterim şekli : labelName(GovernorWord, DependentWord)

Stanford Core NLP dependency parsing için iki farklı annotator sunuyor: parse ve depparse.

parse ve depparse annotator farklı modeller kullanmakla birlikte farklı yöntemler üzerinden dependency parsing işlemini gerçekleştiriyor.
Bu nedenle hem hız hemde çıktı anlamında farklı sonuçlar üretiyorlar.


-Dependency Parsing annotator alternatifleri
--parse
--depparse

-Dependency Label listesi ve açıklamalar
-Performans
-Diğer Konular


Parsing Alternatifleri

Dilin yapısını inceleme anlamında model ve uygulama şeklinde göre farklı türde çıktılar alınabilir.

Two Types of Parsing
There are two main types of syntactic parsers: constituency parsers, and the dependency parsers.
Dependency: focuses on relations between words
Phrase structure: focuses on identifying phrases and their recursive structure


Dependency ve Constituency parsing arasındaki fark:
https://stackoverflow.com/questions/10401076/difference-between-constituency-parser-and-dependency-parser

Core NLP üzerindeki parser'lar için genel bilgi:
https://nlp.stanford.edu/software/lex-parser.html

Stanford Core NLP ile iki farklı parsing annotator sunulmakta.
Bunlardan "parse" ilk uygulanan yöntem ve farklı modeller ile birlikte sunulmakta.

Diğeri "Neural Network" diye adlandırılan farklı bir uygulama yöntemine göre geliştirilmiş annotator.
Özellikle hız anlamında diğer yöntemlerden daha iyi çözüm sağlar.

Parse sonucunda alacağımız çıktı "typed dependencies" yani "grammatical relations"
Örneğin nsubj(busy, Jill) : Jill nominal subject of busy

Parse etiketleri (tag) iki farklı şekilde alınabilir.
Varsayılan "Universal Dependencies" (Alt başlıkta detay)
Diğeri Stanford Dependencies (3.5 version öncesi kullanılan)
(eski gosterim, simdi universal dependencies)

Depedency Parsing için Pos tagging gerekli.
Some of the models (e.g., neural dependency parser and shift-reduce parser) require an external PoS tagger; you must specify the pos annotator.

parse ve depparse arasındaki çıktı farkı ile ilgili soru ve cevap:
https://stackoverflow.com/questions/34147523/why-are-the-dependencies-different-from-the-online-demo

PARSE (constituency parsing)

Stanford Core NLP dağıtım paketi ile birlikte 3 farklı parse annotation modeli geliyor.
Bunlar; PCFG (Probabilistic Context Free Grammar ), Factored, Shift reduce

varsayılan model: parse.model= edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz
Alternatif modeller:
englishFactored.ser.gz
edu/stanford/nlp/models/srparser/englishSR.ser.gz

https://stanfordnlp.github.io/CoreNLP/parse.html

Provides full syntactic analysis, including both constituent and dependency representation, based on a probabilistic parser.
In CoreNLP what is the different between the default generated dependency trees?
basic-dependencies
collapsed-dependencies
collapsed-ccprocessed-dependencies

Factored model PCFG'ye göre yaklaşık 5 kat daha fazla bellek kullanıyor ve cümle uzunluklarına göre değişiyor.
"The factored parser requires several times as much memory as just running the PCFG parser, since it runs 3 parsers."

S Tree üretiyor.

Console arayüzü ile parse işlemi : (Standart annotator API kullanmadan)
LexicalizedParser class a cümle cümle göndermek gerekiyor.
Bunun için DocumentPreprocessor class kullanılabilir.
By default, DocumentPreprocessor uses PTBTokenizer for tokenization.
echo "This is a text sentence." > xx.txt
java -cp "*" edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat typedDependencies -outputFormatOptions collapsedDependencies edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz xx.txt

PCGF ve Factored modeller arasındaki fark detayları:

The file englishFactored.ser.gz contains two grammars and leads the system to run three parsers. It first runs a (simpler) PCFG parser and then an untyped dependency parser, and then runs a third parser which finds the parse with the best joint score across the two other parsers via a product model
At the API level, with the factored parser, if you ask for getBestDependencyParse(), then you will get the best untyped dependency parse. If you call that method with englishPCFG.ser.gz, it will return null, as there is no dependency parse.

For English, although the grammars and parsing methods differ, the average quality of englishPCFG.ser.gz and englishFactored.ser.gz is similar, and so many people opt for the faster englishPCFG.ser.gz, though englishFactored.ser.gz sometimes does better because it does include lexicalization.

Shift-reduce parser https://nlp.stanford.edu/software/srparser.html
There is a much faster and more memory efficient parser available in the shift reduce parser.
It takes quite a while to load, and the download is much larger, which is the main reason it is not the default.
Shift-Reduce Constituency Parser
Previous versions of the Stanford Parser for constituency parsing used chart-based algorithms (dynamic programming) to find the highest scoring parse under a PCFG; this is accurate but slow.

Dependency parse ile ilgili sıkça sorulan sorular
https://nlp.stanford.edu/software/parser-faq.shtml

31. Madde de parser (modeller) arasındaki farkları anlatılıyor.
"Can you explain the different parsers? How can the PCFG parser produce typed dependency parses? Why if I use the getBestDependencyParse() method do I get null or an untyped dependency parse?"

DEPPARSE (Neural Network Dependency Parser)

Kullandığı model: english_UD

depparse özellikleri:
-Syntactic dependency parser.
-Generate three dependency-based outputs.
Versiyon 3.5.0 itibariyle eklenmiş ve neural network yöntemiyle çıktı üreten en hızlı (Stanford Core NLP içinde) dependency parser.
-İngilizce ve Çince için modeller bulunmakta.
-default: depparse.model = edu/stanford/nlp/models/parser/nndep/english_UD.gz

https://stanfordnlp.github.io/CoreNLP/depparse.html

https://nlp.stanford.edu/software/nndep.html

-parse annotator'a göre sadece dependecy result üretiyor.
-parse annotator'da ek olarak S Tree var.
-parse annotator'a göre daha hızlı ve bellek kullanımı daha verimli. (Daha küçük model kullandığından)

-Constituency parser çıktısına ihtiyaç duyulmadıkça depparse annotator dependency parsing için tercih edilebilir.

-Parse annotator'in çalışması için POS tagging'e ihtiyacı var. Bu ayrı bir annotator çalıştırarak da sağlanabilir. Yada parse annotator kendi içinde de yapabilir.
Terminal > pos annotor yok. Sadece default da var olan englishPCFG model kullanılıyor. (Bu nedenle lemma alınamıyor)
java -cp "*" -Xmx1300m edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,parse  -outputFormat text

Ek: Çalışması için POS annotator'a ihtiyaç duyuyordu. Versiyon 3.9 notlarına göre parser üzerinde POS tagger eklendi.

Dependecy Label Tanımları

Ortak etiketler:
http://universaldependencies.org/u/dep/
İngilizceye özel:
http://universaldependencies.org/docs/en/dep/

Universal Dependency Definitions
http://universaldependencies.org/treebanks/en/index.html
örn:  nmod: nominal modifier
http://universaldependencies.org/docs/en/dep/nmod.html

Stanford Core NLP teknik uyarlama detayları

S Tree (phrase structure trees ) parse tags: http://web.mit.edu/6.863/www/PennTreebankTags.html
Clause level, phrase level, word level

Bazı kısaltmalar için açıklama


NN: Noun phrase
VP: Verb Phrase
PP: Prepositional Phrase

Verbs, VerbPhrases, and Sentences
Basic Verb Types
Vi=Intransitive verb e.g.,sleeps,walks,laughs
Vt=Transitive verb e.g.,sees,saw,likes
Vd=Ditransitive verb e.g.,gave
Basic VP Rules -->
VP > Vi
VP > Vt NP
VP > Vd NP NP
Basic S Rule --> S > NP VP
Examples of VP: sleeps,walks,likesthemechanic,gave the mechanic the fast car, gave the fast car mechanic, the pige on in the box, :::
Examples of S: the man sleeps, the dog walks, the dog likes the mechanic, the dog intheboxgavethemechanicthefastcar,:::
PPs Modifying Verb Phrases
A new rule: VP > VP PP

Performans

Hız ve tutarlılık üzerine ölçüm:
100.000 cümle parse işlemi (benim testler):
(sql e yazma dahil)
englishPCGF.ser.gz > (parse) 75 dk.
englshSR.ser.gz >    (parse) 45 dk
nndep/english_UD.gz  (depparse) > 31 dk.
1000 cümle sadece parse:
englishPCGF.ser.gz > (parse) 40-50 sn. > 500MB-650MB RAM
2 core (parse.nthreads=2) 30 sn. > 600MB-850MB RAM
englshSR.ser.gz >    (parse) 17-22 sn
nndep/english_UD.gz  (depparse) > 6-8 sn.

Farklı modellerin karşılaştırılması
english_UD, englishRNN, englishFactored, englishPCFG etc...
https://stackoverflow.com/questions/36844102/stanford-parser-models

Diğer Konular


RAM problemi yaşamamak için Java 64 bit olarak kurulmalı. (tüm annotation lar kullanıldığında 3 GB gerekiyor) ve console üzerinden çalıştırıldığında RAM yetmediğinde -mx500m/-Xmx500m şeklinde RAM limiti verilmeli. Ve ya verilmediği durumda üst limit konulmamış oluyor.
Cümle uzunluklarına göre değişmekte.


Problem: En iyi tutarlılık ve hızı elde etmek:
Farklı tecrübelerden (cümlelerden) edinilen varsayıma göre parse için kullanılan englishPCFG modeli POS tagging için en tutarlı sonucu veriyor. Bununla birlikte parse için yavaş.
Bu adreste kullanılan: http://nlp.stanford.edu:8080/parser/index.jsp

Örnek:
Autonomous cars shift insurance liability toward manufacturers.
englishPCFG ile
Autonomous/JJ cars/NNS shift/VBP insurance/NN liability/NN toward/IN manufacturers/NNS ./.
Standart POS tagging modelleri ile;
Örn corenlp.run üzerinde "shift" /NN taglanış.


Postagger passed to dependency parser - Dependency parser kendi üzerinde POS tagging işlemini yapamadığında.
https://github.com/stanfordnlp/CoreNLP/blob/master/src/edu/stanford/nlp/parser/nndep/demo/DependencyParserDemo.java


Console çıktısını farklı formatta almak
What output formats can I get with the -outputFormat and -outputFormatOptions options?
You can give the options -outputFormat typedDependencies or -outputFormat typedDependenciesCollapsed to get typed dependencies (or grammatical relations) output (for English and Chinese only, currently).
You can print out lexicalized trees (head words and tags at each phrasal node with the -outputFormatOptions lexicalize option. You can see all the other options by looking in the Javadoc of the TreePrint class.

A common option that people want for -outputFormatOptions is to get punctuation tokens and dependencies when they are not printed by default. You do that with -outputFormatOptions includePunctuationDependencies.


Tokenization for parser seçenekleri: 
-tokenizerOptions "americanize=false,normalizeCurrency=false,unicodeEllipsis=true"
parse(new DocumentPreprocessor(PTBTokenizerFactory.newWordTokenizerFactory("americanize=false")).getWordsFromString(str));

What do you recommend for parsing tweets? Do you have a caseless parsing model?
We now (v2.0.1+) distribute a caseless English model, which should work better for texts, tweets, and similar things. It's named:
edu/stanford/nlp/models/lexparser/englishPCFG.caseless.ser.gz

STree to typed dependencies>
How do you get a SemanticGraph from a Tree?
The easiest way is to use the conversion methods in ParserAnnotatorUtils, which is included in the latest versions of the parser (since 2.0.3).
use SemanticGraphFactory.makeFromTree() to build a SemanticGraph from a constitueny tree


Dependency Tag hiyerarşisi:

root - root
dep - dependent
aux - auxiliary
auxpass - passive auxiliary
cop - copula
arg - argument
agent - agent
comp - complement
acomp - adjectival complement
ccomp - clausal complement with internal subject
xcomp - clausal complement with external subject
obj - object
dobj - direct object
iobj - indirect object
pobj - object of preposition
subj - subject
nsubj - nominal subject
nsubjpass - passive nominal subject
csubj - clausal subject
csubjpass - passive clausal subject
cc - coordination
conj - conjunct
expl - expletive (expletive “there”)
mod - modifier
amod - adjectival modifier
appos - appositional modifier
advcl - adverbial clause modifier
det - determiner
predet - predeterminer

preconj - preconjunct
vmod - reduced, non-finite verbal modifier
mwe - multi-word expression modifier
mark - marker (word introducing an advcl or ccomp
advmod - adverbial modifier
neg - negation modifier
rcmod - relative clause modifier
quantmod - quantifier modifier
nn - noun compound modifier
npadvmod - noun phrase adverbial modifier
tmod - temporal modifier
num - numeric modifier
number - element of compound number
prep - prepositional modifier
poss - possession modifier
possessive - possessive modifier (’s)
prt - phrasal verb particle
parataxis - parataxis
goeswith - goes with
punct - punctuation
ref - referent
sdep - semantic dependent
xsubj - controlling subject


Hiç yorum yok: