शब्दों के बजाय टेक्स्ट भाषा की पहचान में n-gram का उपयोग क्यों किया जाता है?


12

दो लोकप्रिय भाषा पहचान पुस्तकालयों में, सी ++ के लिए कॉम्पैक्ट भाषा डिटेक्टर 2 और जावा के लिए भाषा डिटेक्टर , दोनों ने पाठ विशेषताओं को निकालने के लिए (चरित्र आधारित) एन-ग्राम का इस्तेमाल किया। बैग-ऑफ-वर्ड्स (एकल शब्द / शब्दकोश) का उपयोग क्यों नहीं किया जाता है, और बैग-ऑफ-वर्ड्स और एन-ग्राम के लाभ और नुकसान क्या है?

इसके अलावा, पाठ वर्गीकरण में एन-ग्राम मॉडल के कुछ अन्य उपयोग क्या हैं?

ओह उफ़। ऐसा लगता है कि यहां एक समान प्रश्न है: टेक्स्ट दस्तावेज़ के लिए फीचर वेक्टर बनाने के लिए बीग्राम (एन-ग्राम) मॉडल का उपयोग करने के बारे में

लेकिन क्या कोई और अधिक व्यापक जवाब दे सकता है? भाषा की पहचान के मामले में कौन सा बेहतर है?

(उम्मीद है कि मुझे एन-ग्राम और बैग-ऑफ-वर्ड्स का सही अर्थ मिल गया है, हाहा, अगर नहीं तो कृपया मेरी मदद करें।)

जवाबों:


20

मुझे लगता है कि इस विषय पर मेहिर मोहरी के व्यापक काम के सबसे विस्तृत जवाब मिल सकते हैं। इस विषय पर उनकी एक व्याख्यान स्लाइड का लिंक यहां दिया गया है: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

भाषा की पहचान की समस्या यह है कि मानव भाषा (शब्द) में संरचना है। उदाहरण के लिए, अंग्रेजी में, 'u' अक्षर 'q' अक्षर का अनुसरण करना बहुत आम है, जबकि लिप्यंतरित अरबी में ऐसा नहीं है। एन-ग्राम इस संरचना को कैप्चर करके काम करते हैं। इस प्रकार, कुछ भाषाओं में अक्षरों के कुछ संयोजन दूसरों की तुलना में अधिक होने की संभावना है। यह एन-ग्राम वर्गीकरण का आधार है।

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

यह मानते हुए कि आप बीग्राम्स (n = 2) का उपयोग कर रहे हैं और आपके वर्णमाला में 26 अक्षर हैं, तो उस वर्णमाला के लिए केवल 26 ^ 2 = 676 संभावित बिग्रेड हैं, जिनमें से कई कभी नहीं होंगे। इसलिए, प्रत्येक भाषा के लिए "प्रोफ़ाइल" (भाषा डिटेक्टर के शब्दों का उपयोग करने के लिए) को एक बहुत छोटे डेटाबेस की आवश्यकता होती है। बैग-ऑफ-वर्ड्स क्लासिफायर, ऑन-द-ऑन-हैंड को ईएच भाषा के लिए एक पूर्ण शब्दकोश की आवश्यकता होगी ताकि यह गारंटी दी जा सके कि जो भी भाषा दी गई थी, उसके आधार पर किसी भाषा का पता लगाया जा सकता है।

तो संक्षेप में - प्रत्येक भाषा प्रोफ़ाइल को अपेक्षाकृत छोटी सुविधा स्थान के साथ जल्दी से उत्पन्न किया जा सकता है। दिलचस्प बात यह है कि एन-ग्राम केवल इसलिए काम करते हैं क्योंकि अक्षर किसी भाषा में iid नहीं खींचे जाते हैं - यह स्पष्ट रूप से लाभ है।

नोट: शब्दों के लिए n- ग्राम की संख्या के लिए सामान्य समीकरण l ^ n है जहां एल वर्णमाला में अक्षरों की संख्या है।


मुझे लगता है कि कुछ करीबी भाषाओं के लिए, एन-ग्राम के अलावा शब्दों की सूची का उपयोग करने से मदद मिलेगी। मैंने कभी-कभी, गर्ल टेक्स्ट को भाई के रूप में वर्गीकृत किया है। मुझे संदेह है कि एन-ग्राम उन दो भाषाओं को अलग करने का एक अच्छा तरीका है।
kjetil b halvorsen

आपके विस्तृत उत्तर के लिए धन्यवाद। हालाँकि, इस बारे में मेरे कुछ सवाल हैं, सबसे पहले आप यह बता सकते हैं कि 'बैग-ऑफ-वर्ड्स फेल हो जाएंगे अगर ट्रेनिंग सेट में कोई भी शब्द टेस्टिंग सेट में शामिल नहीं हैं'? और दूसरी बात, सीएलडी 2 4-ग्राम का उपयोग क्यों कर रहा है, जिसके परिणामस्वरूप अंग्रेजी भाषा के लिए 456976 प्रविष्टियां आएंगी, जब एक डिक्शनरी विधि का उपयोग करके प्रोफ़ाइल का लगभग आधा आकार ( ऑक्सफोर्डडेल्स.com/words/… ) लाया जा सकता है ?
डेनिस 97519

1
@ dennis97519 re: "bag-of-words ..." मान लीजिए कि आपके शब्दकोश में केवल {{कुत्ता "," बिल्ली "," कछुआ "," जानवर "} अंग्रेजी के शब्द और {" पेरो "," गाटो "शब्द हैं। , स्पैनिश के लिए "tortuga", "animal"}। आपका शब्दकोश निम्नलिखित वाक्य को वर्गीकृत करने में सक्षम नहीं होगा: "एक गधा एक जानवर है" क्योंकि "जानवर" शब्द दोनों शब्दकोशों में दिखाई देता है, लेकिन अन्य शब्दों में से कोई भी मौजूद नहीं है। यह एक चरम उदाहरण है। 4-ग्राम: 1) याद रखें कि आपको प्रत्येक भाषा के लिए एक शब्दकोश की आवश्यकता है, 2) एन-ग्राम में स्पार्स (तेज खोज) होते हैं, और 3) जैसा कि डगल ने कहा, उन्हें बस कुछ बाइट्स में दर्शाया जा सकता है।
justanotherbrain

1
@loretoparisi - दो ट्रेड-ऑफ हैं: पहला मॉडल जटिलता (बड़े एन = अधिक जटिल) और सामान्यीकरण त्रुटि (आप कुछ परीक्षण सेट पर कितना अच्छा करते हैं) के बीच है - आप ओवरफिट नहीं करना चाहते हैं। दूसरा व्यापार बंद कम्प्यूटेशनल जटिलता है। स्मृति जटिलता एन के साथ तेजी से बढ़ती है। प्रशिक्षण आमतौर पर पाठ में शब्दों की संख्या के साथ रैखिक होता है, इसलिए बहुत लंबा पाठ होने से आमतौर पर कोई समस्या नहीं होती है। कहा कि, बड़े पाठ का अर्थ अक्सर आपके शब्दकोश डी में अधिक शब्द होता है। इसलिए फिर से, स्मृति जटिलता हे (डी ^ एन) है। व्यवहार में, आमतौर पर कम्प्यूटेशनल रूप से बड़े एन के रूप में उपयोग करना सबसे अच्छा है।
justanotherbrain

1
@loretoparisi - इसके बाद, जैसा कि पहले उल्लेख किया गया है, एन-ग्राम विरल होते हैं, लेकिन यह हमेशा सच नहीं होता है। यदि यह आपके विशेष पाठ के लिए विरल है, तो अलग-अलग एन के साथ वैधता पार करें इष्टतम एन (फिर, कम्प्यूटेशनल बाधाओं के साथ) को खोजने के लिए सबसे अच्छा तरीका है।
Justanotherbrain

3

कई कारणों से शब्दों के बजाय पत्र एन-ग्राम का उपयोग किया जाता है:

1) किसी दिए गए भाषा के लिए आवश्यक शब्दों की सूची काफी बड़ी है, शायद 100,000 यदि आप तेज, तेज, सबसे तेज, तेज, तेज, उपवास, ... को सभी अलग-अलग शब्दों के रूप में मानते हैं। 80 भाषाओं के लिए, आपको लगभग 80x शब्दों की आवश्यकता होती है, बहुत सी जगह - 50+ मेगाबाइट।

२) २६ अक्षरों वाली वर्णमाला के लिए अक्षर की संख्या २६ ** ३ या लगभग १ number,००० है और क्वाडग्राम (N = ४) के बारे में ४५०,००० उस वर्णमाला का उपयोग कर सभी भाषाओं को कवर करता है। 30-100 वर्णों के बड़े वर्णमाला में एन-ग्राम के लिए समान लेकिन कुछ बड़ी संख्या। हान लिपि में 4000+ अक्षरों वाली सीजेके भाषाओं के लिए, यूनीग्राम (एन = 1) पर्याप्त हैं। कुछ यूनिकोड लिपियों के लिए, प्रति लिपि (ग्रीक, अर्मेनियाई) में एक ही भाषा है, इसलिए किसी अक्षर संयोजन की आवश्यकता नहीं है (तथाकथित नील-ग्राम N = 0)

3) शब्दों के साथ, आपको शब्दकोष में नहीं दिए जाने पर कोई भी जानकारी नहीं है, जबकि पत्र एन-ग्राम के साथ आपके पास अक्सर उस शब्द के भीतर कम से कम कुछ उपयोगी पत्र संयोजन होते हैं।

CLD2 लैटिन, साइरिलिक और अरबी सहित अधिकांश यूनिकोड लिपियों (अक्षर) के लिए क्वाडग्राम का उपयोग करता है, सीजेके लिपियों के लिए यूनीग्राम, अन्य लिपियों के लिए नीलग्राम, और इसमें सीमित संख्या में काफी विशिष्ट और काफी सामान्य पूर्ण शब्द और भेद करने के लिए शब्दों के जोड़े भी शामिल हैं। इंडोनेशियाई और मलय जैसी सांख्यिकीय-समान भाषाओं के कठिन समूहों के भीतर। कई भाषाओं के बीच अंतर करने के लिए अक्षर बिग्रेड और ट्राइगर शायद उपयोगी होते हैं (लगभग आठ, https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef0GG_1_9NHL5dPuKIH7k/edit देखें)), लेकिन दर्जनों भाषाओं को अलग करने के लिए बेकार हैं। इस प्रकार, CLD2 क्वाडग्राम का उपयोग करता है, प्रत्येक अक्षर संयोजन के साथ उस संयोजन का उपयोग करते हुए शीर्ष तीन सबसे अधिक संभावना वाली भाषाओं का उपयोग करता है। यह लगभग 1.5 एमबी टेबल के साथ 80 भाषाओं को कवर करने और लगभग 5 एमबी टेबल के साथ 160 भाषाओं को और अधिक विवरण में शामिल करने की अनुमति देता है।

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