2011-08-05 9 views
9

ठीक है, मैं OpenNLPमैं ओपनएनएलपी में नामांकित इकाई पहचानकर्ता पहचानकर्ता को कैसे प्रशिक्षित करता हूं?

FileReader fileReader = new FileReader("train.txt"); 
ObjectStream fileStream = new PlainTextByLineStream(fileReader); 
ObjectStream sampleStream = new NameSampleDataStream(fileStream); 
TokenNameFinderModel model = NameFinderME.train("pt-br", "train", sampleStream, Collections.<String, Object>emptyMap()); 
nfm = new NameFinderME(model); 

मैं अगर मैं कुछ अगर कुछ याद आ रही है की गलत कर रहा हूँ पता नहीं है से एनईआर पहचानकर्ता को प्रशिक्षित करने के लिए निम्न कोड है, लेकिन वर्गीकृत करने से काम नहीं कर रहा है। मुझे लगता है कि train.txt गलत है।

त्रुटि ऐसा होता है कि सभी टोकन केवल एक प्रकार के लिए वर्गीकृत होते हैं।

मेरा train.txt डेटा निम्न उदाहरण जैसा कुछ है, लेकिन बहुत अधिक विविधता और प्रविष्टियों की मात्रा के साथ। एक और बात यह है कि मैं प्रति शब्द एक पाठ से शब्द वर्गीकृत हूं, और सभी टोकन नहीं।

<START:distance> 8000m <END> 
<START:temperature> 100ºC <END> 
<START:weight> 50kg <END> 
<START:name> Renato <END> 

कोई दिखा सकता है कि मैं क्या गलत कर रहा हूं?

+0

क्या आप कृपया मुझे बता सकते हैं कि ओपनएनएलपी का कौन सा संस्करण आप उपयोग कर रहे हैं? क्योंकि मैं OpenNLP 1.5.1 का उपयोग कर रहा हूं और temparatue, दूरी और वजन के लिए कोई मॉडल फ़ाइल नहीं है। –

+0

@ raj.singh मैं ओपनएनएलपी का उपयोग नहीं कर रहा हूं। मैं अब अपने उद्देश्यों के लिए अपना खुद का वर्गीकरण कोडिंग कर रहा हूं। –

+0

हाय @ रेनाटो दीनानी, मुझे एक ही समस्या है, क्या आप मेरी मदद कर सकते हैं, आपने इसे अपने आवेदन में कैसे हल किया है। मुझे यह त्रुटि मिली है जब मैं हमारे ट्रेन में जा रहा हूं। txt अपवाद: java.security.NoSuchAlgorithmException –

उत्तर

22

आपका प्रशिक्षण डेटा ठीक नहीं है।

आप एक वाक्य के अंदर एक संदर्भ में सभी संस्थाओं रखना चाहिए:

At an altitude of <START:distance> 8000m <END> the temperature of boiling water is less than <START:temperature> 100ºC <END> . 
The climber <START:name> Renato <END> is carrying <START:weight> 50kg <END> of equipment. 

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

इसके अलावा आपको अपने मॉडल का निर्माण करने के लिए हजारों वाक्यों की आवश्यकता होगी! हो सकता है कि आप बूटस्ट्रैप को सौ से शुरू कर सकें और खराब मॉडल का उपयोग अपने कॉर्पस को बेहतर बनाने और अपने मॉडल को फिर से प्रशिक्षित करने के लिए कर सकते हैं।

और निश्चित रूप से आपको वाक्य के सभी टोकन वर्गीकृत करना चाहिए, अन्यथा किसी इकाई के प्रकार का निर्णय लेने के लिए कोई संदर्भ नहीं होगा।

+0

हाय wcolen, मुझे एक ही समस्या है, क्या आप मुझे वाक्य ट्रेन के लिए कुछ लिंक या उदाहरण दे सकते हैं। –

+1

@ रिद्धिश। चौधरी, यहां उदाहरण देखें: http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt?view=markup । आपके पास प्रति पंक्ति एक वाक्य होनी चाहिए, और नए अनुच्छेद के लिए एक खाली रेखा होनी चाहिए। – wcolen

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