2011-12-27 6 views
9

ठीक है, मुझे हाल ही में प्राकृतिक भाषा प्रसंस्करण में बहुत रुचि है: हालांकि, मैंने अपने अधिकांश काम के लिए अब तक सी का उपयोग किया है। मैंने एनएलटीके के बारे में सुना, और मुझे पायथन नहीं पता था, लेकिन यह सीखना काफी आसान लगता है, और यह वास्तव में शक्तिशाली और रोचक भाषा की तरह दिख रहा है। विशेष रूप से, एनएलटीके मॉड्यूल बहुत कुछ लगता है, जो मुझे करने की ज़रूरत है, उससे बहुत अनुकूल है।एनएलटीके प्रदर्शन

हालांकि, sample code for NLTK का उपयोग करते समय और test.py नामक फ़ाइल में पेस्ट करते हुए, मैंने देखा है कि इसे चलाने में बहुत लंबा समय लगता है!

मैं खोल से फोन कर रहा हूँ तो जैसे:

time python ./test.py 

और रैम की 4 GB का साथ, 2.4 GHz मशीन पर, यह 19.187 सेकंड लेता है!

अब, शायद यह बिल्कुल सामान्य है, लेकिन मैं इस धारणा के तहत था कि एनटीएलके अत्यंत तेज था; मुझे गलत हो सकता है, लेकिन क्या कुछ स्पष्ट है कि मैं स्पष्ट रूप से गलत कर रहा हूं?

+3

आपको यह धारणा कहां मिली कि एनएलटीके बेहद तेज़ है? –

+0

'एनएलटीके 2.0 के साथ पायथन टेक्स्ट प्रोसेसिंग' के लिए अमेज़ॅन विवरण में: "जानें कि दक्षता या गति में किसी भी हानि के बिना डेटा की भारी मात्रा में आसानी से कैसे संभालना है।" (Http://www.amazon.com/Python-Text-Processing-NLTK-Cookbook/dp/1849513600)। – elliottbolzan

उत्तर

19

मेरा मानना ​​है कि आप प्रसंस्करण समय के साथ प्रशिक्षण समय को भंग कर रहे हैं। एक यूनिग्राम टैगर की तरह एक मॉडल को प्रशिक्षण देना बहुत समय ले सकता है। तो डिस्क पर एक अचार फ़ाइल से उस प्रशिक्षित मॉडल को लोड कर सकते हैं। लेकिन एक बार जब आपके पास स्मृति में लोड मॉडल हो, तो प्रसंस्करण काफी तेज हो सकता है। अलग-अलग टैगिंग एल्गोरिदम के लिए प्रसंस्करण गति का विचार प्राप्त करने के लिए part of speech tagging with NLTK पर मेरी पोस्ट के निचले हिस्से में "वर्गीकृत क्षमता" नामक अनुभाग देखें।

7

@ जैकोब प्रशिक्षण और टैगिंग समय को भंग करने के बारे में सही है। मैं sample code एक छोटे से सरल बना दिया है और यहां समय टूटने है:

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 

सिस्टम:

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

कोड:

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

दोनों तथ्यात्मक डेटा * और * कोड को फिर से चलाने के लिए अच्छा लगा! – Titou

0

मैं nltk एक संशोधित संस्करण निम्न का उपयोग इस कोड का: https://github.com/ugik/notebooks/blob/master/Neural_Network_Classifier.ipynb

यह अच्छी तरह से काम करता है, लेकिन मैंने देखा कि यह मशीन लॉन्च करने के लिए उपयोग की जाने वाली मशीन प्रदर्शन को प्रभावित नहीं करती है .. मैं कोड को "ट्रेन" फ़ंक्शन परिभाषा तक सीमित करने के लिए सरल बनाता हूं और इसे एक वाक्य कॉर्पस प्रशिक्षण पर लागू करता हूं ।

टेस्ट 1

लिनक्स 4.4.0-64-जेनेरिक # 85 उबंटू SMP सोम फ़र, 20 11:50:30 यूटीसी 2017 x86_64 x86_64 x86_64 जीएनयू: और मैं यह विभिन्न कंप्यूटरों पर शुरू की/लिनक्स

प्रोसेसर: 16 x इंटेल (आर) जिऑन (आर) सीपीयू E5-2686 v4 @ 2.30GHz

MemTotal: 125,827,556 kB

आयात कर रहा है n एलटीके और अन्य मॉड्यूल 0.9350419 99 99 99 999 सेकंड

20 न्यूरॉन्स, अल्फा: 0 के साथ प्रशिक्षण लेता है।1, पुनरावृत्तियों: 10000, छोड़ने वालों: गलत

प्रशिक्षण समय: 1.1798350000000006 सेकेंड

टेस्ट 2

लिनक्स 4.8.0-41-जेनेरिक # 44 ~ 16.04.1-उबंटू SMP शुक्र मार्च 3 17:11:16 यूटीसी 2017 x86_64 x86_64 x86_64 जीएनयू/लिनक्स

प्रोसेसर: 4x इंटेल (आर) कोर (टीएम) i5-7600K सीपीयू @ 3.80GHz

MemTotal: 16,289,540 kB

आयात कर रहा है nltk और दूसरों मॉड्यूल 0.३,९७,८३९ सेकेंड

लेता 20 न्यूरॉन्स, अल्फा के साथ

प्रशिक्षण: 0.1, पुनरावृत्तियों: 10000, छोड़ने वालों: गलत

प्रशिक्षण समय: .7186329999999996 सेकेंड

16-ज़ीऑन कोर/122Go रैम अमेज़ॅन कंप्यूटर और मेरे i5/16Go कंप्यूटर पर प्रशिक्षण का समय कितना लंबा हो सकता है?

संबंधित मुद्दे