2011-11-23 8 views
8

मैं पिछले कुछ दिनों में महोत्सव के साथ एक सिफारिश इंजन बनाने की कोशिश कर रहा हूं। अपाचे महाउट प्रदर्शन मुद्दे

  • 12M उपयोगकर्ताओं
  • 2M आइटम
  • 18M उपयोगकर्ता के आइटम बूलियन सिफारिशों
  • मैं अब पूरा सेट हमारे पास का 1/3 के साथ प्रयोग कर रहा हूँ: परियोजना मैं पर काम कर रहा हूँ निम्न डेटा है (यानि 18 एम सिफारिशों में से 6 एम)। मैंने कोशिश की किसी भी कॉन्फ़िगरेशन पर, महाउट काफी निराशाजनक परिणाम प्रदान कर रहा था। कुछ सिफारिशों में 1.5 सेकंड लग गए जबकि दूसरे ने एक मिनट में लिया। मुझे लगता है कि सिफारिश के लिए एक उचित समय 100 एमएमएस समय सीमा के आसपास होना चाहिए।

    महाउट इतना धीमा क्यों काम करता है?
    मैं (यहां तक ​​कि उन्हें जोड़ने हालांकि बहुत अधिक अंतर नहीं था) के बाद JVM तर्क के साथ एक बिलाव पर आवेदन चल रहा हूँ:

    :

    -Xms4096M -Xmx4096M -da -dsa -XX:NewRatio=9 -XX:+UseParallelGC -XX:+UseParallelOldGC 
    

    नीचे अपने प्रयोगों के लिए कोड के टुकड़े कर रहे हैं

    उपयोगकर्ता समानता 1:

    DataModel model = new FileDataModel(new File(dataFile)); 
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model); 
    UserNeighborhood neighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, similarity, model, 0.5); 
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity); 
    

    उपयोगकर्ता समानता 2:

    DataModel model = new FileDataModel(new File(dataFile)); 
    UserSimilarity similarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(model), model); 
    UserNeighborhood neighborhood = new CachingUserNeighborhood(new NearestNUserNeighborhood(10, similarity, model), model); 
    recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity); 
    

    आइटम समानता 1:

    DataModel dataModel = new FileDataModel(new File(dataFile)); 
    ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel); 
    recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity); 
    

    उत्तर

    4
    अपनी मेलिंग सूची के माध्यम महावत समुदाय के विनीत मदद से

    , हम मेरी समस्या का समाधान मिल गया है। समाधान से संबंधित सभी कोड Mahout 0.6 में किए गए थे। अधिक जानकारी संबंधित JIRA ticket में मिल सकती है।

    विजुअलVM का उपयोग करके मैंने पाया कि प्रदर्शन की बाधा आइटम-आइटम समानताओं की गणना में थी।इसे अधिक सरल और प्रभावी फिक्स का उपयोग करके @ सेन द्वारा संबोधित किया गया था (SVN commit अधिक जानकारी के लिए देखें)

    इसके अतिरिक्त, हमने नमूनाकरण दर पर बेहतर नियंत्रण की अनुमति देने के लिए नमूनाकरण कैंडीडेट इटम्सस्ट्रेटी को बेहतर बनाने के तरीके पर चर्चा की है।

    अंत में, मैंने उपरोक्त सुधारों के साथ अपने आवेदन के साथ कुछ परीक्षण किया। 500 एमएमएस से कम लेने वाले भारी बहुमत के साथ सभी सिफारिशों में 1.5 सेकंड से भी कम समय लगे। महॉट आसानी से प्रति सेकंड 100 सिफारिशों को संभालने में सक्षम था (मैंने उससे अधिक तनाव देने की कोशिश नहीं की थी)।

    2

    छोटे सुझाव: अपने अंतिम टुकड़ा GenericBooleanPrefItemBasedRecommender उपयोग करना चाहिए।

    आपके डेटा सेट के लिए, आइटम-आधारित एल्गोरिदम सर्वोत्तम होना चाहिए।

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

    SamplingCandidateItemsStrategy पर देखें। यह आपको विशेष रूप से घने डेटा के सामने नमूना करके इस संबंध में किए गए कार्यों की मात्रा को सीमित करने देगा। आप डिफ़ॉल्ट का उपयोग करने के बजाय इसे GenericBooleanPrefItemBasedRecommender पर प्लग कर सकते हैं। मुझे लगता है कि यह आपको गति बढ़ाने के लिए लीवर देगा और प्रतिक्रिया समय को और अधिक अनुमानित बना देगा।

    +0

    थेंक्स शॉन। मैंने निम्नलिखित कोड http://pastebin.com/XiuJvRha के साथ आपके सुझावों का प्रयास किया। लेकिन प्रदर्शन अभी भी अच्छा नहीं है। यहां तक ​​कि 6 एम सेट (असली सेट का 1/3) के साथ, सिफारिशें अभी भी 3-15 सेकेंड के बीच होती हैं। आप इससे क्या निकालते हैं? –

    +0

    ठीक है - मैंने इसे थोड़ा और परीक्षण किया है और मैंने देखा है कि जिन उपयोगकर्ताओं ने 1-2 सिफारिशें की हैं, वे लगभग 400ms हैं, लेकिन 10 या 20 अनुशंसाओं वाले उपयोगकर्ताओं के लिए यह बहुत अधिक है। 28 सिफारिशों वाले एक उपयोगकर्ता को पूरा करने में एक मिनट लग गए। –

    +0

    आप SamplingCandidateItemsStrategy में मानों को समायोजित करना चाहते हैं। उदाहरण के लिए (10,5) कोशिश करें। यह सब अभी भी काफी धीमी गति से लगता है, हालांकि यह बहुत अच्छा लग रहा है। कैश कुछ precomputed समानता के साथ भरने के रूप में गर्मियों की कुछ डिग्री है; मुझे नहीं पता कि यह एक कारक है या नहीं? –

     संबंधित मुद्दे

    • कोई संबंधित समस्या नहीं^_^