2017-04-20 9 views
21

मैं हाल ही में एक डेटा सेट पर काम कर रहा था जो विभिन्न शब्दों के लिए संक्षेप में उपयोग करता था। उदाहरण के लिए,पायथन - एनएलपी का उपयोग करके संक्षिप्त पाठ से शब्द का उपयोग कैसे करें?

wtrbtl = water bottle 
bwlingbl = bowling ball 
bsktball = basketball 

वहाँ इस्तेमाल किया सम्मेलन के संदर्भ में किसी भी स्थिरता होने के लिए नहीं लगता था, अर्थात कभी कभी वे कभी कभी स्वरों का प्रयोग नहीं किया। मैं एक मैपिंग ऑब्जेक्ट बनाने की कोशिश कर रहा हूं जैसे संक्षेप में संक्षेप में और उनके संबंधित शब्दों को पूर्ण कॉर्पस या शर्तों की विस्तृत सूची के बिना (यानी संक्षेप में पेश किया जा सकता है जो स्पष्ट रूप से ज्ञात नहीं हैं)। सादगी के लिए कहें कि यह एक जिम में आपको मिले सामानों तक ही सीमित है लेकिन यह कुछ भी हो सकता है।

असल में, यदि आप केवल उदाहरणों के बाएं हाथ की ओर देखते हैं, तो प्रत्येक संक्षिप्त नाम से संबंधित पूर्ण पाठ लेबल से संबंधित हमारे मस्तिष्क के समान प्रकार का मॉडल क्या कर सकता है।

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

UPDATED:

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

किसी भी मदद की सराहना की जाती है, क्योंकि मैं वास्तव में इस पर अटक गया हूं।

उत्तर

16

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

अपने संक्षेपों के लिए, आप एक "शोर मॉडल" बना सकते हैं जो चरित्र चूक की संभावना की भविष्यवाणी करता है। यह एक कॉर्पस से सीख सकता है (आपको इसे मैन्युअल रूप से या आधा मैन्युअल रूप से लेबल करना होगा) कि व्यंजनों को स्वरों से कम बार याद किया जाता है।

एक जटिल भाषा मॉडल और एक साधारण शोर मॉडल होने के बाद, आप शोर चैनल दृष्टिकोण (उदाहरण के लिए the article by Jurafsky देखें) के लिए उम्मीदवार वाक्य का सुझाव देने के लिए उन्हें जोड़ सकते हैं।

अद्यतन। मैं इस समस्या के बारे में उत्साहित हो गया और इस एल्गोरिथ्म कार्यान्वित:

  • भाषा मॉडल
  • शोर मॉडल (प्रत्येक प्रतीक संक्षिप्त जा रहा है की संभावना)
  • बीम (चरित्र 5 ग्राम लोर्ड ऑफ द रिंग्स पाठ पर प्रशिक्षित) उम्मीदवार वाक्यांश सुझाव के लिए, खोज एल्गोरिदम।

मेरा समाधान in this Python notebook लागू किया गया है। प्रशिक्षित मॉडल के साथ, इसमें noisy_channel('bsktball', language_model, error_model) जैसे इंटरफ़ेस हैं, वैसे, {'basket ball': 33.5, 'basket bally': 36.0} लौटाता है। शब्दकोश मूल्य सुझावों के स्कोर हैं (निचले, बेहतर)।

अन्य उदाहरणों के साथ यह और भी खराब काम करता है: 'wtrbtl' के लिए यह {'water but all': 23.7, 'water but ill': 24.5, 'water but lay': 24.8, 'water but let': 26.0, 'water but lie': 25.9, 'water but look': 26.6} देता है।

'bwlingbl' के लिए यह {'bwling belia': 32.3, 'bwling bell': 33.6, 'bwling below': 32.1, 'bwling belt': 32.5, 'bwling black': 31.4, 'bwling bling': 32.9, 'bwling blow': 32.7, 'bwling blue': 30.7} देता है। हालांकि, जब उपयुक्त कॉर्पस (जैसे खेल पत्रिकाएं और ब्लॉग; शायद संज्ञाओं के oversampling के साथ) पर प्रशिक्षण, और शायद बीम खोज की अधिक उदार चौड़ाई के साथ, यह मॉडल अधिक प्रासंगिक सुझाव प्रदान करेगा।

13

इसलिए मैंने एक ही समस्या देखी है, और PyEnchant नामक एक शानदार पैकेज में आया है। यदि आप वर्तनी-परीक्षक में निर्माण का उपयोग करते हैं तो आप शब्द सुझाव प्राप्त कर सकते हैं, जो एक अच्छा और सरल समाधान होगा। हालांकि यह केवल एक शब्द का सुझाव देगा (जहाँ तक मैं बता सकता है), और इसलिए स्थिति आपके पास:

wtrbtl = water bottle 

काम नहीं करेंगे।

import enchant 

wordDict = enchant.Dict("en_US") 

inputWords = ['wtrbtl','bwlingbl','bsktball'] 
for word in inputWords: 
    print wordDict.suggest(word) 

उत्पादन होता है:

['rebuttal', 'tribute'] 
['bowling', 'blinding', 'blinking', 'bumbling', 'alienable', 'Nibelung'] 
['basketball', 'fastball', 'spitball', 'softball', 'executable', 'basketry'] 

शायद यदि आप जानते हैं संक्षिप्त रूपों किस तरह वहाँ आप दो शब्दों, उदा में स्ट्रिंग अलग कर सकते हैं कर रहे हैं

यहाँ कुछ कोड है

'wtrbtl' -> ['wtr', 'btl'] 

वहाँ भी प्राकृतिक भाषा संसाधन किट (NLTK) है, जो अद्भुत है है, और आप, कैसे आम प्रत्येक सुझाव दिया शब्द है पर देख रहे हैं, उदाहरण के लिए द्वारा उपरोक्त कोड के साथ संयोजन में इस का उपयोग कर सकते हैं।

शुभकामनाएं!

7

एक विकल्प समय पर वापस जाना है और Soundex Algorithm समकक्ष की गणना करना है।

साउंडएक्स सभी स्वरों को छोड़ देता है, आम गलतफहमी को नियंत्रित करता है और वर्तनी को कुचल देता है। एल्गोरिदम सरल है और हाथ से किया जाता है। नकारात्मकता यह है कि कोई विशेष शब्द स्टेमिंग या काम समर्थन बंद नहीं है।

+0

यह एक दिलचस्प विचार है लेकिन मुझे विश्वास नहीं है कि यह मेरी समस्या की परिस्थितियों को फिट करता है क्योंकि यह आवश्यक है कि आप पूर्ण शब्द से शुरू करें और फिर एल्गोरिदम का उपयोग करके शब्द को एन्कोड करें। मेरी समस्या यह है कि मैं संक्षेप में शुरू कर रहा हूं और मैं इससे पूरा शब्द प्राप्त करने की कोशिश कर रहा हूं। –

+0

सच है। आप या तो हैंश के शब्दकोश को स्टोर कर सकते हैं या केवल सीमित लेवेनशेटिन दूरी ढूंढ सकते हैं, केवल स्वरों को जोड़ना और पात्रों को दोगुना करना। इसकी या तो एक जगह या गति पसंद है। –

3

... शब्दों के लिए संक्षेप एक मास्टर शब्दकोश में नहीं है।

तो, आप एक एनएलपी मॉडल की तलाश में हैं जो वैध अंग्रेजी शब्दों के साथ आ सकता है, बिना उन्हें देखे?

अधिक संपूर्ण शब्दकोष शब्दकोश ढूंढना संभवतः संभव है, या मौजूदा शब्दकोष में प्रत्येक शब्द को +"es" या word[:-1] + "ies" जैसे सामान्य एक्सटेंशन में मैप करना संभव है।

+0

मेरी विचार प्रक्रिया अप्रत्याशित मानों को कैसे संभालना था। मैं उपर्युक्त उल्लेख करता हूं कि सुविधा के लिए समस्या जिम में वस्तुओं तक ही सीमित हो सकती है।अब अगर कोई अपना लंच लाता है तो "sndwch" डेटा में दिखाई दे सकता है लेकिन यह संभावना नहीं है कि सैंडविच जिम आइटमों के शब्दकोश में होगा। इसलिए मैं ऐसे समाधान को खोजने की कोशिश कर रहा हूं जो अनिश्चितता के तहत असफल न हो। शब्द को 'वैध अंग्रेजी' नहीं होना चाहिए बल्कि लक्ष्य शब्द का एक संभावित अनुमान होना चाहिए। –

+0

जैसा कि आपने उल्लेख किया है, इसके साथ एक मुद्दा अनिश्चितता के लिए सीमा होगी। अधिकांश एमएल मॉडल संभावनाओं से निपटेंगे, यानी यह कितना संभव है कि "sndwch" वास्तव में जिम शब्दकोश में एक विशेष शब्द (या शब्दों का सेट) को संदर्भित करता है। थ्रेसहोल्ड को उचित रूप से सेट करना, मॉडल को एक विशिष्ट शब्दकोश में प्रवेश की अनुमति दे सकता है, क्योंकि डोमेन-विशिष्ट एक (जिम बनाम full_dict) के विपरीत। – Melvin

+0

मैं उम्मीद करता हूं कि थ्रेसहोल्ड डोमेन-विशिष्ट शब्दकोश (sndwch = रेत बैग?) में उच्चतम-संभावित शब्द कहने के बीच संभावना में असमानता के आधार पर पूर्ण शब्दकोश (सैंडविच) में बनायेगा। समस्या यह है कि, उचित सीमा निर्धारित करना बहुत कठिन होगा, और इष्टतम स्तर शायद डोमेन-बनाम-बाहरी शब्दकोश आकार अनुपात, या प्रत्येक डोमेन डेटासेट के संक्षिप्त नाम के आधार पर भी बदल जाएगा। – Melvin

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