Levenshtein दूरी को जल्दी से कम करना


24

अनुमत शब्दों (वर्णानुक्रम में सॉर्ट किए गए) के एक विशाल डेटाबेस और एक शब्द को देखते हुए, उस शब्द को डेटाबेस से ढूंढें जो लेवेन्सहाइट दूरी के संदर्भ में दिए गए शब्द के सबसे करीब है।

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

मुझे आश्चर्य है कि अगर इस समस्या का अधिक कुशल समाधान है। हो सकता है कि कुछ अनुमानवादी जो हमें खोज करने के लिए शब्दों की संख्या कम करने दें, या लेवेंसहाइट दूरी एल्गोरिथ्म के अनुकूलन।

विषय स्वागत पर कागजात के लिंक।

जवाबों:


16

आप जो पूछ रहे हैं, वह एडिट दूरी के तहत निकट-पड़ोसी खोज की समस्या है। आपने यह उल्लेख नहीं किया कि क्या आप सैद्धांतिक परिणामों या सांख्यिकी में रुचि रखते हैं, इसलिए मैं पूर्व का उत्तर दूंगा।

पास-पड़ोस की खोज संरचनाओं के निर्माण से निपटने के लिए संपादित दूरी कुछ बुरा है। मुख्य समस्या यह है कि एक मीट्रिक के रूप में, यह (एक तरह से) बर्ताव करता है जैसे अन्य अच्छी तरह से ज्ञात बुरा मीट्रिक की तरह है आयामी स्वरूप कमी और सन्निकटन के प्रयोजन के लिए। इस विषय पर पढ़ने के लिए काम का एक विशाल शरीर है, और आपका सबसे अच्छा स्रोत एलेक्स एंडोनी द्वारा पत्रों का सेट है : पीछे की ओर इशारा करके (उदाहरण के लिए उनके एफओसीएस 2010 के पेपर से) आपको स्रोतों का एक अच्छा सेट मिलेगा।1


1
मैट्रिक स्थान के बारे में मैं जो कुछ भी जानता हूं, वह शब्दार्थ से है, इसलिए एक सवाल है: क्या लेवेंशेन मेट्रिक के अल्ट्रामेट्रिक में कोई सभ्य (सभ्य के किसी भी मूल्य के लिए) एम्बेडिंग है? ऑफहैंड, जो बाइनरी-ट्री-ईश एल्गोरिथ्म को जन्म दे सकता है।
नील कृष्णस्वामी

मुझे पूरा यकीन नहीं है। मुझे लगता है कि उत्तर सामान्य तौर पर नहीं है, लेकिन मेरे पास इंगित करने के लिए कुछ भी नहीं है।
सुरेश वेंकट

Boytsov.info/pubs पर दूसरा पेपर लेवेंसहाइटिन और डेमेरो-लेवेंसटेइन एडिट डिस्टेंस के तहत पड़ोसी खोज के संभावित समाधानों का एक अच्छा सर्वेक्षण है।
a3nm

@NeelKrishnaswami एक अल्ट्रामेट्रिक में एम्बेड करना कम से कम विरूपण होगा जहां डी स्ट्रिंग की लंबाई है। Krauthgamer और Rabani के कारण L 1 में एम्बेड करने के लिए निम्न विकृति से यह निम्नानुसार होता है , क्योंकि अल्ट्रामेट्रिक्स isometrically Euclidean स्पेस में एम्बेड होता है, जो isometrically L 1 में एम्बेड करता है । Ω(लॉग)एल1एल1
साशो निकोलोव


5

यदि आपके पास कम संख्या में गलत-संपादन हैं जो आप बर्दाश्त करने जा रहे हैं, तो आप एक बिंदीदार प्रत्यय के पेड़ का उपयोग करने का प्रयास कर सकते हैं । डिस्क्लेमर: मैंने उस पेपर को लिखा था, लेकिन यह हल करता है कि आप क्या चाहते हैं: इसकी एक उच्च डिस्क स्थान लागत है, लेकिन प्रश्न वास्तव में तेज़ हैं।

सामान्य तौर पर, इसे दूसरे तरीके से देखने के लिए बेहतर है: आपके पास शब्दकोश में सभी शब्दों का एक सूचकांक है। अब, इनपुट शब्द w के लिए, यदि यह शब्दकोष में है, तो रुकें। अन्यथा, दूरी 1 पर सभी विविधताएं उत्पन्न करें और उन लोगों की तलाश करें। यदि वे वहां नहीं हैं, तो दूरी 2 पर बदलाव देखें, और इसी तरह ...

इस मूल विचार में कई सुधार हैं।


1
आपको पेपर के लिए अपने प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान संग्रह के लिए एक लिंक शामिल करना चाहिए था ।
दान डी।

4

हे(मीटरकश्मीर+1σकश्मीर)मीटरσकश्मीर


4

मैंने cs.stackexchange.com ( /cs//a/2096/1490 ) पर एक बहुत ही समान प्रश्न का उत्तर लिखा और फिर मुझे यह प्रश्न मिला। इसका उत्तर संपादित दूरी में पड़ोसी खोज के निकट अनुमानित उत्तर के लिए है (अर्थात एल्गोरिथ्म एक स्ट्रिंग को आउटपुट करता है जो क्वेरी स्ट्रिंग के निकटतम पड़ोसी के रूप में क्वेरी स्ट्रिंग के करीब है)। मैं यहां पोस्ट कर रहा हूं क्योंकि मुझे यहां दिए गए उत्तरों में से कोई भी संदर्भ नहीं मिल रहा है।


3

मुझे लगता है कि आप जो चाहते हैं वह वैगनर-फिशर एल्गोरिथ्म है: https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm महत्वपूर्ण अंतर्दृष्टि यह है कि, जिस शब्दकोश के माध्यम से आप ट्रैप कर रहे हैं, वह क्रमबद्ध है, दो लगातार शब्द एक लंबी उपसर्ग साझा करने की बहुत संभावना है इसलिए आपको प्रत्येक दूरी की गणना के लिए पूरे मैट्रिक्स को अपडेट करने की आवश्यकता नहीं है।


2

आप उपयोग कर सकते हैं क्या आपका मतलब है?

और फिर डायनामिक प्रोग्रामिंग का उपयोग करके "क्या आपका मतलब था" और इनपुट स्ट्रिंग द्वारा लौटाए गए उत्तर के बीच लेवेंसहाइट दूरी ढूंढें।


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

@ हेक बेनेट: मुझे लगा कि @ ग्रिगरी जवाडियन Did you mean?फीचर है। Did you mean?शब्द के अलावा दिए गए इनपुट के बहुत करीब है और यह बहुत कुशलता से करता है। :)
प्रतीक देवघरे

मुझे लगता है कि आपके विचार अच्छे हैं, लेकिन ऐसा लगता है कि ग्रिगोरी कुछ गहरी और अधिक विशिष्ट चीज़ों के लिए पूछ रहा है।
हक बेनेट

@ चक बेनेट: हाँ आप सही हैं! :)
प्रतीक देवघरे

-1

एक तरीका यह है कि एक मशीन लर्निंग मॉडल को शब्दों को वैक्टरों तक ले जाने के लिए प्रशिक्षित किया जाए और लेवेंसहाइट दूरी को यूक्लिनियन दूरी पर मैप किया जाए। फिर आप जिस शब्दकोश का उपयोग करना चाहते हैं, उसके लिए आप वैक्टर से बाहर एक केडीट्री का निर्माण कर सकते हैं। मैंने एक ज्यूपिटर नोटबुक बनाई है जो यहां ऐसा करती है: https://gist.github.com/MichaelSnowden/9b8b1e662c98c514d571f4d5c20c3a03

DW की टिप्पणियों के अनुसार:

  1. प्रशिक्षण प्रक्रिया = अनुकूली ढालों के साथ स्टोचैस्टिक ग्रेडिएंट वंश
  2. नुकसान फ़ंक्शन = सही एडिट दूरी और यूक्लिडियन दूरी के बीच चुकता त्रुटि
  3. प्रशिक्षण डेटा = 1 और 32 अक्षरों के बीच लंबे समय तक यादृच्छिक स्ट्रिंग (सामान्य टाइपो के वास्तविक वितरण से मेल खाने वाले डेटा के साथ सुधार किया जा सकता है)
  4. मात्रात्मक परिणाम: 2048 के बैच आकार (लगभग एक मिनट) के साथ लगभग 150 युगों के लिए प्रशिक्षण के बाद, 512 आयामों के शब्द एम्बेडिंग का उपयोग करते हुए, एक छिपी हुई परत के साथ, सही संपादित दूरी और पूर्वानुमानित दूरी के बीच औसत निरपेक्ष त्रुटि। लगभग 0.75 पर बैठता है, जिसका अर्थ है कि संपादित की गई दूरी लगभग एक वर्ण की है

मॉडल संरचना का सारांश:

  1. प्रत्येक वर्ण के लिए एक अंतर्निहित एम्बेडिंग बनाएं, जिसमें अशक्त वर्ण शामिल है (वर्ण सीमा के तहत दाएं-पैड पाठ के लिए बाद में उपयोग किया जाता है)
  2. पाठ के दाहिने भाग को अशक्त वर्ण के साथ रखें जब तक कि वह वर्ण सीमा (32) पर न हो
  3. इन एम्बेडिंग को सम्‍मिलित करें
  4. निचले-आयामी शब्द एम्बेडिंग (512-आयामी) का उत्पादन करने के लिए फ़ीड-फॉरवर्ड न्यूरल नेट के माध्यम से एम्बेडिंग को चलाएँ
  5. इसे दोनों शब्दों के लिए करें
  6. वैक्टर के बीच यूक्लिडियन दूरी का पता लगाएं
  7. सही लेवेन्शेटिन दूरी और यूक्लिडियन दूरी के बीच औसत चुकता त्रुटि होने के लिए नुकसान सेट करें

मेरा प्रशिक्षण डेटा सिर्फ यादृच्छिक तार है, लेकिन मुझे लगता है कि प्रशिक्षण डेटा (टाइपो / सही शब्द) जोड़े थे, तो परिणाम वास्तव में सुधार कर सकते हैं। मैं समाप्त कर दिया /usr/share/dict/wordsक्योंकि यह आमतौर पर उपलब्ध है।


2
आप एक एमएल मॉडल को कैसे प्रशिक्षित करते हैं ताकि वे शब्द जो समान वैक्टर के लिए लेवेंसहाइट दूरी के नक्शे में पास हों? उसके लिए आप किस प्रशिक्षण प्रक्रिया और हानि कार्य का उपयोग करते हैं? क्या आप अपने उत्तर में विधि को संक्षेप में प्रस्तुत कर सकते हैं, ताकि उत्तर अभी भी उपयोगी हो, भले ही लिंक काम करना बंद कर दे, और इसलिए कि हमें आपके द्वारा उपयोग की जाने वाली विधि को समझने के लिए आपके नोटबुक के माध्यम से खुदाई करने की आवश्यकता नहीं है? इसके अलावा, क्या आप मूल्यांकन कर सकते हैं कि यह कुछ मात्रात्मक तरीके से कितनी अच्छी तरह काम करता है? क्या यह विकल्प से बेहतर है?
DW

जैसा कि यह खड़ा है, यह (मुझे लगता है) CSTheory के लिए एक खराब फिट है। यही है, क्या विशेष रूप से सुझाव दिया है, और इसके लिए कोई सैद्धांतिक औचित्य का कोई विचार नहीं है।
क्लेमेंट सी।

@DW इस बारे में क्षमा करें - मैंने एक बहुत बड़ा संपादन किया है, जो व्यापक होना चाहिए, लिंक नीचे चला जाता है (या आप नोटबुक के माध्यम से प्रहार नहीं करना चाहते हैं)। हालांकि यह वास्तव में सीएस सिद्धांत नहीं है क्योंकि यह शोध नहीं है, मुझे लगता है कि यह एक व्यावहारिक दृष्टिकोण है क्योंकि यह प्रशिक्षण और अनुमान दोनों के लिए तेज और आसान है।
michaelsnowden

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

@DW यदि आप नोटबुक में परिणामों को देखते हैं, तो पुनर्प्राप्ति ने सभ्य परिणाम लौटा दिए - समान लंबाई के तार नहीं। मैं वास्तव में आपको इसे स्किम करने के लिए प्रोत्साहित करूंगा। मैं इसे तुच्छ और बेकार नहीं कहूंगा।
michaelsnowden
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.