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 .এই ফলাফলটি দেখায়, প্রকারে? এটি ঠিকঠাক সংগত পাঠ নয়, কিন্তু এটি স্পষ্টভাবে পাঠের বিষয়ে কিছু জানে। আমি গজিপের বিষয়ে কতটা আশা করতাম তার চেয়ে অনেক বেশি জানে।

তবে, একটি সংকুচক কীভাবে এই আউটপুট তৈরি করতে পারে? সংকুচন প্রত্যাশা। চিন্তা করুন যে একটি সংকুচক কী করে। এটি যে ডেটা 'আশা' করে তার վրա কম বাইট খরচ করে, এবং যে ডেটা 'আশা' না করে তার উপর বেশি বাইট খরচ করে। যদি আমি আপনাকে একটি ফাইল দিই যেখানে অক্ষর A এক মিলিয়ন বার পুনরাবৃত্তি হয়, তাহলে আপনি এটি একটি বাক্যে বর্ণনা করতে পারেন। এক মিলিয়ন যাদুগার বাইট, অন্যদিকে, কোনো শোষণযোগ্য গঠন নেই এবং تقریباً সংকুচিত হয় না। এটি কোনো সংयोग নয়; এটি তথ্য তত্ত্বের মূল। একটি প্রতীককে এনকোড করার জন্য প্রয়োজনীয় বিটের সংখ্যা $-\log_2 p$ যেখানে $p$ হল মডেল যে তাকে দিয়েছে সম্ভাবনা। উচ্চ সম্ভাবনা означает কম বিট। সুতরাং, যে কোনো সংকুচক অন্তর্নিহিতভাবে একটি সম্ভাবনা মডেল藏んでいる—যে কেউ তা লিখেছে অথবা না। gzip DEFLATE ব্যবহার করে, যা 32 KiB স্লাইডিং উইন্ডোতে সাম্প্রতিক টেক্সটের সাথে মিল খুঁজে বের করে পরবর্তী বাইটগুলোকে সংকুচিত করে। যদি একটি অগ্রesti উইন্ডোতে আগে থেকে বিদ্যমান কিছুকে প্রতিফলিত করে, তাহলে DEFLATE এটি একটি সস্তা ব্যাক-রেফারেন্স হিসেবে এনকোড করে, বাক্যাঙ্ক বাইটের পরিবর্তে। সুতরাং: একটি অগ্রesti যা gzip 'আশা' করে, কারণ এটি উইন্ডোতে আগে থেকে বিদ্যমান টেক্সটের প্রতিফলন, تقریباً কিছু না সংকুচিত হয়। এই থেকে আমরা একটি স্কোর পাই। যদি আমার কোনো প্রেক্ষাপট থাকে এবং আমি চাই যে একটি প্রার্থী অগ্রesti কতটা ভাল, তাহলে আমি শুধু মাপি: score(প্রার্থী) = len(gzip(প্রেক্ষাপট + প্রার্থী))। সংকুচিত দৈর্ঘ্য যত কম হবে, প্রার্থী उतना ही अधिक 'প্রত্যাশিত' মाने হবে। মডেলকে প্রাইম করতে, আমি gzip এর উইন্ডোতে একটি কর্পাস অন্তর্ভুক্ত করি। যেকোনো অগ্রesti যা কর্পাসের মতো দেখায়, ছোটভাবে সংকুচিত হয়, এবং যেকোনো অগ্রesti যা কর্পাসের মতো নয়, বড়ভাবে সংকুচিত হয়। बीम सर्च द्वारा उत्पादन। स्कोरिंग एक बात है; उत्पादन दूसरी बात है। naive दृष्टिकोण — जो एकल अगला बाइट चुनता है जो सबसे अच्छी तरह से संपीड़ित होता है — बहुत खराब विफल होता है, और इसका कारण सूक्ष्म है: gzip केवल एक पूर्णांक बाइट लंबाई देता है (अंश नहीं)। एक बाइट जोड़ने से अक्सर संपीड़ित लंबाई में कोई बदलाव नहीं आता, इसलिए कई उम्मीदवार टाई हो जाते हैं और संकेत मात्रन शोर में दब जाते हैं। সমাধান হল: বাঁধার আগে পূর্ণ পরিসরের দিকে দেখুন। gzipt বাইট अनुक्रमের উপর बीम সার্চ চালায়। প্রতিটি ধাপে, বর্তমান প্রেক্ষাপট হল: কর্পাস উইন্ডো + (প্রম্পট + জেনারেটেড বাইটস) এর সাম্প্রতিক পুচ্ছ। তারপর gzipt সম্ভাব্য পরবর্তী বাইটের চেষ্টা করে। প্রতিটি প্রার্থী অগ্রesti প্রেক্ষাপট + প্রার্থীকে সংকুচিত করে এবং সংকুচিত ফলাফলে কতগুলো বাইট নিয়েছে তা পরীক্ষা করে স্কোর পায়। লুপটি:

প্রম্পট। ব্যবহারকারীর প্রম্পট দিয়ে শুরু করুন, যা চালিয়ে যেতে ব্যবহৃত প্রাথমিক পাঠ। কোনো স্টার্ট টোকেন নেই; প্রম্পট বাইটগুলি শুধু gzip যে দেখে তাcontextের অংশ।

প্রেক্ষাপট। gzip-কে কর্পাস উইন্ডো এবং প্রম্পট/জেনারেটেড টেক্সটের সাম্প্রতিক পুচ্ছ দেখান।

অনুসন্ধান। beam_width সবচেয়ে সংকুচনযোগ্য আংশিক অগ্রesti রাখুন। প্রতিটিটি কর্পাসে উপস্থিত প্রতিটি বাইট দিয়ে বাড়িয়ে দিন, সবগুলোকে সংকুচিত দৈর্ঘย দ্বারা স্কোর করুন, এবং আবারো ভাল beam_width পর্যন্ত কেটে দিন।

horizon বাইটের জন্য পুনরাবৃত্তি করুন।

বাঁধন। সবচেয়ে বেশি সংকুচনযোগ্য পূর্ণ অগ্রesti নিন (যদি তাপমাত্রা ধনাত্মক হয়, তাহলে ফাইনালিস্টদের মধ্যে से নমুনা নিন), তা যোগ করুন, এবং চালিয়ে যান।

...

FAQ Q: কি gzip ব্যবহার করে ভাষা মডেল তৈরি করা যায়?

FAQ A: হ্যাঁ, gzip সংকুচন-ভিত্তিক প্রত্যাশার মাধ্যমে ভাষা মডেল হিসেবে কাজ করতে পারে। একটি কর্পাস দিয়ে এটি প্রাইম করে এবং बीम সার্চ ব্যবহার করে সেই বাইট अनुक्रम খুঁজে বের করে যা সবচেয়ে দক্ষতার সাথে সংকুচিত হয়, gzip কার্যকরভাবে প্যাটার্ন শনাক্ত করে এবং পাঠের অগ্রesti তৈরি করে। এই কাজটি इसलिए संभव है क्योंकि সংকুচন অ্যালগরিদম本質的に সম্ভাবনা মডেল তৈরি করে—যখন পাঠ আগে দেখे প্যাটার্নের সাথে মেলে, তখন він আরও দক্ষতার সাথে সংকুচিত হয়, যা উচ্চতর প্রত্যাশার সূচক।