HeadlinesBriefing favicon HeadlinesBriefing.com

क्या gzip एक भाषा मॉडल हो सकता है? संपीड़न-भविष्यवाणी समतुल्यता

Hacker News •
×

कुछ समय पहले मैंने न्यूरल नेटवर्क के बिना भाषा मॉडलिंग के बारे में लिखा था, जहां मैंने अनबाउंडेड n-gram मॉडल का उपयोग करके शेक्सपियर उत्पन्न किया था: कोई वजन नहीं, कोई प्रशिक्षण नहीं, केवल गिनती। सौभाग्य से, मैं पेपर 'Language Modeling is Compression' से मिला, जिसमें संपीड़न–भविष्यवाणी समतुल्यता का उल्लेख किया गया था: हर भविष्यवाणी मॉडल 본질적으로 एक संपीड़क होता है, और सभी संपीड़न एल्गोरिदम भविष्यवाणी मॉडल होते हैं। इससे स्वाभाविक प्रश्न उत्पन्न हुआ: क्या gzip भाषा मॉडलिंग कर सकता है? कोई न्यूरल नेटवर्क नहीं, कोई सीखा हुआ पैरामीटर नहीं, कुछ भी नहीं। बस आपके ऑपरेटिंग सिस्टम के साथ आने वाला संपीड़क। आप इसे एक कॉर्पस के साथ प्राइम करते हैं, इसे एक सामान्य टेक्स्ट प्रॉम्प्ट देते हैं, और यह उस प्रॉम्प्ट को उन बाइट अनुक्रमों की खोज करके जारी रखता है जो सबसे अच्छी तरह से संपीड़ित होते हैं। यहाँ टिनी शेक्सपियर पर इसे प्राइम करने के बाद का वास्तविक, अपरिवर्तित आउटपुट है:

gzipt --corpus data/tinyshakespeare.txt --prompt $'MENENIUS:\n' --length 200

MENENIUS:'Though all at once canq MARCIUS: Pray now, nocamest thou to a morsel .LARTIUS: Hence, and I' the end admire, where Gagain; and after it ag .यह पता चलता है, प्रकार से? यह बिल्कुल संगत पाठ नहीं है, लेकिन यह स्पष्ट रूप से पाठ के बारे में कुछ जानता है। मैंने अपेक्षा की तुलना में gzip के बारे में बहुत अधिक जानता है।

तो, एक संपीड़क इस तरह का आउटपुट कैसे उत्पन्न कर सकता है? संपीड़न भविष्यवाणी है। सोचिए कि एक संपीड़क क्या करता है। यह उन डेटा पर कम बाइट्स खर्च करता है जिन्हें यह 'अपेक्षा' करता है, और उन डेटा पर अधिक बाइट्स खर्च करता है जिन्हें यह नहीं अपेक्षा करता। अगर मैं आपको एक फ़ाइल देता हूं जिसमें अक्षर A एक मिलियन बार दोहराया गया हो, तो आप इसे एक वाक्य में वर्णित कर सकते हैं। एक मिलियन यादृच्छिक बाइट्स, दूसरी ओर, कोई शोषण योग्य संरचना नहीं रखते हैं और लगभग संपीड़ित नहीं होते। यह संयोग नहीं है; यह सूचना सिद्धांत का मूल है। एक प्रतीक को एन्कोड करने के लिए आवश्यक बिट्स की संख्या $-\log_2 p$ है, जहाँ $p$ मॉडल द्वारा उसे दी गई संभावना है। उच्च संभावना का अर्थ है कम बिट्स। इसलिए, कोई भी संपीड़क अंतर्निहित रूप से एक संभावना मॉडल छिपाए रखता है, चाहे कोई उसे लिखे या न लिखे। gzip DEFLATE का उपयोग करता है, जो 32 KiB स्लाइडिंग विंडो में हाल के टेक्स्ट के खिलाफ मिलान खोजकर अगले बाइट्स को संपीड़ित करता है। यदि एक निरंतरता विंडो में पहले से मौजूद कुछ के अनुरूप होती है, तो DEFLATE इसे एक सस्ता बैक-रेफरेंस के रूप में एन्कोड करता है, बजाय लिटरल बाइट्स के। इसलिए: एक निरंतरता जिसे gzip 'अपेक्षित' मानता है, क्योंकि यह अपनी विंडो में पहले से मौजूद टेक्स्ट के अनुरूप होती है, लगभग कुछ भी नहीं संपीड़ित होती है। इससे हमें एक स्कोर मिलता है। यदि मेरे पास कुछ संदर्भ है और मैं जानना चाहता हूं कि एक उम्मीदवार निरंतरता कितनी अच्छी है, तो मैं सिर्फ मापता हूं: score(उम्मीदवार) = len(gzip(संदर्भ + उम्मीदवार))। संपीड़ित लंबाई जितनी कम होगी, उम्मीदवार उतना ही अधिक 'भविष्यवाणी किया गया' माना जाएगा। मॉडल को प्राइम करने के लिए, मैं gzip की विंडो में एक कॉर्पस शामिल करता हूं। कोई भी निरंतरता जो कॉर्पस जैसी दिखती है, छोटे रूप में संपीड़ित होती है, और कोई भी निरंतरता जो कॉर्पस जैसी नहीं दिखती है, बड़े रूप में संपीड़ित होती है। बीम सर्च द्वारा उत्पादन। स्कोरिंग एक बात है; उत्पादन दूसरी बात है। naive दृष्टिकोण — जो एकल अगला बाइट चुनता है जो सबसे अच्छी तरह से संपीड़ित होता है — बहुत खराब विफल होता है, और इसका कारण सूक्ष्म है: gzip केवल एक पूर्णांक बाइट लंबाई देता है (अंश नहीं)। एक बाइट जोड़ने से अक्सर संपीड़ित लंबाई में कोई बदलाव नहीं आता, इसलिए कई उम्मीदवार टाई हो जाते हैं और संकेत मात्रन शोर में दब जाते हैं। समाधान है: प्रतिबद्ध होने से पहले पूरी अवधि तक आगे देखें। gzipt बाइट अनुक्रमों पर बीम सर्च चलाता है। प्रत्येक चरण में, वर्तमान संदर्भ है: कॉर्पस विंडो + (प्रॉम्प्ट + उत्पन्न बाइट्स) की हाल की पूंछ। फिर gzipt संभावित अगले बाइट्स का प्रयास करता है। प्रत्येक उम्मीदवार निरंतरता को संदर्भ + उम्मीदवार को संपीड़ित करके और संपीड़ित परिणाम द्वारा लिए गए बाइट्स की संख्या की जाँच करके स्कोर किया जाता है। लूप है:

प्रॉम्प्ट। उपयोगकर्ता के प्रॉम्प्ट से शुरू करें, जिसे जारी रखने के लिए प्रारंभिक पाठ के रूप में माना जाता है। कोई स्टार्ट टोकन नहीं है; प्रॉम्प्ट बाइट्स केवल gzip द्वारा देखे जाने वाले संदर्भ का हिस्सा हैं।

संदर्भ। gzip को कॉर्पस विंडो और प्रॉम्प्ट/उत्पन्न पाठ की हाल की पूंछ दिखाएं।

खोज। beam_width सबसे अधिक संपीड़न योग्य आंशिक निरंतरताओं को रखें। प्रत्येक को कॉर्पस में होने वाले हर बाइट से बढ़ाएं, सभी का संपीड़न लंबाई द्वारा स्कोर करें, और फिर सबसे अच्छे beam_width तक वापस काटें।

horizon बाइट्स के लिए दोहराएं।

प्रतिबद्ध। सबसे अधिक संपीड़न योग्य पूर्ण अवधि लें (या यदि तापमान सकारात्मक है तो अंतिम उम्मीदवारों में से नमूना लें), इसे जोड़ें, और जारी रखें।

...

FAQ Q: क्या gzip का उपयोग भाषा मॉडल के रूप में किया जा सकता है?

FAQ A: हाँ, gzip संपीड़न-आधारित भविष्यवाणी के माध्यम से भाषा मॉडल के रूप में कार्य कर सकता है। एक कॉर्पस के साथ इसे प्राइम करके और बीम सर्च का उपयोग करके उन बाइट अनुक्रमों को खोजकर जो सबसे कुशलता से संपीड़ित होते हैं, gzip प्रभावी ढंग से पैटर्न पहचानता है और पाठ निरंतरताएँ उत्पन्न करता है। यह काम करता है क्योंकि संपीड़न एल्गोरिदम अंतर्निहित रूप से संभावना मॉडल बनाते हैं — जब पाठ पहले देखे गए पैटर्न के अनुरूप होता है, तो वह अधिक कुशलता से संपीड़ित होता है, जो अधिक भविष्यवाणी करने योग्य होने का संकेत देता है।