वाक्यांश-से-फ़िल्टर मैपिंग: उत्पाद फ़िल्टर के लिए सिमेंटिक खोज

यह लेख बताता है कि हम वाक्यांश-से-फ़िल्टर मैपिंग कैसे बनाते और विस्तारित करते हैं जो हमारी फ़िल्टर निष्कर्षण प्रणाली को शक्ति देते हैं। ये मैपिंग खोज क्वेरीज़ से प्राकृतिक भाषा के वाक्यांशों को संरचित उत्पाद फ़िल्टर से जोड़ती हैं।

समस्या: प्राकृतिक भाषा से फ़िल्टर निकालना

जब उपयोगकर्ता "16gb रैम वाला मिनी पीसी" खोजते हैं, तो हमें निकालना होता है:

  • फ़ॉर्म फ़ैक्टर: मिनी पीसी

  • मुख्य मेमोरी: 16

लेकिन उपयोगकर्ता एक ही इरादे को कई तरह से व्यक्त करते हैं:

  • "16gb रैम मिनी पीसी"

  • "मिनी कंप्यूटर 16 जीबी मेमोरी"

  • "छोटा पीसी 16gb"

  • "16 गिग्स वाला कॉम्पैक्ट डेस्कटॉप"

हमें एक ऐसी प्रणाली की आवश्यकता है जो इन सभी वाक्यांश विविधताओं को सही फ़िल्टर मानों पर मैप करे।

दो-चरणीय प्रक्रिया

हम वाक्यांश मैपिंग दो चरणों में बनाते हैं:

  1. चरण 3a: क्रमचय और फ़ीचर-विशिष्ट नियमों का उपयोग करके उत्पाद फ़ीचर से आधार वाक्यांश उत्पन्न करें
  2. चरण 4: एम्बेडिंग का उपयोग करके सिमेंटिक समानता के साथ विस्तार करें

यह संकर दृष्टिकोण नियम-आधारित सटीकता को सिमेंटिक लचीलेपन के साथ जोड़ता है।

चरण 3a: आधार वाक्यांश जनरेशन

फ़ीचर मेटाडेटा

प्रत्येक उत्पाद फ़ीचर में फ़ीचर अनुक्रम में मेटाडेटा होता है:

  • शीर्षक: श्रेणी का नाम (उदाहरण के लिए, प्रोसेसर फ़ीचर के लिए "प्रोसेसिंग")

  • इकाई: माप की इकाई (उदाहरण के लिए, मेमोरी के लिए "जीबी", आवृत्ति के लिए "गीगाहर्ट्ज़")

यह मेटाडेटा वाक्यांश जनरेशन का मार्गदर्शन करता है।

क्रमचय-आधारित जनरेशन

प्रत्येक फ़ीचर मान के लिए, हम निम्नलिखित के सभी क्रमचय उत्पन्न करते हैं:

  • शीर्षक: "प्रोसेसर"

  • फ़ीचर कुंजी: "सीरीज़"

  • मान: "i5"

  • इकाई: (सीरीज़ के लिए कोई नहीं)

यह उत्पन्न करता है:

  • "प्रोसेसर सीरीज़ i5"

  • "सीरीज़ प्रोसेसर i5"

  • "i5 प्रोसेसर सीरीज़"

  • "i5 सीरीज़ प्रोसेसर"

  • "प्रोसेसर i5"

  • "सीरीज़ i5"

  • "i5"

सभी क्रमचय यह सुनिश्चित करते हैं कि हम शब्द क्रम की परवाह किए बिना क्वेरीज़ से मेल खाएं।

मान + इकाई संयोजन

इकाइयों (मेमोरी, स्टोरेज, आवृत्ति) वाले फ़ीचर के लिए, हम रिक्ति सहित और बिना रिक्ति वाले वेरिएंट उत्पन्न करते हैं:

  • "16 जीबी" (रिक्ति सहित)

  • "16gb" (बिना रिक्ति)

ये अन्य घटकों के साथ जुड़ते हैं:

  • "16gb रैम"

  • "रैम 16gb"

  • "प्रोसेसर 16gb"

पोर्ट प्रत्यय नियम

कनेक्टिविटी फ़ीचर (USB, HDMI, DisplayPort) के लिए, हम पोर्ट प्रत्यय जोड़ते हैं:

  • "usb पोर्ट"

  • "usb पोर्ट्स"

  • "2 usb पोर्ट्स"

  • "hdmi पोर्ट"

यह "2 hdmi पोर्ट्स वाला मिनी पीसी" जैसी क्वेरीज़ से मेल खाता है।

फ़ीचर-विशिष्ट नियम

प्रत्येक फ़ीचर प्रकार की कस्टम वाक्यांश जनरेशन होती है:

प्रोसेसर सीरीज़ (i3, i5, N-सीरीज़):

  • कोर प्रोसेसर पदनाम वेरिएंट उत्पन्न करते हैं: निर्माता का नाम, कोर ब्रांड, संयुक्त रूप

  • N-सीरीज़ प्रोसेसर (N100, आदि) समान पैटर्न संयोजन बनाते हैं

  • प्रत्येक "प्रोसेसर" के साथ कई क्रमचय उत्पन्न करता है

मुख्य मेमोरी:

  • संख्यात्मक मान रिक्ति सहित और बिना रिक्ति वाले जीबी वेरिएंट उत्पन्न करते हैं ("16gb", "16 gb")

  • स्वचालित रूप से "रैम" और "मेमोरी" योग्यकर्ताओं के साथ जोड़ा जाता है ("16gb मेमोरी", "16 gb रैम")

SSD स्टोरेज:

  • संख्यात्मक मान जीबी वेरिएंट उत्पन्न करते हैं ("512gb", "512 gb")

  • मान ≥ 1024 के लिए स्वचालित रूप से टीबी वेरिएंट उत्पन्न करता है (उदाहरण के लिए, 1024GB → 1TB)

  • स्वचालित रूप से "ssd" और "स्टोरेज" योग्यकर्ताओं के साथ जोड़ा जाता है ("512gb ssd", "512 gb स्टोरेज")

फ़ॉर्म फ़ैक्टर:

  • मिनी पीसी → बिना रिक्ति वाले रूप सहित कई वेरिएंट

  • ऑल-इन-वन → "ऑल इन वन", "aio", संक्षिप्त रूप

  • थिन क्लाइंट → रिक्ति के साथ/बिना वेरिएंट

  • इंडस्ट्रियल पीसी → संक्षिप्त और पूर्ण रूप

जनरेशन:

  • संख्यात्मक जनरेशन मान बन जाते हैं: "12th gen", "12th जनरेशन", "gen 12"

कोर:

  • 2 → "ड्यूल कोर"

  • 4 → "क्वाड कोर"

  • 6 → "हेक्सा कोर"

  • 8 → "ऑक्टा कोर"

  • सभी "[n] कोर प्रोसेसर" वेरिएंट उत्पन्न करते हैं

ईथरनेट:

  • "1000" → ["गीगाबिट ईथरनेट", "gbe", "1gbps"]

  • "2500" → ["2.5gbe", "2.5 गीगाबिट", "2.5gbps"]

ऑपरेटिंग सिस्टम:

  • "Windows 11" → ["विंडोज़", "विंडोज़ 11", "विन 11"]

  • "Ubuntu" → ["लिनक्स", "उबंटू"]

  • "FreeDOS" → ["फ्रीडॉस", "नो ओएस", "विदाउट ओएस"]

स्टैंडअलोन मानों के लिए व्हाइटलिस्ट

गलत मिलान को रोकने के लिए केवल विशिष्ट फ़ीचर ही स्टैंडअलोन मान मिलान की अनुमति देते हैं:

  • सीरीज़: "i3", "i5", "N100" (लेकिन एकल अक्षर नहीं)

  • प्रोसेसर मॉडल: "N100", "1335U"

  • ऑपरेटिंग सिस्टम: "विंडोज़", "लिनक्स", "उबंटू"

  • जनरेशन: "12th", "13th", "14th"

  • प्रोसेसर ब्रांड: "इंटेल", "ARM"

उदाहरण के लिए, "2" को "2 कोर" से नहीं मिलाना चाहिए जब क्वेरी "2 hdmi पोर्ट्स" हो। लंबाई जांच एकल अक्षरों या बहुत छोटे अस्पष्ट मानों को स्टैंडअलोन मिलान से रोकती है। स्पष्ट इकाई घटकों वाले फ़ीचर, जैसे ईथरनेट या पोर्ट, केवल अपनी इकाई के साथ योग्य होने पर ही स्टैंडअलोन संयोजन उत्पन्न करते हैं।

टकराव रोकथाम

मेमोरी और स्टोरेज मान ओवरलैप करते हैं (दोनों में 64, 128, 256, आदि हैं)। चरण 4 अस्पष्टता दूर करने के लिए मान-सीमा नियम लागू करता है:

  • ≤ 64 जीबी: मुख्य मेमोरी (रैम)

  • ≥ 128 जीबी: SSD स्टोरेज

  • 65-127 जीबी सीमा: छोड़ा गया (अस्पष्ट)

स्पष्ट योग्यकर्ताओं ("रैम"/"मेमोरी" या "ssd"/"स्टोरेज") वाले वाक्यांश इस नियम को ओवरराइड करते हैं और किसी भी मान से मेल खा सकते हैं।

इसके अतिरिक्त, अस्पष्ट सामान्य शब्द जो बहुत से असंबंधित फ़िल्टर से मेल खाते हैं, पोस्ट-प्रोसेसिंग के माध्यम से टकराव समाधान के दौरान बाहर रखे जाते हैं: "कनेक्टिविटी", "ऑडियो", "डिस्प्ले", "प्रोसेसर", और "फिजिकल" जैसे शब्द कई पहलुओं में बहुत अधिक अस्पष्टता पैदा करते हैं।

चरण 4: सिमेंटिक विस्तार

N-gram निष्कर्षण

हम वास्तविक खोज क्वेरीज़ से लगातार आने वाले वाक्यांश निकालते हैं, जो एकल शब्दों (1-gram जैसे "मिनी") से लेकर लंबे अनुक्रमों (6-gram तक जैसे "मिनी पीसी विद 16gb रैम ssd") तक होते हैं। केवल वे वाक्यांश रखे जाते हैं जो कम से कम 3 बार आते हैं। यह फ़िल्टरिंग दृष्टिकोण शोर को कम करते हुए वास्तविक उपयोगकर्ता भाषा पैटर्न को संरक्षित करता है।

फ़िल्टर खोज पाठ जनरेशन

प्रत्येक फ़िल्टर मान के लिए, हम खोज पाठ उत्पन्न करते हैं:

मुख्य मेमोरी: 16:

  • "16gb रैम मेमोरी"

  • "16 मुख्य मेमोरी"

  • "मुख्य मेमोरी 16"

SSD स्टोरेज: 512:

  • "512gb स्टोरेज ssd"

  • "512 ssd स्टोरेज"

  • "ssd स्टोरेज 512"

ये खोज पाठ एम्बेडिंग स्पेस में फ़िल्टर का प्रतिनिधित्व करते हैं।

एम्बेडिंग और मिलान

हम क्वेरी वाक्यांशों और फ़िल्टर खोज पाठ दोनों को एम्बेडिंग में बदलते हैं, फिर उनके बीच कोसाइन समानता की गणना करते हैं। कॉन्फ़िगर किए गए थ्रेसहोल्ड से ऊपर समानता स्कोर वाले वाक्यांश उस फ़िल्टर की मैपिंग में जोड़े जाते हैं।

मैन्युअल सीड वाक्यांश

हम विस्तार से पहले उच्च विश्वास वाले मैन्युअल सीड इंजेक्ट करते हैं:

"Series:i5": [
    "i5",
    "core i5",
    "intel i5",
    "intel core i5",
    "i5 processor",
    "cpu i5",
]

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

इंक्रीमेंटल एम्बेडिंग

हम वाक्यांशों और फ़िल्टर खोज पाठ दोनों के लिए एम्बेडिंग कैश करते हैं। जब नई क्वेरी आती हैं:

  1. मौजूदा एम्बेडिंग लोड करें
  2. केवल नए वाक्यांश एम