2009-06-18 11 views
9

ग्रंथों के लिए विषय/टैग खोजने के लिए मैं PHP में लेटेंट सेमेन्टिक विश्लेषण (एलएसए) को कार्यान्वित करना चाहता हूं।एलएसए - लेटेंट सेमेन्टिक विश्लेषण - PHP में इसे कैसे कोड करें?

मुझे लगता है कि मुझे क्या करना है। क्या यह सही है? मैं PHP में इसे कैसे कोड कर सकता हूं? मैं कैसे निर्धारित करूं कि कौन से शब्द चुने गए हैं?

मैं किसी बाहरी पुस्तकालय का उपयोग नहीं करना चाहता हूं। I've already an implementation for the Singular Value Decomposition (SVD)

  1. दिए गए टेक्स्ट से सभी शब्द निकालें।
  2. शब्दों/वाक्यांशों को वज़न दें, उदा। tf–idf के साथ। यदि वज़न बहुत जटिल है, तो बस घटनाओं की संख्या लें।
  3. एक मैट्रिक्स बनाएं: कॉलम डेटाबेस से कुछ दस्तावेज हैं (अधिक बेहतर?), पंक्तियां सभी अद्वितीय शब्द हैं, मान घटनाओं या वजन की संख्या हैं।
  4. सिंगुलर वैल्यू डिसकंपोजिशन (एसवीडी) करें।
  5. आयाम में कमी (कैसे?) करने के लिए मैट्रिक्स एस (एसवीडी) में मानों का उपयोग करें।

मुझे आशा है कि आप मेरी मदद कर सकते हैं। अग्रिम बहुत बहुत धन्यवाद!

+1

http://stackoverflow.com/questions/960060/singular-value-decomposition-svd-in-php – Ben

+0

क्षमा करें, मैंने "मैं पहले से ही एकवचन मूल्य अपघटन के लिए एक कार्यान्वयन है" अब लिंक जोड़ा – caw

+0

PHP के साथ इसका क्या संबंध है? – Novelocrat

उत्तर

7

एलएसए लिंक:

यहाँ पूरा एल्गोरिथ्म है। यदि आपके पास एसवीडी है, तो आप वहां से सबसे अधिक हैं। ऊपर दिए गए कागजात इसे मेरे से बेहतर समझाते हैं।

अनुमान:

  • अपने SVD समारोह अवरोही क्रम में विलक्षण मूल्यों और विलक्षण वैक्टर दे देंगे। यदि नहीं, तो आपको अधिक एक्रोबेटिक्स करना होगा।

एम: कोष मैट्रिक्स, (शब्द) डब्ल्यू डी (दस्तावेज) द्वारा (डब्ल्यू पंक्तियाँ, d स्तंभ)। ये कच्चे मायने रख सकते हैं, या टीएफआईडीएफ या जो भी हो। स्टॉपवर्ड समाप्त हो सकते हैं या नहीं भी हो सकते हैं, और स्टेमिंग हो सकती है (लैंडौयर कहता है कि स्टॉपवर्ड रखें और स्टेम न करें, लेकिन हाँ tfidf को)।

U,Sigma,V = singular_value_decomposition(M) 

U: w x w 
Sigma: min(w,d) length vector, or w * d matrix with diagonal filled in the first min(w,d) spots with the singular values 
V: d x d matrix 

Thus U * Sigma * V = M 
# you might have to do some transposes depending on how your SVD code 
# returns U and V. verify this so that you don't go crazy :) 

फिर reductionality .... वास्तविक एलएसए कागज का सुझाव आधार के लिए एक अच्छा सन्निकटन पर्याप्त वैक्टर इस तरह रखने के लिए है कि उनके विलक्षण मूल्यों विलक्षण मूल्यों के कुल का 50% से अधिक कर रहे हैं।

अधिक succintly ... (स्यूडोकोड)

Let s1 = sum(Sigma). 
total = 0 
for ii in range(len(Sigma)): 
    val = Sigma[ii] 
    total += val 
    if total > .5 * s1: 
     return ii 

यह नया आधार है, जो मिनट था (घ, डब्ल्यू) के पद से पहले वापस आ जाएगी, और अब हम {ii} के साथ अनुमानित करेंगे।

(यहाँ, '-> प्रधानमंत्री, स्थानांतरित नहीं)

हम नए मैट्रिक्स बनाने के लिए: यू', सिग्मा ', वी', आकार चौ x ii, ii एक्स ii, और ii एक्स घ के साथ।

यह एलएसए एल्गोरिदम का सार है।

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

मेरे लिए, एलएसए polysemy के कारण असली दुनिया डेटा सेट में खराब प्रदर्शन करता है, और डेटा कई विषयों के साथ सेट करता है। यह गणितीय/संभाव्य आधार पर अस्वस्थ है (यह सामान्य-आश (गॉसियन) वितरण मानता है, जो शब्द गणनाओं के लिए समझ में नहीं आता है)।

आपका लाभ निश्चित रूप से भिन्न होगा।

एलएसए का उपयोग कर टैगिंग (एक विधि!)

  1. यू 'सिग्मा' वी 'SVD और कमी अनुमानी

  2. हाथ तक का उपयोग कर dimensionally कम मैट्रिक्स का निर्माण, यू देखो 'मैट्रिक्स, और उन शब्दों के साथ आते हैं जो प्रत्येक "विषय" का वर्णन करते हैं। उदाहरण के लिए, यदि उस वेक्टर के सबसे बड़े हिस्से "ब्रोंक्स, यांकीज़, मैनहट्टन" थे, तो "न्यूयॉर्क सिटी" इसके लिए एक अच्छा शब्द हो सकता है। इन्हें एक सहयोगी सरणी, या सूची में रखें। यह कदम उचित होना चाहिए क्योंकि वैक्टरों की संख्या सीमित होगी।

  3. मान लें कि आपके पास दस्तावेज़ के लिए शब्दों का वेक्टर (v1) है, तो v1 * t (U ') उस दस्तावेज़ के लिए सबसे मजबूत' विषय 'देगा। 3 उच्चतम का चयन करें, फिर अपने "विषय" को पिछले चरण में गणना के रूप में दें।

+0

निश्चित रूप से, यह वही है जो मैं जानना चाहता था। लेकिन मेरे पास अभी भी कुछ प्रश्न हैं: क्या मुझे वी या वीटी (ट्रांसपोज़) की आवश्यकता है? मैं http://stitchpanorama.sourceforge.net/Python/svd.py का उपयोग करता हूं जो आपको वी देता है। जैसा कि आप वहां देख सकते हैं, एकवचन मान अवरोही क्रम में नहीं हैं। क्या यह PHP में आपका छद्म कोड है? http://paste.bradleygill.com/index.php?paste_id=10532 यह क्या करता है? – caw

+0

वी या वीटी की आवश्यकता के लिए आसान परीक्षण यह पता लगाने के लिए है कि क्या यूएसवी = एम या यूएसवीटी = एम। यह कार्य यह समझने का एक ह्युरिस्टिक तरीका है कि कितना आयाम कम हो सकता है। इस समारोह में, यह कहता है, "इस आधार को कम करें कि वैक्टरों के कुल मूल्यों में से 50% या अधिक है"। आप यह भी कह सकते हैं "के के कुछ मूल्य, 50 की तरह" के लिए सबसे बड़ा रखें .... मूल रूप से, यह निर्धारित करें कि वास्तव में कितनी श्रेणियां हैं, जो एलएसए का पूरा बिंदु है। –

+0

क्या PHP प्रश्न में इस एलएसए का कोई समाधान था। मैं एल्गोरिदम को समझता हूं लेकिन PHP में इसे लागू करने के लिए भी संघर्ष कर रहा हूं। – privateace

0

यह सब ठीक दिखता है, अंतिम चरण तक। एसवीडी के लिए सामान्य नोटेशन यह है कि यह तीन matrices ए = यूएसवी * देता है। एस एक विकर्ण मैट्रिक्स (जिसका अर्थ है विकर्ण से सभी शून्य), इस मामले में, मूल रूप से यह माप देता है कि मूल डेटा के प्रत्येक आयाम कैप्चर करता है। संख्याएं ("एकवचन मूल्य") नीचे जायेंगी, और आप कितने आयाम उपयोगी हैं, इसके लिए आप ड्रॉप-ऑफ़ की तलाश कर सकते हैं। अन्यथा, आप कितने आयाम लेने के लिए सिर्फ मनमाना संख्या एन चुनना चाहते हैं।

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

HTH

अद्यतन:

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

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

+0

धन्यवाद। मेरी मुख्य समस्या यह है: मैं कैसे निर्धारित कर सकता हूं कि मुझे कौन से शब्दों को चुना जाना चाहिए? मान लीजिए कि मैं हमेशा 3 टैग चाहता हूं: मुझे क्या करना है? – caw

+0

धन्यवाद। हो सकता है कि मैंने कुछ गलत समझा है और टैग खोजने के लिए एलएसए का उपयोग नहीं किया गया है। लेकिन अगर मेरे पास टैग का एक सेट है, उदा। "खेल, राजनीति, विश्व", तो आप निश्चित रूप से सर्वश्रेष्ठ मिलान टैग खोजने के लिए एलएसए का उपयोग कर सकते हैं, है ना? – caw

+0

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

1

यह उत्तर सीधे पोस्टर्स के प्रश्न पर नहीं है, बल्कि समाचार वस्तुओं को स्वचालित करने के तरीके के मेटा प्रश्न के लिए है।ओपी ने नामित इकाई पहचान का उल्लेख किया है, लेकिन मेरा मानना ​​है कि उनका मतलब ऑटोटैगिंग की रेखा के साथ कुछ और है। वे वास्तव में एनईआर मतलब है, तो इस प्रतिक्रिया अलग-अलग स्रोतों के साथ बेतुकी :)

को देखते हुए इन बाधाओं (600 आइटम/दिन, 100-200 पात्रों/आइटम) है, यहाँ कुछ टैगिंग विकल्प हैं:

  1. हाथ से। एक विश्लेषक आसानी से इन दिनों 600 में आसानी से कर सकता है, शायद कुछ घंटों में। अमेज़ॅन के मैकेनिकल तुर्क की तरह कुछ, या उपयोगकर्ता इसे करने के लिए, संभव भी हो सकता है। कुछ "हाथ से टैग किए गए" होने के बावजूद, यदि यह केवल 50 या 100 है, तो नीचे दिए गए स्वत: उत्पन्न तरीकों की तुलना करने के लिए यह एक अच्छा आधार होगा।

  2. एलएसए, टॉपिक-मॉडल (लेटेंट ड्रिचलेट आवंटन) का उपयोग करते हुए आयाम में कमी, और इसी तरह .... मुझे असली दुनिया के डेटा सेट पर एलएसए के साथ वास्तव में खराब भाग्य है और मैं इसके सांख्यिकीय से असंतुष्ट हूं आधार। एलडीए मुझे बहुत बेहतर लगता है, और इसमें incredible mailing list है जिसमें ग्रंथों को विषयों को असाइन करने के बारे में सबसे अच्छी सोच है।

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

शुभकामनाएँ!

+0

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

+0

एलडीए टैगिंग के लिए भी काम करता है। इन सभी तकनीकों में दस्तावेज़ स्थान की आयाम (आधार) को कम करने का प्रयास किया जाता है। –

0

एक अतिरिक्त अतः link text बिल्कुल PHP में ऐसा करने के खतरों पर थ्रेड है (आप इस जवाब की तरह, हो सकता है सवाल यह फिट करने के लिए फिर से टैग करते हैं)।

विशेष रूप से, इस पेपर पर Latent Semantic Mapping पर एक लिंक है, जो वर्णन करता है कि पाठ के परिणामस्वरूप "विषय" कैसे प्राप्त करें।

+0

आपके द्वारा लिंक किया गया प्रश्न (पहला लिंक) मेरे प्रश्नों में से एक है। ;) मैंने इसे अपने प्रश्न में भी इस पृष्ठ के शीर्ष पर जोड़ा है। लेकिन वह एसवीडी के बारे में है, यह यहां एलएसए के बारे में है ... – caw

+0

एसवीडी एलएसए का हिस्सा है, और उस एसओ चर्चा में। Blackkettles जवाब देखें। आप एसवीडी करते हैं, eigenvalue मैट्रिक्स को कम करें, फिर recombine। एलएसएम पेपर पढ़ें, इसमें कदम हैं। मुझे लगता है कि आप इसे हल करने के लिए एलएसएम में बहुत अधिक विश्वास रखते हैं, हालांकि वास्तव में आपके ऑटोटैगिंग प्रोजेक्ट के लिए जरूरी है। –

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