वाक्य समानता के लिए सर्वश्रेष्ठ व्यावहारिक एल्गोरिदम


18

मेरे पास दो वाक्य हैं, S1 और S2, दोनों में एक शब्द गणना है (आमतौर पर) 15 से नीचे।

सबसे व्यावहारिक रूप से उपयोगी और सफल (मशीन लर्निंग) एल्गोरिदम क्या हैं, जो संभवतः लागू करना आसान है (तंत्रिका नेटवर्क ठीक है, जब तक कि आर्किटेक्चर Google इंसेप्शन के रूप में जटिल नहीं है)।

मैं एक एल्गोरिथ्म की तलाश कर रहा हूं जो इसमें बहुत अधिक समय लगाए बिना ठीक काम करेगा। क्या कोई ऐसा एल्गोरिदम है जो आपको सफल और प्रयोग करने में आसान लगे?

यह कर सकता है, लेकिन क्लस्टरिंग की श्रेणी में नहीं आता है। मेरी पृष्ठभूमि मशीन सीखने से है, इसलिए किसी भी सुझाव का स्वागत है :)


आपने क्या लागू किया? मैं भी उसी का सामना कर रहा हूं, एक कोष में 'k' संबंधित लेखों के समाधान के साथ आना है जो अद्यतन करता रहता है।
दिलीपे

जवाबों:


16

वेक्टर अंतरिक्ष के लिए कोसिन समानता आप जवाब दे सकते हैं: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

या आप प्रत्येक वाक्य के आइजनवेक्टर की गणना कर सकते हैं। लेकिन समस्या यह है कि समानता क्या है?

"यह एक पेड़ है", "यह एक पेड़ नहीं है"

यदि आप वाक्य के शब्दार्थ अर्थ की जांच करना चाहते हैं तो आपको एक वर्डवेक्टर डेटासेट की आवश्यकता होगी। वर्डवेक्टर डेटासेट के साथ आप शब्दों के बीच संबंधों की जांच करने में सक्षम होंगे। उदाहरण: (राजा - आदमी + औरत = रानी)

सिराज रावल के पास वर्डवेक्टर डेटासेट बनाने के लिए एक अच्छा अजगर नोटबुक है: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE


8

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


3

bert-as-service ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) बस यही समाधान प्रदान करता है।

अपने प्रश्न का उत्तर देने के लिए, इसे स्वयं को शून्य से लागू करना काफी कठिन होगा क्योंकि BERT एक तुच्छ NN नहीं है, लेकिन इस समाधान के साथ आप इसे अपने algo में प्लग कर सकते हैं जो वाक्य समानता का उपयोग करता है।


2

आपको https://github.com/seatgeek/fuzzywuzzy#usage की जांच करनी चाहिए । fuzzywuzzy स्ट्रिंग / टेक्स्ट मिलान के लिए एक बढ़िया लाइब्रेरी है जो दो समान वाक्य के आधार पर 0 से 100 के बीच एक संख्या देता है। एक सरल-से-उपयोग पैकेज में अनुक्रमों के बीच के अंतर की गणना करने के लिए लेवेंसहाइट डिस्टेंस का उपयोग करता है। इसके अलावा, इस ब्लॉग पोस्ट की एक विस्तृत व्याख्या के लिए देखें कि फजीविज्जी कैसे काम करता है। यह ब्लॉग फजीविज्जी लेखक द्वारा भी लिखा गया है


1

इस ब्लॉग में लघु पाठ समानता का समाधान है। वे मुख्य रूप से BERT तंत्रिका नेटवर्क मॉडल का उपयोग वाक्यों के बीच समानता खोजने के लिए करते हैं। https://medium.com/@vimald8959/sentence-categorisation-short-text-similarity-61bb88fae15e


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

अच्छा, यह वास्तव में अच्छा सामान है। तो वे मूल रूप से BERT का उपयोग करते हैं? @RomainReboulleau निश्चित रूप से हालांकि सही है!
डेवऑल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.