blog-post

GitHub पर वेक्टर सर्च

परिचय

GitHub की खोज कार्यक्षमता कभी-कभी संघर्ष कर सकती है, विशेष रूप से जब आप सीधे प्रश्न पूछने की कोशिश करते हैं। यह दृष्टिकोण अक्सर अप्रासंगिक परिणामों की ओर ले जाता है, जो निराशाजनक हो सकता है। यह समस्या तब अधिक स्पष्ट हो जाती है जब आप मुद्दों या पुल अनुरोधों के माध्यम से खोजते हैं, जहाँ विवरण वास्तव में मायने रखते हैं।

आइए एक उदाहरण देखें:

GitHub Search vs Manticore Semantic Search on GitHub

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

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

FYI, Manticore Search एक शक्तिशाली ओपन-सोर्स सर्च इंजन है जिसने समय की कसौटी पर खरा उतरकर 2001 से अपनी जड़ें फैला रखी हैं। पहले इसे Sphinx के नाम से जाना जाता था, जो MySQL और PostgreSQL डेटाबेस के लिए एक पूर्ण-पाठ खोज समाधान था। यह परियोजना तब अपने आप में अस्तित्व में आई जब 2017 में इसे फोर्क किया गया और Manticore Search के रूप में पुनर्जन्म मिला, जो एक स्वतंत्र, पूर्ण ओपन-सोर्स सर्च इंजन के रूप में विकसित होता रहा।

सेमांटिक सर्च क्या है?

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

लाभ

  • संदर्भ समझना: यह प्रश्नों के संदर्भ को व्याख्या करता है ताकि सटीक परिणाम प्रदान किए जा सकें।
  • बढ़ी हुई सटीकता: यह उपयोगकर्ता के इरादे को समझकर अप्रासंगिक परिणामों को कम करता है।
  • बेहतर उपयोगकर्ता अनुभव: यह तेजी से प्रासंगिक जानकारी प्रदान करके समय और प्रयास की बचत करता है।

GitHub पर पारंपरिक खोज की समस्या

जब आप GitHub पर सरल कीवर्ड का उपयोग करके खोज करते हैं, तो अक्सर आपको वह नहीं मिलता जो आप वास्तव में ढूंढ रहे हैं। मान लीजिए आप “बग फिक्स” टाइप करते हैं मदद पाने के लिए। खोज आपको पृष्ठ दिखा सकती है जो “बग फिक्स” का सटीक उल्लेख करती है, लेकिन यह संबंधित विषयों जैसे “त्रुटि समाधान” या “समस्या समाधान” को छोड़ सकती है।

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

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

यहाँ हम GitHub पर “इंटीग्रेशन बगफिक्स” की खोज कर रहे हैं और उसी रिपॉजिटरी में कुछ भी नहीं मिला:

Integration Bug Fix on Github

और Manticore Semantic Search पर “इंटीग्रेशन बगफिक्स” के लिए वही खोज हमें वह परिणाम देती है जिससे हम अधिक प्रसन्न होंगे:

Integration Bug Fix at Manticore Semantic Search

हमने GitHub पर सेमांटिक सर्च कैसा दिख सकता है, इसका एक प्रोटोटाइप बनाया है। हमारे GitHub मुद्दा खोज डेमो को देखें जो Manticore Vector Search द्वारा संचालित है। यह आपको GitHub के मुद्दों, PRs, और टिप्पणियों के माध्यम से खोजने की अनुमति देता है इस तरह से जो संदर्भ को समझता है। यह विशेष रूप से उपयोगी है जब आप सही शब्द नहीं याद कर पाते हैं लेकिन उसके संदर्भ को जानते हैं। आप अपने खुद के रिपॉजिटरी को यहाँ जोड़ सकते हैं और निर्देशों का पालन करके GitHub पर परियोजना को स्थानीय रूप से चला सकते हैं।

आइए देखते हैं कि यह दृष्टिकोण आपकी खोज परिणामों की प्रासंगिकता और सटीकता को कैसे सुधार सकता है।

सफलता की कहानी: Manticore GitHub डेमो में वेक्टर सर्च जोड़ना

जब हमने GitHub मुद्दा खोज डेमो में वेक्टर सर्च को जोड़ा, जो Manticore Search की क्षमताओं को प्रदर्शित करता है, परिणाम प्रभावशाली थे। पारंपरिक कीवर्ड खोजें उन प्रश्नों के लिए अत्यधिक प्रभावी हैं जहां विशिष्ट शर्तें ज्ञात हैं और इन शर्तों से मेल खाने में सटीकता महत्वपूर्ण है। हालाँकि, सेमांटिक सर्च का जोड़ इसे पूरा करता है क्योंकि यह हमें यह पता लगाने की अनुमति देता है कि उपयोगकर्ता वास्तव में क्या देख रहे हैं, विशेष रूप से उन संदर्भों में जहाँ प्रश्न के इरादे या अर्थ उतना ही महत्वपूर्ण होता है जितना कि उपयोग किए गए विशिष्ट शब्द।

Hugging Face के प्री-ट्रेंड मॉडल का उपयोग करते हुए, हमने पाठ को उच्च-आयामी वेक्टर में बदला। ये वेक्टर शब्दों के पीछे के अर्थ को समझते हैं, जिससे हम अधिक सटीक खोजें कर पाते हैं।

यहां कुछ उदाहरण दिए गए हैं कि यह Manticore Search repository में खोज की गुणवत्ता को कैसे सुधार सकता है:

उदाहरण: खुले बग को अधिक आसानी से ढूंढना

Memory Leak Example

कल्पना करें कि आप एक डेवलपर हैं जो एक विशेष बग से संबंधित समस्याओं के लिए देख रहा है। “memory leak” के लिए एक पारंपरिक खोज “limit the memory usage” या “index out of memory” शीर्षक वाली समस्याओं को मिस कर सकती है। वектор खोज के साथ, इंजन जानता है कि ये शर्तें समान हैं। इसका मतलब है कि आप सभी प्रासंगिक परिणाम प्राप्त करते हैं बिना सभी संभावित कीवर्ड्स का अनुमान लगाए।

उदाहरण: नई फीचर अनुरोध खोलने से पहले जांचें कि क्या फीचर अनुरोध मौजूद है

User Authentication Example

सोचें कि उपयोगकर्ता “उपयोगकर्ता प्रमाणीकरण” से संबंधित फीचर अनुरोधों की खोज कर रहे हैं। कीवर्ड खोज केवल सही वाक्यांश वाली समस्याओं को ही दिखा सकती है, लेकिन अर्थपूर्ण खोज संबंधित शर्तों जैसे “login system”, “Access denied”, और “Session-level user variables” को समझती है। इस तरह, कोई मूल्यवान फीडबैक मिस नहीं होता।

उदाहरण: सहयोग में सरलता

API Rate Limits Example

एक परियोजना के विभिन्न भागों पर काम कर रहे योगदानकर्ताओं को वास्तव में अर्थपूर्ण खोज से लाभ हो सकता है। उदाहरण के लिए, “API rate limits” के लिए एक खोज “throttling”, “250 results” सीमा, और “rate limiting” के बारे में संबंधित चर्चाओं को लाती है। यह टीम के सदस्यों को संबंधित समस्याओं के साथ जोड़ने में मदद करता है भले ही वे विभिन्न शर्तों का उपयोग करें।

उदाहरण: सुरक्षा ऑडिट

SQL Injection Example

सुरक्षा ऑडिट में गहनता की आवश्यकता होती है, अक्सर विभिन्न सुरक्षा कमजोरियों की खोज की आवश्यकता होती है। पारंपरिक कीवर्ड विधियों के साथ “SQL injection” के लिए एक खोज “database infiltration” या “SQL vulnerability” के तहत मुद्दों को मिस कर सकती है। अर्थपूर्ण खोज सभी संबंधित सुरक्षा चिंताओं को खोजने को सुनिश्चित करती है, जिससे अधिक संपूर्ण सुरक्षा ऑडिट में मदद मिलती है।

मंटिकोर्स सर्च का उपयोग करते हुए GitHub पर Semantic Search कैसे शुरू करें

हमारे GitHub डेमो प्रोजेक्ट में अर्थपूर्ण खोज को लागू करने के लिए, हमने इन चरणों का पालन किया:

  • Manticore सेटअप करना: हमने Manticore Search को अपने प्रोजेक्ट के साथ एकीकृत किया और वektor खोज कार्यक्षमता लागू करने के लिए Columnar library स्थापित की।

  • डेटाबेस संरचना बनाना: हमने GitHub मुद्दों और उनके अर्थपूर्ण प्रतिनिधित्व को संग्रहीत करने के लिए Manticore Search में एक रियल-टाइम टेबल सेटअप किया। इन प्रतिनिधित्वों को, जिन्हें एम्बेडिंग के रूप में भी जाना जाता है, संख्याओं के ऐरे के रूप में संग्रहीत किया गया है (जिसे वektor भी कहा जाता है)। टेबल में समस्या टेक्स्ट, एक अद्वितीय पहचानकर्ता, और एक वektor शामिल हैं जो टेक्स्ट के अर्थ को पकड़ता है।

    हमने जो स्कीमा इस्तेमाल किया, उसका एक उदाहरण यहां है:

    CREATE TABLE issues (
    	id BIGINT,
    	body TEXT,
    	vector FLOAT_VECTOR knn_type='hnsw' knn_dims='4' hnsw_similarity='l2'
    );
    

    इस सेटअप में, body समस्या का टेक्स्ट है, id एक अद्वितीय पहचानकर्ता है, और vector के लिए body का टेक्स्ट एम्बेडिंग है।

    आप पूछ सकते हैं: टेक्स्ट एम्बेडिंग क्या हैं?

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

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

    हमने Sentence Transformers से एक एआई मॉडल का उपयोग किया। यदि आप शुरू करने का एक आसान तरीका चाहते हैं, तो हम HuggingFace के Text Embedding API service को देखने की सिफारिश करते हैं। यह आपको अपनी API चलाने और आपकी आवश्यकताओं के अनुसार एम्बेडिंग बनाने की अनुमति देता है।

  • डेटा डालें: अपने टेबल को वektor डेटा से भरें।

    चलिए देखते हैं कि हमारे द्वारा अभी चर्चा किए गए स्कीमा के साथ एक इंसर्ट स्टेटमेंट कैसे काम करेगा। इससे हमें यह स्पष्ट चित्र मिलेगा कि डेटा हमारे डेटाबेस संरचना में कैसे जोड़ा जाता है।

    INSERT INTO issues VALUES (
      1,
      'Hello World',
      (0.653448, 0.192478, 0.017971, 0.339821)
    ), (
      2,
      'This is a bug',
      (-0.148894, 0.748278, 0.091892, -0.095406)
    );
    
  • डेटा क्वेरी करें: वektor-आधारित प्रश्नों का उपयोग करके संदर्भ से संबंधित जानकारी प्राप्त करें।

    वektor प्रश्नों का उपयोग करके दस्तावेज़ प्राप्त करने के लिए, हम इन चरणों का पालन करते हैं:

    1. खोज प्रश्न प्राप्त करें।
    2. प्रश्न के लिए एक टेक्स्ट एम्बेडिंग उत्पन्न करें।
    3. एक प्रश्न में प्राप्त संख्या का उपयोग करें जैसे:
    SELECT id, body
    FROM issues
    WHERE knn ( vector, 10, (0.286569, -0.031816, 0.066684, 0.032926) );
    

    ध्यान दें कि 10 पैरामीटर K है, जो निकटतम पड़ोसियों (निकटतम वektor) की संख्या को दर्शाता है जिसे परिणाम सेट में बनाए रखना है। डिफ़ॉल्ट रूप से, परिणाम वektor दूरी द्वारा क्रमबद्ध होते हैं, निकटतम पहले दिखाई देते हैं।

यह समाप्त हुआ! सिर्फ कुछ कदमों में, हमने टेक्स्ट एम्बेडिंग और Manticore Search की वektor खोज विशेषता का उपयोग करके एक अर्थपूर्ण खोज बनाई है। यही इतना आसान है! 🙌

कीवर्ड खोज बनाम अर्थपूर्ण खोज

जब GitHub पर कोड खोज को बढ़ाने की बात आती है, तो अर्थपूर्ण खोज कुछ स्पष्ट फायदे प्रदान करती है:

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

हालांकि, सार्थक खोज की पारंपरिक कीवर्ड खोज की तुलना में सीमाओं पर विचार करना महत्वपूर्ण है:

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

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

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

GitHub की खोज क्षमताओं में दोनों तरीकों को शामिल करने से डेवलपर्स को सही कोड को तेज़ी से और अधिक कुशलता से खोजने में मदद मिलेगी, सार्थक खोज की जटिल समझ को कीवर्ड खोज की विश्वसनीयता और गति के साथ संतुलित करते हुए।

GitHub खोज का भविष्य: सार्थक खोज के साथ अधिक बुद्धिमान

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

पुल अनुरोधों, मुद्दों और टिप्पणियों के लिए सार्थक खोज कई प्रमुख लाभ प्रदान करती है:

  1. संदर्भ-जागरूक परिणाम: पारंपरिक खोज की तुलना में जो सटीक कीवर्ड मिलान पर निर्भर करती है, सार्थक खोज आपके क्वेरी के पीछे के संदर्भ और इरादे को समझती है। इसका अर्थ है कि आप प्रासंगिक पुल अनुरोधों, मुद्दों और टिप्पणियों को खोजने की अधिक संभावना रखते हैं, भले ही उन्होंने आपके द्वारा खोजे गए सटीक शब्दों का उपयोग न किया हो।
  2. प्राकृतिक भाषा प्रोसेसिंग: आप हरदन भाषा का उपयोग करके खोज कर सकते हैं, बिना किसी विशेष सिंटैक्स या कीवर्ड को याद किए। इससे आपको जो चाहिए, उसे खोजना आसान हो जाता है।
  3. सुधारा हुआ प्रासंगिकता रैंकिंग: सार्थक खोज परिणामों को प्राथमिकता दे सकती है कि वे आपकी क्वेरी के अर्थ से कितनी निकटता से मेल खाते हैं, जिससे आपको कई पुल अनुरोधों, मुद्दों या टिप्पणियों के माध्यम से नेविगेट करते समय समय बचाने में मदद मिलेगी।
  4. समानार्थक शब्दों और संबंधित अवधारणाओं की समझ: खोज इंजन संबंधित शब्दों और अवधारणाओं को पहचान सकता है, कई खोजों की आवश्यकता के बिना प्रासंगिक परिणामों के दायरे को बढ़ाते हुए।
  5. सहयोग में सुधार: संबंधित चर्चाओं और योगदान को ढूंढने में आसानी के कारण, सार्थक खोज परियोजनाओं के भीतर टीम सहयोग और ज्ञान साझाकरण में सुधार कर सकती है।
  6. ऐतिहासिक संदर्भ: सार्थक खोज की क्षमता है कि यह मुद्दों और पुल अनुरोधों में चर्चाओं के विकास को समझ सके, प्रासंगिक ऐतिहासिक संदर्भ शामिल करने वाले अधिक व्यापक परिणामों की पेशकश कर सके।
  7. क्रॉस-रिपॉजिटरी अंतर्दृष्टि: उन्नत सार्थक खोज संभावित रूप से कई रिपॉजिटरी के बीच अंतर्दृष्टि प्रदान कर सकती है, जिससे डेवलपर्स अन्य परियोजनाओं में संबंधित चर्चाओं या समाधानों को खोजने में मदद कर सके।

Manticore Search जैसी उन्नत डेटाबेस की मदद से सार्थक खोज का कार्यान्वयन अब अधिक संभव हो रहा है। इसके अंतर्निहित वेक्टर खोज क्षमताओं के साथ, Manticore Search GitHub जैसी प्लेटफार्मों के लिए इस अत्याधुनिक तकनीक को अपनाने के लिए रास्ता प्रशस्त कर रहा है।

हालांकि GitHub ने अभी तक सार्थक खोज को पूरी तरह से एकीकृत नहीं किया है, डेवलपर्स हमारे डेमो प्रोजेक्ट के माध्यम से इसकी शक्ति का अनुभव कर सकते हैं। यह ओपन-सोर्स पहल GitHub-जैसे वातावरण में सार्थक खोज की संभावना को प्रदर्शित करती है।

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

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