2010-12-17 12 views
5

Obecnie próbuję zbudować uniwersalny (lub tak ogólny jak to jest praktycznie) tagger POS z NLTK. Spróbowałem trenować z brązowymi i drzewiastymi korpusami, ale prawdopodobnie będę osiadał na korpusie drzewa.Próbujesz użyć MEGAM jako NLTK ClassifierBasedPOSTagger?

Uczę się jak idę, znajduję klasyfikatora Taggerery POS są najdokładniejsze. Klasyfikator Maximum Entity ma być najbardziej dokładny, ale uważam, że wykorzystuje on tak dużo pamięci (i czasu przetwarzania), że muszę znacznie zmniejszyć zbiór danych treningowych, więc wynik końcowy jest mniej dokładny niż przy użyciu domyślnego klasyfikatora Naive Bayes.

Zasugerowano, że używam MEGAM. NLTK ma pewne wsparcie dla MEGAM, ale wszystkie przykłady, które znalazłem, są przeznaczone dla klasyfikatorów ogólnych (np. Klasyfikatora tekstów używającego wektora funkcji słów), a nie bardziej specyficznego tagera POS. Bez konieczności ponownego tworzenia własnego ekstraktora funkcji POS i kompilatora (tj. Wolę używać tego już w NLTK), jak mogę użyć klasyfikatora MEGAM MaxEnt? To znaczy. w jaki sposób można upuścić go w jakimś istniejącym kodem MAXENT który jest wzdłuż linii:

maxent_tagger = ClassifierBasedPOSTagger(train=training_sentences, 
             classifier_builder=MaxentClassifier.train) 
+3

Czy znasz: http://streamhacker.com/2008/11/03/part-of-speech-tagging-with-nltk-part-1/? Wygląda całkiem nieźle na znaczniki POS, jeśli spojrzysz na wszystkie cztery artykuły. – perimosocordiae

+1

Tak, mam jego książkę. Na blogu można znaleźć interesujące porównanie skuteczności, a na końcu klasyfikatora mogę dodać tagger Brilla (zgodnie z sugestią); ale posty nie wydają się wspomnieć o MEGAM? Być może powinienem popatrzeć na kod NLTK MaxEnt i odwrócić go lub skopiować go, aby użyć MEGAM. – winwaed

Odpowiedz

8

Ten liner powinien działać na szkolenia MEGAM MaxentClassifier dla ClassifierBasedPOSTagger. Oczywiście, że zakłada MEGAM jest już zainstalowana (przejdź here ściągnąć)

maxent_tagger = ClassifierBasedPOSTagger(train=train_sents, classifier_builder=lambda train_feats: MaxentClassifier.train(train_feats, algorithm='megam', max_iter=10, min_lldelta=0.1)) 
+3

Również sprawdź train_tagger.py w https://github.com/japerk/nltk-trainer. Niedługo napiszę artykuł wstępny, ale mam nadzieję, że wiadomości z pomocy wystarczą, aby zacząć. – Jacob

+0

Dzięki Jacob - wygląda na to, że działa! (wygląda na to, że muszę sobie przypomnieć o funkcjach Pythona Lambda). Tak, miałem zainstalowany Megam, mój problem polegał na tym, że klasyfikator (ogólny) został podłączony do klasyfikatora POS. Do tej pory moje testy dają dokładności, które są bardzo podobne do Naive Bayes (w granicach 1%). Budowanie klasyfikatora zajmuje więcej czasu, ale nie dłużej niż domyślny algorytm MaxEnt. Wydrukowałem train_tagger.py na zewnątrz - przejrzę to podczas przerwy na kawę :-) – winwaed

+1

Możesz spróbować zwiększyć max_iter lub zmniejszyć min_lldelta, aby osiągnąć wyższą dokładność. To są tylko te liczby, z których zwykle korzystam od momentu, gdy dokładność plateau jest dość szybka. – Jacob

Powiązane problemy