توکنایزرها ابزارهای کلیدی در پردازش زبان طبیعی (NLP) هستند که وظیفه تبدیل متن به دادههای عددی قابل فهم برای مدلهای یادگیری ماشین را بر عهده دارند. این ابزارها به مدلها کمک میکنند تا ورودیهای متنی را به فرمت عددی تبدیل کنند که قابل پردازش باشد. با این حال، برای زبان فارسی توکنایزرهای کافی وجود ندارد و نیاز به توسعه توکنایزرهای خاص برای این زبان احساس میشود.
فرآیند توکنسازی
توکنایزرها متن خام را به توکنهای عددی تبدیل میکنند. به عنوان مثال، جمله "علی یک نجار است." به توکنهای زیر تبدیل میشود:
"علی"^" "^"یک"^"نجار"^" "است"^".
"^"end" 123^12^146^12^256^12^135^4236^1112
این فرآیند به مدلها این امکان را میدهد که متن را به صورت عددی پردازش کنند.
مدلهای مختلف توکنایزر
1. توکنایزر با الگوریتم BPE
الگوریتم BPE (Byte Pair Encoding) با محاسبه مجموعه منحصر به فرد کلمات شروع میشود و سپس واژگان را بر اساس تکرار جفت کاراکترها ایجاد میکند. این الگوریتم ابتدا تمام کاراکترها را با UTF-8 رمزگذاری کرده و سپس جفتها را بر اساس فراوانی آنها مرتب میکند. BPE معمولاً از 256 واژه اولیه شروع میکند و بسته به دادهها، میتواند به دهها هزار عدد برسد.
2. توکنایزر با الگوریتم WordPiece
WordPiece الگوریتمی است که توسط گوگل برای پیشآموزش BERT توسعه داده شده است. این الگوریتم از یک مجموعه واژگان کوچک استفاده میکند و زیر کلمات را با پیشوند "##" شناسایی میکند. این الگوریتم به هر جفت بر اساس فرمول خاصی نمره میدهد که به انتخاب جفتهای مناسب کمک میکند.
3. الگوریتم Unigram
الگوریتم Unigram به طور معکوس عمل میکند و از یک واژگان بزرگ شروع میکند و به تدریج توکنها را حذف میکند تا به اندازه مطلوب برسد. این الگوریتم نرخ از دست رفته را محاسبه کرده و توکنهای کم نیاز را شناسایی میکند.
پیادهسازی توکنایزر فارسی با BPE
برای ساخت توکنایزر فارسی با استفاده از الگوریتم BPE، ابتدا ماژولهای لازم را وارد کرده و مدل BPE را انتخاب میکنیم. سپس با استفاده از دادههای آموزشی، توکنایزر را آموزش میدهیم. در نهایت، توکنایزر را ذخیره میکنیم تا در آینده قابل استفاده باشد.
from tokenizers import (decoders, models, pre_tokenizers, prfrom tokenizers import (decoders, models, pre_tokenizers, processors, trainers, Tokenizer)
tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False)
trainer = trainers.BpeTrainer(vocab_size=3000, special_token)
درست کردن Tokenizer فارسی