वरीयता मिलान एल्गोरिथ्म


12

इस साइड प्रोजेक्ट में मैं वहां काम कर रहा हूं जहां मुझे निम्नलिखित समस्या के समाधान की आवश्यकता है।

मेरे पास लोगों (ग्राहकों) के दो समूह हैं। समूह Aखरीदने का इरादा रखता है और समूह Bएक निर्धारित उत्पाद बेचने का इरादा रखता है X। उत्पाद में विशेषताओं की एक श्रृंखला है x_i, और मेरा उद्देश्य उनकी प्राथमिकताओं के बीच Aऔर Bउनके बीच लेनदेन को सुविधाजनक बनाना है । मुख्य विचार Aएक संगत के प्रत्येक सदस्य को इंगित करना है , Bजिसके उत्पाद में उसकी ज़रूरतें बेहतर हैं, और इसके विपरीत।

समस्या के कुछ जटिल पहलू:

  1. विशेषताओं की सूची परिमित नहीं है। खरीदार को किसी विशेष विशेषता या किसी प्रकार के डिजाइन में रुचि हो सकती है, जो आबादी के बीच दुर्लभ है और मैं भविष्यवाणी नहीं कर सकता। पहले सभी विशेषताओं को सूचीबद्ध नहीं किया जा सकता है;

  2. विशेषताएँ निरंतर, द्विआधारी या गैर-मात्रात्मक हो सकती हैं (उदा: मूल्य, कार्यक्षमता, डिज़ाइन);

इस समस्या से कैसे संपर्क करें और इसे स्वचालित तरीके से हल करें, इस पर कोई सुझाव?

यदि संभव हो तो मैं अन्य समान समस्याओं के लिए कुछ संदर्भों की भी सराहना करूंगा।


शानदार सुझाव! जिस तरह से मैं इस समस्या से संपर्क करने के बारे में सोच रहा हूँ में कई समानताएँ हैं।

विशेषताओं के मानचित्रण पर मुख्य मुद्दा यह है कि उत्पाद का विवरण किस स्तर तक होना चाहिए, यह प्रत्येक खरीदार पर निर्भर करता है। चलो एक कार का उदाहरण लेते हैं। उत्पाद "कार" में बहुत सारे और बहुत सारे गुण हैं जो इसके प्रदर्शन, यांत्रिक संरचना, मूल्य आदि से लेकर हैं।

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

लेकिन फिर भी, मेरी चुनौती यह है कि एक अच्छा मैच बनाने के लिए खोज में जितना हो सके उतना विस्तृत होना चाहिए। तो जिस तरह से मैं सोच रहा हूं वह उत्पाद के मुख्य पहलुओं की मैपिंग कर रहा है, जो संभवत: सभी के लिए प्रासंगिक हैं, संभावित विक्रेताओं के डे ग्रुप को कम करने के लिए।

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

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

जवाबों:


9

मेरा पहला सुझाव होगा कि उपयुक्त मानचित्रण कार्यों की सहायता से किसी भी तरह की गैर-मात्रात्मक विशेषताओं को मात्रा में मैप किया जाए। अन्यथा, बस उन्हें छोड़ दें।

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

इस प्रतिनिधित्व के साथ, एक विक्रेता उत्पाद विशेषताओं के साथ सुविधा स्थान में एक बिंदु है और एक खरीदार वरीयता विशेषताओं के साथ एक ही सुविधा स्थान में एक बिंदु है। कार्य तब दिए गए विक्रेता बिंदु के लिए सबसे समान खरीदार बिंदु का पता लगाना है।

यदि आपका डेटासेट (यानी खरीदारों / विक्रेताओं की संख्या) बहुत बड़ी नहीं है, तो आप इसे kd पेड़ों की मदद से कार्यान्वित निकटतम पड़ोसी दृष्टिकोण से हल कर सकते हैं।

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


राइट। यहां मुख्य मुद्दा आयामों की संख्या है, अर्थात मुझे जिस स्तर का उपयोग करने की आवश्यकता है। क्या आप मुझे "IR दृष्टिकोण" स्पष्ट कर सकते हैं।
आरडी

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

7

जैसा कि सुझाव दिया, जंगली जा रहा है । सबसे पहले, मुझे गलत होने पर सही करें:

  • प्रत्येक अद्वितीय उत्पाद के लिए बस कुछ विशेषताएं मौजूद हैं;
  • कोई अंतिम सुविधाएँ सूची नहीं है, और ग्राहक अपने उत्पादों में नई सुविधाएँ जोड़ने में सक्षम हैं।

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

पहला चरण मिलान के लिए ग्राहकों (उत्पादों) की सूची को संकुचित कर रहा है। चलो एक द्विदलीय ग्राफ बनाते हैं, जहां विक्रेता टाइप -1 नोड्स होंगे, और खरीदार टाइप -2 नोड्स होंगे। किसी भी विक्रेता और खरीदार के बीच एक बढ़त बनाएं, जब भी वे निम्न स्केच में एक समान उत्पाद सुविधा का संदर्भ देते हैं:

ग्राफ

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

  • निरंतर सुविधाओं के लिए (जैसे, मूल्य):

    price_weight

  • द्विआधारी और गैर-मात्रात्मक सुविधाओं के लिए - सिर्फ तार्किक द्वि-स्थिति:

    feature_weight

यहां मुख्य विचार अंतराल के लिए हर सुविधा को स्केल करना है [0, 1]। इसके अतिरिक्त, हम सबसे महत्वपूर्ण विशेषताओं को निर्धारित करने के लिए सुविधा गुणांक का उपयोग कर सकते हैं। उदाहरण के लिए, मान लेना किसी दुर्लभ कार्य की उपलब्धता से दोगुना महत्वपूर्ण है:

adj_w_1

adj_w_2

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

भविष्य की चुनौती: पहले कदम पर किनारों को भारित करने के लिए एक सस्ता तरीका पेश करें :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.