मशीन लर्निंग को सर्च इंजन डिज़ाइन में कैसे शामिल किया जाता है?


15

मैं वर्तमान में Apache Lucene पर आधारित एक छोटा सा इन-हाउस सर्च इंजन बना रहा हूं। इसका उद्देश्य सरल है - कुछ कीवर्ड के आधार पर, यह हमारी कंपनी के भीतर आंतरिक रूप से लिखे गए कुछ लेखों का सुझाव देगा। मैं बेस मैट्रिक के रूप में एक काफी मानक TF-IDF स्कोरिंग का उपयोग कर रहा हूं और शीर्ष पर अपना स्कोरिंग तंत्र बनाया है। ये सभी कुछ कोने के मामलों को छोड़कर उत्कृष्ट काम करते प्रतीत होते हैं जहाँ रैंकिंग गड़बड़ लगती है।

इसलिए मैं जो करने की योजना बना रहा हूं, वह खोज परिणामों के पेज में एक छोटा / प्रासंगिक नहीं लिंक जोड़ना है ताकि उपयोगकर्ता उन लोगों में से एक पर क्लिक कर सकें, जो इस नतीजे पर निर्भर करते हैं कि क्या पहली बार परिणाम को शामिल किया जाना चाहिए था।

मेरा विचार

  1. इन रेलेवेंट / नॉट रेलेवेंट को लेबल्स के रूप में समझें और एक प्रशिक्षण डेटा बनाएं।
  2. इस डेटा का उपयोग किसी क्लासिफायर (जैसे SVM) को प्रशिक्षित करने के लिए करें
  3. इस मॉडल को खोज इंजन में शामिल करें अर्थात, हर नया परिणाम क्लासिफायरियर से होकर गुजरेगा और इस पर एक लेबल लगाया जाएगा कि यह प्रासंगिक है या नहीं।

यह दृष्टिकोण मुझे सहज लगता है लेकिन यह सुनिश्चित नहीं है कि यह व्यवहार में काम करेगा या नहीं। मेरे दो विशिष्ट प्रश्न हैं:

  1. मुझे कौन सी सभी सुविधाएँ निकालनी चाहिए?
  2. क्या मशीन सीखने के घटक को खोज इंजन में एकीकृत करने का एक बेहतर तरीका है? मेरा अंतिम लक्ष्य दोनों व्यावसायिक तर्क के साथ-साथ उपयोगकर्ता प्रतिक्रिया के आधार पर रैंकिंग फ़ंक्शन को "सीखना" है।

4
मैंने एक बार ऐसा कुछ किया था और उपयोगकर्ताओं को इससे नफरत थी इसलिए मैंने इसे बंद कर दिया। समस्या उपयोगकर्ता व्यवहार था। उपयोगकर्ता अपनी शर्तों को बदलकर खोज परिणामों में कमजोरियों के अनुकूल हो जाते हैं, और फिर वे उन शर्तों का फिर से उपयोग करते रहेंगे। प्रणाली ने वस्तुओं की रैंकिंग को समायोजित करने का जवाब दिया और उन पसंदीदा शर्तों ने विभिन्न परिणाम उत्पन्न करना शुरू कर दिया। इससे यूजर्स नाराज हो गए। सीखने का मतलब यह समझदार नहीं है;)
रिएक्टगुलर

यहाँ एक कार्यान्वयन elasticsearch और AngularJS उपयोग कर रहा है - - यह भी स्पष्टीकरण की जरूरत है शामिल machinelearningblogs.com/2016/12/12/...
विवेक Kalyanarangan

जवाबों:


15

(१) मुझे कौन सी सुविधाएँ निकालनी चाहिए?

सबसे पहले, महसूस करें कि आप दस्तावेजों को वर्गीकृत नहीं कर रहे हैं। आप जोड़े जा रहे हैं (दस्तावेज़, क्वेरी) जोड़े, इसलिए आपको उन विशेषताओं को निकालना चाहिए जो व्यक्त करते हैं कि वे कितनी अच्छी तरह मेल खाते हैं।

रैंक करने के लिए सीखने में मानक दृष्टिकोण विभिन्न खोज इंजन सेटअपों (जैसे tf-idf, BM-25, आदि) के खिलाफ क्वेरी को चलाना है और फिर समानता स्कोर पर एक मॉडल को प्रशिक्षित करना है, लेकिन एक छोटे, डोमेन-विशिष्ट एसई के लिए, आपके पास इस तरह की सुविधाएँ हो सकती हैं

  • प्रत्येक शब्द के लिए, एक बूलियन जो इंगित करता है कि यह शब्द क्वेरी और दस्तावेज़ दोनों में है या नहीं। या शायद एक बूलियन नहीं है, लेकिन उन क्वेरी शब्दों का tf-idf वजन जो वास्तव में दस्तावेज़ में होता है।
  • इस तरह के रूप में विभिन्न ओवरलैप मैट्रिक्स Jaccard या तानिमोटो।

(२) खोज इंजन में मशीन लर्निंग घटक को एकीकृत करने का एक बेहतर तरीका है? मेरा अंतिम लक्ष्य दोनों व्यावसायिक तर्क के साथ-साथ उपयोगकर्ता प्रतिक्रिया के आधार पर रैंकिंग फ़ंक्शन को "सीखना" है।

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

इससे परे, जोड़ीदार और रैंक करने के लिए श्रवण सीखने में देखो; आप जो सुझाव दे रहे हैं वह तथाकथित बिंदुवार दृष्टिकोण है। IIRC, जोड़ीदार अभ्यास में बहुत बेहतर काम करता है। कारण यह है कि जोड़ीदार रैंकिंग के साथ, आपको बहुत कम क्लिक की आवश्यकता होती है: उपयोगकर्ताओं को प्रासंगिक / अप्रासंगिक के रूप में लेबल दस्तावेज़ रखने के बजाय, आप केवल उन्हें "प्रासंगिक" बटन देते हैं। फिर आप त्रिकोणीय (डॉक्यूमेंट 1, डॉक्यूमेंट 2, क्वेरी) पर एक द्विआधारी क्लासिफायरियर सीखते हैं जो बताता है कि डॉक्यूमेंट 1, डॉक्यूमेंट 2 की तुलना में क्वेरी के लिए अधिक प्रासंगिक है या इसके विपरीत। जब कोई उपयोगकर्ता लेबल कहता है, तो रैंकिंग में दस्तावेज़ 4 को प्रासंगिक माना जाता है, जो आपको सीखने के लिए छह नमूने देता है:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

इसलिए आपको मुफ्त में नेगेटिव मिलते हैं।

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


+1 धन्यवाद। यह दूसरी बार है जब आपने मेरी मदद की है! मुझे इसे पचाने में कुछ घंटे लगने दो। :)
लीजेंड

4
यह एक उत्कृष्ट जवाब है, मैं सिर्फ एक मामूली ट्वीक का सुझाव देना चाहूंगा। एक ऑक्स परिप्रेक्ष्य से, आपको "प्रासंगिक" बटन की तुलना में "अप्रासंगिक" बटन का उपयोग करके परिणाम प्राप्त करने की अधिक संभावना है। जब उन्होंने पाया कि वे क्या देख रहे हैं, तो परिणाम प्राप्त करने के लिए चारों ओर कौन चिपक जाता है? वे बहुत अधिक एक बटन है कि एक जैसी लगती है "अवसर शिकायत करने के लिए" जब वे नहीं मिला है कि वे क्या चाहते थे, क्योंकि उस बिंदु पर प्रणाली में सुधार वास्तव में अपने वर्तमान लक्ष्य के साथ गठबंधन किया है हिट करने के लिए की संभावना है।
रचेत

4
tl; dr यदि आप सिर्फ एक इनपुट का उपयोग करने जा रहे हैं, तो इसे "अप्रासंगिक" बना दें, लोगों को निराश होने पर इसे क्लिक करने की अधिक संभावना है।
रैचेट

"लिस्ट वाइज" दृष्टिकोण क्या होगा? इसके अलावा, क्या आपके पास मुफ्त के लिए 3 या 6 उदाहरण हैं? (अंतिम 3 को पहले 3 का दोहराव लगता है?)
अधिकतम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.