Manticore में प्रासंगिकता स्कोरिंग : भाग I

यह लेख Manticore Search में प्रासंगिकता स्कोरिंग कैसे काम करता है, इस पर एक श्रृंखला का पहला है। हम प्रासंगिकता के आधार के साथ शुरू करते हैं: शब्द आवृत्ति और विशिष्टता।

स्कोरिंग की सरल परिभाषा

शोध इंजन जैसे Sphinx/Manticore Search दस्तावेज़ों से पाठ लेता है, इसे टोकनों में विभाजित करता है और इस संग्रह पर टोकनों/शब्दों का एक थैला खोजने की अनुमति देता है।
सबसे सरल परिदृश्य में, यह संग्रह टोकनों/शब्दों (जिसे हम इंडेक्स शब्दकोष कहते हैं) और दस्तावेज़ों की सूची содержит करता है जहां वे पाए गए और दस्तावेज़ के क्षेत्रों में जिन्हें उनमें पाया गया है।

शोध सबसे पहले पहचानता है कि क्या एक इनपुट शब्द संग्रह में मौजूद है और यह दस्तावेज़ों की सूची निकालता है जिसे बाद में अन्य शब्दों की सूचियों के साथ संयुक्त किया जाता है जिससे उन दस्तावेजों की सूची बनाई जाती है जो इनपुट में सभी शब्दों को शामिल करते हैं।
यदि हमारे पास इस मानदंड का पालन करते हुए एक से अधिक दस्तावेज़ हैं, तो अगला कदम उनके बीच अंतर करना है। इनमें से कौन से दस्तावेज़ दिए गए इनपुट के लिए अधिक प्रासंगिक हैं?
एक पहला और सरल विभाजक यह है कि प्रत्येक इनपुट शब्द की दस्तावेज़ में घटनाओं की गणना की जाए। अधिक घटनाएँ क्या अधिक प्रासंगिक शब्द का मतलब है? यह निर्भर करता है।
कुछ शब्द दस्तावेज़ में कई बार पाए जा सकते हैं - जिसे हम मान सकते हैं कि वह शब्द उस दस्तावेज़ के लिए महत्वपूर्ण है, लेकिन वह शब्द संग्रह से कई अन्य दस्तावेज़ों में भी दिखाई दे सकता है - जो यह सवाल उठाता है कि क्या वह शब्द केवल एक सामान्य शब्द है और इसकी महत्वता को कम किया जाना चाहिए।
यदि हम दस्तावेज़ में एक शब्द की घटनाएँ (आवृत्ति) गिनते हैं, तो हम इन सामान्य शब्दों के संभावित प्रभाव (हमारी गणना पर) को दबाना चाहेंगे। इसके लिए हम शब्द के साथ दस्तावेज़ों की एक काउंटर जोड़ते हैं - यह “शब्द आवृत्ति” है - और एक और काउंटर जो हमें बताता है कि शब्द कितने दस्तावेज़ों में पाया जाता है (कुल की तुलना में) - इसका प्रतिलोम ज्ञात है के रूप में मौलिक दस्तावेज़ आवृत्ति (IDF) और यह एक शब्द की विशिष्टता का एक माप है।
साथ में ये दोनों TF-IDF बनाते हैं जो हमें बताते हैं कि किसी शब्द का एक संग्रह में किसी दस्तावेज़ के सापेक्ष कितना महत्वपूर्ण है। IDF के आधार पर हम एक और व्यापक रूप से उपयोग की जाने वाली रैंकिंग फ़ंक्शन - BM25 भी गणना कर सकते हैं।

BM25 और TF-IDF

ये कारक Manticore Search में कैसे लागू होते हैं और कैसे उपयोग किए जा सकते हैं?
शुरुआत के लिए, कई अंतर्निहित रेंकर्स (स्कोरिंग सूत्र) हैं जिन्हें तुरंत उपयोग किया जा सकता है। लेकिन सबसे महत्वपूर्ण है अभिव्यक्ति रेंकर जो इन कारकों को एक्सेस करने और कस्टम सूत्र बनाने की अनुमति देता है।
हमने पहले BM25 रैंकिंग फ़ंक्शन का उल्लेख किया था, जो Manticore में डिफ़ॉल्ट रेंकर (proximity_bm25) में शामिल है और इसे रैंकिंग अभिव्यक्तियों में दस्तावेज़-स्तरीय कारक के रूप में भी उपयोग किया जा सकता है।
हम BM25 के विवरण में नहीं जा रहे हैं क्योंकि इसके बारे में बहुत सारी वैज्ञानिक पत्र हैं, लेकिन हम Manticore कार्यान्वयन पर ध्यान केंद्रित करेंगे।
bm25 कारक के बारे में यह ध्यान देने योग्य है कि नाम थोड़ा अनुचित है क्योंकि यह BM25 का पारंपरिक कार्यान्वयन नहीं है, बल्कि एक अनुपात अनुमान है BM25(K1=1.2,B=0) - जिसे कुछ पत्रों में BM15 कहा जाता है।
आप अभी भी क्लासिक BM25 का उपयोग कर सकते हैं और bm25a(k1,b) रैंकिंग फ़ंक्शन के साथ k1 और b पैरामीटर को भी समायोजित कर सकते हैं।
एक और अधिक उन्नत संस्करण bm25f(k1, b, {field=weight, …}) जो फ़ील्ड के लिए भी वेट्स सेट करने की अनुमति देता है। ध्यान दें कि यह नियमित field_weights (बाद में इसके बारे में) से अलग है और इसे index_field_lenghts विकल्प की आवश्यकता होती है।
फ़ील्ड स्तर पर, TF-IDF को कई तरीकों से एक्सेस किया जा सकता है: **tf\_idf** प्रत्येक मेल खाता कीवर्ड की फ़ील्ड में प्रत्येक घटना के लिए tf_idf मानों का योग है। इसके अतिरिक्त, **sum\_idf** प्रत्येक मिलान कीवर्ड के लिए प्रत्येक tf_idf मान का योग है (इसलिए घटनाओं द्वारा गुणा नहीं किया गया) और **max\_idf** और **min\_idf** tf_idf के सबसे बड़े मान, क्रमशः सबसे छोटे tf_idf प्रदान करते हैं।
IDF की गणना को **idf** के द्वारा नियंत्रित किया जा सकता है OPTION क्लॉज़। प्रारंभिक कार्यान्वयन (पूर्व Sphinx 2.1) में IDF मानों को सामान्यीकृत किया गया था - इसका मतलब है सामान्य शब्द (जो 50% से अधिक दस्तावेज़ों में पाए गए) को दंडित किया गया (idf=‘normalized’)। IDF का मान [-log(N),log(N)] के बीच होता है। इस मोड में, “सामान्य शब्द + नॉन-सामान्य शब्द” का मिलान ऐसे मिलान की तुलना में IDF योग प्राप्त करता है जिसमें केवल नॉन-सामान्य शब्द शामिल होता है। इसे पार करना (यदि वांछित हो) एक नए मोड (idf=‘plain’) जोड़ा गया जहां IDF मान के साथ कोई दंड नहीं होता है जो [0,log(N)] के बीच होता है। इसके शीर्ष पर, इस IDF मान को क्वेरी कीवर्ड की गणना द्वारा विभाजित किया गया है ताकि tf_idf का योग [0,1] की सीमा में फिट हो सके।
इसने बूलियन प्रश्न में एक समस्या लाई जब “found-word” बनाम “found-word OR not-found-word” समान परिणाम सेट पर विभिन्न भार प्रदान करेगा क्योंकि विभाजन के कारण।
इसे ठीक करने के लिए, idf को अन्य सेटिंग्स की जोड़ी मिली जो नियंत्रित करने की अनुमति देती हैं कि क्या विभाजन लागू होता है या नहीं। डिफ़ॉल्ट idf सेटिंग्स संगतता कारणों से normalized,tfidf_normalized रहती हैं, लेकिन idf='plain,tfidf_unnormalized' सामान्य मामलों में बेहतर परिणाम प्रदान करना चाहिए।

अगला क्या है?

इस बिंदु पर, हम शब्दों की आवृत्ति और विशिष्टता के आधार पर एक स्कोर बना सकते हैं, लेकिन यह केवल हमें यह बताता है कि शब्द दस्तावेज़ में हैं न कि शब्द एक-दूसरे के पास समूहबद्ध हैं या बस पाठ के चारों ओर फैले हुए हैं। जिससे हमें संग्रह में जोड़ने के लिए एक और चीज़ की आवश्यकता है: पाठ में शब्दों की स्थितियाँ
स्थितियों के होने से हमें यह जानने की अनुमति मिलती है कि क्या इनपुट शब्द दस्तावेज़ के एक सटीक क्षेत्र से मेल खाते हैं, यदि वे शब्दशः पाए गए हैं या एक-दूसरे से कितने करीब/दूर हैं या वे पाठ की शुरुआत के कितने करीब हैं (जैसा कि हम मान सकते हैं कि करीब होना या यहां तक कि पाठ की शुरुआत करने से दस्तावेज़ के अंत में होने की तुलना में अधिक प्रासंगिक है)।

मैंटीकोर सर्च इंस्टॉल करें

मैंटीकोर सर्च इंस्टॉल करें