2012-11-22 35 views
12

मैं उस क्षेत्र में नया हूं और मुझे आश्चर्य है कि अत्याधुनिक क्या है और जहां मैं इसके बारे में पढ़ सकता हूं।बड़े डेटा में अस्पष्ट खोज कैसे करें

मान लीजिए कि मेरे पास सिर्फ एक कुंजी/मूल्य स्टोर है और मेरे पास कुछ दूरी (key1, key2) परिभाषित है (सुनिश्चित नहीं है कि यह एक मीट्रिक होना चाहिए, यानी यदि त्रिभुज असमानता हमेशा पकड़नी चाहिए)।

जो मैं चाहता हूं वह ज्यादातर एक खोज (कुंजी) फ़ंक्शन है जो मुझे खोज-कुंजी के लिए एक निश्चित दूरी तक कुंजी के साथ सभी आइटम देता है। शायद दूरी सीमा सीमित है। शायद यह भी एक आलसी इटरेटर है। हो सकता है कि एक गिनती सीमा भी हो और एक वस्तु (कुंजी, मान) कुछ संभाव्यता पी के साथ वापस सेट में हो जहां पी = 1/दूरी (कुंजी, खोज-कुंजी) या तो (यानी, सही मिलान निश्चित रूप से होगा उच्च संभावना के साथ कम से कम सेट और करीबी मैचों में)।


एक उदाहरण एप्लिकेशन MusicBrainz में फिंगरप्रिंट मिलान है। वे AcoustId फिंगरप्रिंट का उपयोग करते हैं और this compare function परिभाषित करते हैं। वे PostgreSQL जीआईएन इंडेक्स का उपयोग करते हैं और मुझे लगता है (हालांकि मैंने ध्वनिक-सर्वर कोड को पूरी तरह से समझ/पढ़ा नहीं है) GIN Partial Match Algorithm लेकिन मैंने गीलेर को पूरी तरह से समझ नहीं लिया है जो मैंने पूछा और यह कैसे काम करता है।


पाठ के लिए, क्या मैं अब तक पाया है कुछ phonetic algorithm उपयोग करने के लिए उनके उच्चारण के आधार पर शब्दों को आसान बनाने के लिए है। एक उदाहरण here है। यह ज्यादातर खोज स्थान को एक छोटी जगह पर तोड़ने के लिए है। हालांकि, इसमें कई सीमाएं हैं, उदा। यह अभी भी छोटी जगह में एक आदर्श मैच होना चाहिए।

लेकिन वैसे भी, यदि मैं मौजूद हूं, तो मैं एक और सामान्य समाधान भी खोज रहा हूं।

+1

नहीं पूरा जवाब है, लेकिन है देखो (http://en.wikipedia.org/wiki/Vp-tree और http: // stevehanov .ca/ब्लॉग/index.php? id = 130)। वे मीट्रिक रिक्त स्थान में तेज़ प्रश्नों की अनुमति देते हैं। –

उत्तर

10

कोई (तेज़) जेनेरिक समाधान नहीं है, प्रत्येक एप्लिकेशन को अलग-अलग दृष्टिकोण की आवश्यकता होगी।

दो उदाहरणों में से कोई भी वास्तव में पारंपरिक निकटतम पड़ोसी खोज नहीं करता है। AcoustID (मैं लेखक हूँ) बस सटीक मैचों की तलाश में है, लेकिन यह उम्मीद में बहुत अधिक हैश की खोज करता है कि उनमें से कुछ मैच करेंगे। फोनेटिक सर्च उदाहरण शब्दों को उनके ध्वन्यात्मक प्रतिनिधित्व में बदलने के लिए मेटाफोन का उपयोग करता है और यह केवल सटीक मिलान की तलाश में है।

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

एक सामान्य दृष्टिकोण locality-sensitive hashing (एलएसएच) का उपयोग स्मार्ट हैशिंग विधि के साथ करना है, लेकिन जैसा कि आप अपने दो उदाहरणों में देख सकते हैं, कभी-कभी आप भी सरल दृष्टिकोण से दूर हो सकते हैं।

बीटीडब्ल्यू, आप विशेष रूप से टेक्स्ट खोज के लिए देख रहे हैं, सबसे आसान तरीका यह है कि आप इसे अपने इनपुट को N-grams पर विभाजित कर सकते हैं और उन्हें इंडेक्स कर सकते हैं। आपके दूरस्थ कार्य को परिभाषित करने के तरीके के आधार पर, यह आपको बिना किसी काम के सही उम्मीदवार मैच दे सकता है।

+0

बहुत बहुत धन्यवाद! मुझे यहां से आपको जवाब देने की उम्मीद नहीं होगी। :) यही कारण है कि मैं इंटरनेट से प्यार करता हूँ। - क्या आप शायद हाल के शोध परिणामों के साथ इस बारे में किसी भी साहित्य (सामान्य रूप से बड़े डेटा में अस्पष्ट खोज, कुछ सिंहावलोकन) की सिफारिश कर सकते हैं? – Albert

+0

इसके अलावा, एक और सवाल: AcoustId में हैश की कितनी विविधताएं आप खोजते हैं? हैमिंग दूरी 1 या तो बस के साथ सभी हैश? – Albert

+0

क्षमा करें, मुझे इस बारे में कोई साहित्य नहीं पता है। आमतौर पर आपको केवल एक विशिष्ट डोमेन के बारे में कुछ लेने की आवश्यकता होती है। AcoustID के बारे में, यह हैश विविधताओं की खोज नहीं करता है, लेकिन फिंगरप्रिंट हैंश वैक्टर हैं, इसलिए वेक्टर में सभी वस्तुओं की खोज करना, उनमें से एक बिल्कुल ठीक से मेल खाता है। –

4

मेरा सुझाव है कि आप FLANN Fast Approximate Nearest Neighbors पर एक नज़र डालें। बड़े डेटा में अस्पष्ट खोज को निकटतम पड़ोसियों के रूप में भी जाना जाता है।

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

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

फिर खोज चरण आता है, जो बहुत तेज़ है। आप अधिकतम दूरी और/या पड़ोसियों की अधिकतम संख्या निर्दिष्ट कर सकते हैं।

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

शाज़म आपके गीत को तुरंत ढूंढने के लिए ज्यामितीय अनुमानों के साथ एक विशेष तकनीक का उपयोग करता है। कंप्यूटर दृष्टि में हम अक्सर बो का उपयोग करते हैं: शब्दों का थैला, जो मूल रूप से टेक्स्ट पुनर्प्राप्ति में दिखाई देता था।

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

हमें बताएं।

+0

इसके अलावा, संदर्भों के लिए बहुत बहुत धन्यवाद! आपके लिए एक ही सवाल: क्या आप शायद इस क्षेत्र के बारे में किसी भी अद्यतित साहित्य की सिफारिश कर सकते हैं? – Albert

+0

निश्चित रूप से यह आपके डेटा पर निर्भर करता है। यह छवि या ऑडियो प्रसंस्करण है? – Kikohs

+0

मुझे सामान्य समाधान और इसके पीछे सिद्धांत के बारे में दिलचस्पी है। या कुछ साहित्य जो कम से कम ज्यादातर मामलों को शामिल करते हैं। इसके अलावा, FLANN सामान्य दिखता है। मुझे लगता है कि आप इसे छवि या ऑडियो दोनों के लिए उपयोग कर सकते हैं, है ना? उदाहरण के लिए – Albert

0

आपकी कुंजी/मानों की तरह निर्भर करता है, लेवेनशेटिन एल्गोरिदम (जिसे संपादित-दूरी भी कहा जाता है) मदद कर सकता है। यह कम से कम संपादन कार्यों की गणना करता है जो एक और स्ट्रिंग प्राप्त करने के लिए एक स्ट्रिंग को संशोधित करने के लिए जरूरी हैं। VP-पेड़ पर