2011-12-27 21 views
9

Pekala, son zamanlarda doğal dil işlemeye oldukça ilgi duydum: Ancak, şimdiye kadar çalışmamın çoğunu C kullanmıştım. NLTK'yi duydum ve Python'u bilmiyordum, ama öğrenmesi oldukça kolay görünüyor ve gerçekten çok güçlü ve ilginç bir dile benziyor. Özellikle, NLTK modülü yapmak zorunda olduğum şeylere çok, çok uyumlu görünüyor. Ancak, sample code for NLTK kullanıldığında ve test.py adlı bir dosyaya yapıştırıldığında, çalışmanın çok uzun sürdüğünü fark ettim!NLTK Performansı

time python ./test.py 

Ve RAM 4 GBS ile 2.4 GHz makinede, bu 19,187 saniye sürer:

ben şöyle kabuğundan çağırıyorum!

Şimdi, belki bu kesinlikle normal, ancak NTLK'nin son derece hızlı olduğu izlenimi altındaydım; Yanılmış olabilirim, ama burada yanlış yaptığım açık bir şey var mı?

+3

NLTK'nın son derece hızlı olduğu izlenimini nereden aldınız? –

+0

"Python Text Processing with NLTK 2.0" için Amazon'un açıklamasında: "Verimlilik veya hız kaybı olmadan büyük miktarda veriyi kolayca nasıl işleyeceğinizi öğrenin." (Http://www.amazon.com/Python-Text-Processing-NLTK-Cookbook/dp/1849513600). – elliottbolzan

cevap

19

İşlem süreleriyle eğitim süresini birleştirdiğinizi düşünüyorum. Bir UnigramTagger gibi bir modeli eğitmek çok zaman alabilir. Bu eğitimli modeli diskteki bir turle dosyasından yükleyebilir. Ancak, belleğe yüklenen bir modeliniz olduğunda, işlem oldukça hızlı olabilir. Farklı etiketleme algoritmalarının işlem hızıyla ilgili bir fikir edinmek için part of speech tagging with NLTK adresindeki yayınımın altındaki "Sınıflandırıcı Verimliliği" bölümüne bakın.

7

@Jacob, eğitimi ve etiketlemeyi zamanlama konusunda haklıdır. Ben sample code biraz basitleştirilmiş ettik ve burada zaman arıza:

Importing nltk takes 0.33 secs 
Training time: 11.54 secs 
Tagging time: 0.0 secs 
Sorting time: 0.0 secs 

Total time: 11.88 secs 

Sistem:

CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz 
Memory: 3.7GB 

Kodu:

import pprint, time 
startstart = time.clock() 

start = time.clock() 
import nltk 
print "Importing nltk takes", str((time.clock()-start)),"secs" 

start = time.clock() 
tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+|[^\w\s]+') 
tagger = nltk.UnigramTagger(nltk.corpus.brown.tagged_sents()) 
print "Training time:",str((time.clock()-start)),"secs" 


text = """Mr Blobby is a fictional character who featured on Noel 
Edmonds' Saturday night entertainment show Noel's House Party, 
which was often a ratings winner in the 1990s. Mr Blobby also 
appeared on the Jamie Rose show of 1997. He was designed as an 
outrageously over the top parody of a one-dimensional, mute novelty 
character, which ironically made him distinctive, absurd and popular. 
He was a large pink humanoid, covered with yellow spots, sporting a 
permanent toothy grin and jiggling eyes. He communicated by saying 
the word "blobby" in an electronically-altered voice, expressing 
his moods through tone of voice and repetition. 

There was a Mrs. Blobby, seen briefly in the video, and sold as a 
doll. 

However Mr Blobby actually started out as part of the 'Gotcha' 
feature during the show's second series (originally called 'Gotcha 
Oscars' until the threat of legal action from the Academy of Motion 
Picture Arts and Sciences[citation needed]), in which celebrities 
were caught out in a Candid Camera style prank. Celebrities such as 
dancer Wayne Sleep and rugby union player Will Carling would be 
enticed to take part in a fictitious children's programme based around 
their profession. Mr Blobby would clumsily take part in the activity, 
knocking over the set, causing mayhem and saying "blobby blobby 
blobby", until finally when the prank was revealed, the Blobby 
costume would be opened - revealing Noel inside. This was all the more 
surprising for the "victim" as during rehearsals Blobby would be 
played by an actor wearing only the arms and legs of the costume and 
speaking in a normal manner.[citation needed]""" 

start = time.clock() 
tokenized = tokenizer.tokenize(text) 
tagged = tagger.tag(tokenized) 
print "Tagging time:",str((time.clock()-start)),"secs" 

start = time.clock() 
tagged.sort(lambda x,y:cmp(x[1],y[1])) 
print "Sorting time:",str((time.clock()-start)),"secs" 

#l = list(set(tagged)) 
#pprint.pprint(l) 
print 
print "Total time:",str((time.clock()-startstart)),"secs" 
+1

Hem gerçek verileri elde etmek güzel * ve * yeniden oynatma kodu! – Titou

0

Ben nltk değiştirilmiş bir versiyonunu aşağıdaki kullanın Bu kodun: https://github.com/ugik/notebooks/blob/master/Neural_Network_Classifier.ipynb

İyi çalışıyor, ancak bu kodu başlattığım makinenin performansları etkilemediğini fark ettim. Kodu "tren" işlev tanımlamasıyla kısıtlamak ve tek cümle corpus eğitiminde uygulamak için basitleştirdim .

TEST 1

Linux 4.4.0-64-jenerik # 85-Ubuntu SMP Mon 20 Şubat 11:50:30 UTC 2017 x86_64 x86_64 x86_64 GNU: Ve farklı bilgisayarlarda başlattığı/Linux

İşlemci: 16 x Intel (R) Xeon (R) İşlemci E5-2686 v4 @ 2.30GHz

MemTotal: 125.827.556 kB

içe n ltk ve diğerleri modülleri, 20 nöron, alfa ile eğitim alır: 0.1, yineleme: 10000, bırakma: Yanlış

Eğitim süresi: 1,1798350000000006 saniye

TEST 2

Linux 4.8.0-41-jenerik # 44 ~ 16.04.1-Ubuntu SMP Cum 3 Mart 17:11:16 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

İşlemci: 4x Intel (R) Core (TM) i5-7600K işlemci @ 3.80GHz

MemTotal: 16289540 kB

İçe nltk ve diğerleri modülleri 0,397839 sn

alır 20 nöronlar, alfa ile

Eğitimi: Yanlış

Eğitim süresi: 0.1, yineleme: 10000, bırakma ,7186329999999996 saniye

Eğitim süresi 16-Xeon çekirdekli/122Go RAM amazon bilgisayarında ve i5/16Go bilgisayarımda ne kadar uzun olabilir?