کدگذاری جفت بایت

کدگذاری جفت بایتی[۱][۲] (BPE)[الف] یا digram coding شناخته می‌شود[۳] الگوریتمی است که نخستین بار در سال ۱۹۹۴ توسط فیلیپ گیج توصیف شد و برای کدگذاری رشته‌های متنی به منظور فشرده‌سازی و تبدیل آن به رشته‌های کوتاه‌تر از طریق ایجاد و استفاده از یک جدول ترجمه[ب] به کار می‌رود.[۴] نسخه‌ای کمی تغییر یافته از این الگوریتم در توکن‌سازهای مدل‌های زبانی بزرگ مورد استفاده قرار می‌گیرد.

نسخه اصلی این الگوریتم بر فشرده‌سازی تمرکز داشت. این روش، زوج بایت‌هایی که بیشترین تکرار را دارند را با یک بایت جدید که در مجموعه داده اولیه وجود ندارد جایگزین می‌کند. برای بازسازی مجموعه داده اولیه، داشتن یک جدول مراجعه و جستجو[پ] از جایگزینی‌ها ضروری است. نسخه اصلاح‌شده «توکن»‌هایی (واحدهای شناسایی) می‌سازد که می‌توانند مقادیر متفاوتی از متن منبع، از نویسه‌های منفرد (از جمله تک‌رقم یا نشانه‌های نگارشی تکی) تا کلمات کامل (حتی واژه‌های مرکب طولانی)، را پوشش دهند.[۵][۶][۷]

الگوریتم اصلی

الگوریتم اصلی BPE با جایگزین کردن مداوم متداول‌ترین توالی‌های پیوسته کاراکترها در متن هدف، با بایت‌های «جایگزین» استفاده‌نشده (در متن اولیه) عمل می‌کند. این تکرار زمانی پایان می‌یابد که دیگر توالی‌ای یافت نشود و متن هدف عملاً فشرده می‌ماند. از طریق وارون کردن این فرایند می‌توان متن را از حالت فشرده خارج کرد. به این صورت که با استفاده از یک جدول مراجعه و جستجو، اصطلاحات جایگزین شناخته‌شده به توالی اصلی مربوطه بازگردانده شوند. در مقاله اصلی، این جدول همراه با متن فشرده‌شده کدگذاری و ذخیره می‌شود.

مثال

فرض کنید داده‌ای که باید کدگذاری شود به صورت زیر باشد

aaabdaaabac

زوج بایت «aa» بیشترین تکرار را دارد و بنابراین با بایتی که در داده اصلی وجود ندارد، مانند «Z» جایگزین می‌شود. اکنون داده و جدول جایگزینی به صورت زیر است:

ZabdZabac
Z=aa

سپس این فرایند با زوج بایت «ab» تکرار می‌شود و آن را با «Y» جایگزین می‌کند:

ZYdZYac
Y=ab
Z=aa

تنها زوج بایتی که باقی مانده فقط یک بار تکرار شده، و در این مرحله ممکن است الگوریتم متوقف شود. یا این که فرایند می‌تواند بازگشتی[ت] شده و ادامه یابد و «ZY» را با «X» جایگزین کند:

XdXac
X=ZY
Y=ab
Z=aa

در این مرحله دیگر هیچ زوج بایتی که بیش از یک بار رخ دهد، وجود ندارد و بنابراین داده بیشتر از این با کدگذاری زوج-بایتی فشرده نمی‌شود.

برای خارج کردن داده از حالت فشرده، کافی است جایگزینی‌ها را به شکل معکوس انجام دهیم.

الگوریتم تصحیح‌شده

الگوریتم اصلی BPE برای استفاده در مدل زبانی، به‌ویژه در مدل‌های زبانی بزرگ مبتنی بر شبکه‌های عصبی، تغییر یافته است. نسخه تغییر یافته به دنبال فشرده‌سازی حداکثری متن نیست، بلکه متن ساده را به «توکن»هایی تبدیل می‌کند که در حقیقت اعداد طبیعی هستند. همه توکن‌های منحصربه‌فردی که در یک پیکره متنی[ث] یافت می‌شوند در دایره واژگان توکن[ج] فهرست می‌شوند. اندازه این واژگان در مورد جی‌پی‌تی ۳.۵ و جی‌پی‌تی ۴ برابر با ۱۰۰۲۵۶ است.

الگوریتم توکن‌سازیِ تغییر یافته، در ابتدا مجموعه نویسه‌های منحصربه‌فرد را به عنوان ان-گرام یک‌نویسه‌ای (توکن‌های اولیه) در نظر می‌گیرد. سپس به صورت پی‌درپی، پرکاربردترین زوج توکن مجاور را در هم ادغام می‌کند و آن را به یک ان-گرم طولانی‌تر تبدیل می‌کند و تمام رخدادهای آن زوج را با این توکن جدید جایگزین می‌کند. این عمل تا زمانی تکرار می‌شود که به واژگانی با اندازه از پیش تعیین‌شده برسیم. توجه داشته باشید که همواره می‌توان واژگان جدید را از توکن‌های واژگان نهایی و نویسه‌های مجموعه اولیه تولید کرد.[۸]

این رویکرد BPE تغییر یافته در سال‌های اخیر از زبان گفتاری به زبان اشاره نیز گسترش یافته است.[۹]

مثال

فرض کنید در حال کدگذاری همان مثال قبلی «aaabdaaabac» هستیم، با یک اندازه واژگان معادل عدد ۶. با این وضعیت، متن اصلی با استفاده از دایره واژگان «a=0, b=1, d=2, c=3» به صورت «0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 3» کدگذاری می‌شود. سپس فرایند همانند قبل ادامه می‌یابد و همراه با دایره واژگان «a=0, b=1, d=2, c=3, aa=4, ab=5»، متن قبلی به «4, 5, 2, 4, 5, 0, 3» کدگذاری می‌شود.

تا اینجا اساس کار همان فرایند پیشین است. با این حال، اگر اندازه واژگان ۵ تعیین شده بود، فرایند در دایره واژگان «a=0, b=1, d=2, c=3, aa=4» متوقف می‌شد، و مثال به صورت «4, 0, 1, 2, 4, 0, 1, 0, 3» کدگذاری می‌شد.

از سوی دیگر، اگر اندازه واژگان ۸ تعیین می‌شد، در نهایت کدگذاری «7, 6, 0, 3» به دست می‌آمد، با که با استفاده از دایره واژگانی «a=0, b=1, d=2, c=3, aa=4, ab=5, aaab=6, aaabd=7» اتفاق می‌افتاد. این روش لزوماً بهینه‌ترین حالت فشرده‌سازی نیست، اما هدف BPE تغییر یافته، فشرده‌سازی حداکثری مجموعه داده‌ها نیست، بلکه می‌خواهد آن را به شکلی مناسب برای آموزش مدل‌های زبانی کدگذاری کند.

BPE در سطح بایت[چ]

در مثال بالا، خروجی BPE یک دایره واژگان است که می‌تواند برای کدگذاری هر متنی که با حروف «abcd» نوشته شده، مورد استفاده قرار گیرد. اما قادر نخواهد بود متنی را که شامل حروف دیگری است، مانند «no»، کدگذاری کند. حتی اگر هر ۲۶ حرف الفبا در واژگان حضور داشته باشند، از آنجا که در دنیا زبان‌های متعدد با خط‌های گوناگون وجود دارد، ناچاراً برخی نویسه‌ها قابل کدگذاری توسط چنین واژگانی نخواهند بود.

یکی از راهکارها این است که هر نویسه غیرقابل کدگذاری را با یک نویسه ویژه به نام UNK («ناشناخته») جایگزین کنیم.

روش «BPE در سطح بایت» راهکاری متفاوت است. در این روش ابتدا متن به قالب متنی یوتی‌اف-۸ تبدیل شده و سپس به شکل یک جریان از بایت‌ها پردازش می‌شود. به این ترتیب هر متنی که در UTF-8 کدگذاری شده باشد می‌تواند توسط BPE کدگذاری شود. این روش در مدل‌های شبه برت مانند RoBERTa، BART و DeBERTa، و نیز در مدل‌های شبیه به جی‌پی‌تی نظیر جی‌پی‌تی ۲ استفاده شده است.[۱۰]

یادداشت‌ها

  1. Byte Pair Encoding
  2. translation table
  3. lookup table
  4. recursive
  5. corpus
  6. token vocabulary
  7. Byte-level BPE

جستارهای وابسته

  • ری-پر
  • الگوریتم سکویتر

منابع

  1. Gage, Philip (1994). "A New Algorithm for Data Compression". The C User Journal.
  2. "A New Algorithm for Data Compression". Dr. Dobb's Journal. 1 February 1994. Retrieved 10 August 2020.
  3. Witten, Ian H.; Moffat, Alistair; Bell, Timothy C. (1994). Managing Gigabytes. New York: Van Nostrand Reinhold. ISBN 978-0-442-01863-4.
  4. "Byte Pair Encoding". Archived from the original on 2016-03-26.
  5. Sennrich, Rico; Birch, Alexandra; Haddow, Barry (2015-08-31). "Neural Machine Translation of Rare Words with Subword Units". arXiv:1508.07909 [cs.CL].
  6. Brown, Tom B.; Mann, Benjamin; Ryde r, Nick; Subbiah, Melanie; Kaplan, Jared; Dhariwal, Prafulla; Neelakantan, Arvind; Shyam, Pranav; Sastry, Girish; Askell, Amanda; Agarwal, Sandhini (2020-06-04). "Language Models are Few-Shot Learners". arXiv:2005.14165 [cs.CL].
  7. "google/sentencepiece". Google. 2021-03-02. Retrieved 2021-03-02.
  8. Paaß, Gerhard; Giesselbach, Sven (2022). "Pre-trained Language Models". Foundation Models for Natural Language Processing. Artificial Intelligence: Foundations, Theory, and Algorithms. pp. 19–78. doi:10.1007/978-3-031-23190-2_2. ISBN 9783031231902. Retrieved 3 August 2023.
  9. Taro Miyazaki, Sihan Tan, Tsubasa Uchida, Hiroyuki Kaneko (May 25, 2024). "Sign Language Translation with Gloss Pair Encoding" (PDF). Proceedings of the 11th Workshop on the Representation and Processing of Sign Languages.{cite journal}: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)
  10. "Byte-Pair Encoding tokenization - Hugging Face NLP Course". huggingface.co. Retrieved 2025-01-27.