نقدم لكم برنامج Tiny BPE Trainer
تعتمد معظم نماذج معالجة اللغة الطبيعية (NLP) الحديثة، من GPT إلى RoBERTa، على ترميز الكلمات الفرعية باستخدام ترميز زوج البايتات (BPE). ولكن ماذا لو كنت ترغب في تدريب مفرداتك الخاصة بلغة C++ نقية؟
تعرّف على Tiny BPE Trainer - برنامج تدريب BPE فائق السرعة، يعتمد على الرؤوس فقط، ومكتوب بلغة C++ 17/20 الحديثة، مع عدم وجود تبعيات، ودعم كامل لـ UTF-8، ومخرجات متوافقة مع HuggingFace (vocab.txt
، merges.txt
).
لماذا برنامج تدريب BPE آخر؟
لأن الخيارات المتاحة غالبًا ما تكون:
- مخصصة لبايثون فقط، مع اعتماديات تشغيلية كبيرة (Rust، Protobuf، إلخ.)
- يصعب تضمينها في تطبيقات C++
- لا تركز على السرعة أو البساطة أو الاستخدام متعدد المنصات
Tiny BPE Trainer هو:
- مخصص للرأس فقط
- متعدد المنصات (لينكس، ويندوز، ماك أو إس)
- متوافق مع HuggingFace
- ويتوافق تمامًا مع مشروعي الآخر: Modern Text Tokenizer
الميزات الأساسية
- تدريب كامل على BPE من نص عادي أو مجموعات بيانات JSONL
- دعم CLI وواجهة برمجة تطبيقات C++ - مثالي للأدوات أو التضمين
- مخرجات متوافقة مع HuggingFace (
vocab.txt
,merges.txt
) - آمن بترميز UTF-8 - يدعم الرموز التعبيرية، والنصوص متعددة اللغات، والأحرف الخاصة.
- قابل للتخصيص - يدعم الأحرف الصغيرة، وتقسيم علامات الترقيم، والحد الأدنى للتكرار، إلخ.
- وضع العرض التوضيحي - اختبر كل شيء باستخدام أمر من سطر واحد.
عرض توضيحي
1./Tiny-BPE-Trainer --demo
يُولّد هذا البرنامج مجموعةً مُركّبةً، ويُدرّب مُفرداتٍ، ويطبع الإحصائيات، ويُشغّل عملية الترميز - كل ذلك في ثوانٍ. مثاليٌّ لاختبارات التكامل المستمر (CI) والاختبارات العشوائية (Smoke tests).
كيفية تدريب مُرمّز BPE
بنِه
1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
تدريب على مجموعة
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer
أو من JSONL:
1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000
رمزية النص
1./Tiny-BPE-Trainer --test "Hello, world! This is a test."
يعمل بسلاسة مع Modern Text Tokenizer
بعد التدريب، يمكنك استخدام مفرداتك المخصصة مباشرةً في Modern Text Tokenizer :
1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");
يمنحك هذا خط أنابيب مُرمِّز C++ بالكامل، بدون أي تبعيات وقت التشغيل.
استخدام مجموعات بيانات حقيقية
يمكنك بسهولة إنشاء مجموعات بيانات باستخدام مجموعات بيانات HuggingFace:
1from datasets import load_dataset
2
3dataset = load_dataset("imdb", split="train")
4with open("corpus.txt", "w", encoding="utf-8") as f:
5 for x in dataset:
6 f.write(x["text"].strip().replace("\n", " ") + "\n")
ثم تدرب:
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer
المعيار
1تمت المعالجة: ٣٣ مليون حرف
2عدد الكلمات الفريدة: ١٠٦ ألف
3حجم المفردات: ٣٢٠٠٠
4مدة التدريب: حوالي ٣٠ دقيقة (Ryzen 9، -O3)
حتى مع ملفات النصوص الكبيرة (IMDB، WikiText)، يعمل Tiny BPE Trainer بكفاءة وفعالية، ويُنشئ مفردات متوافقة مع HuggingFace وSentencePiece، ومُجزئات C++ الخاصة بك.
حالات الاستخدام
- تدريب مُجزئات مخصصة لـ LLMs والمُحوّلات
- معالجة اللغة الطبيعية على الجهاز حيث لا يتوفر Python
- بناء معالجات أولية عالية الأداء
- تدريب مفردات خاصة بمجال معين (قانونية، طبية، برمجية)
جرّبه الآن
1git clone https://github.com/Mecanik/Tiny-BPE-Trainer
2cd Tiny-BPE-Trainer
3g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
4./Tiny-BPE-Trainer --demo
اطلع على ملف README الكامل على GitHub للاطلاع على الخيارات المتقدمة، وعلامات سطر الأوامر، ونصائح التكامل:
صُمم بشغف لمجتمعي معالجة اللغة الطبيعية (NLP) وC++.
إذا أعجبك، ضع علامة نجمة عليه على GitHub ، أو استخدمه في مشاريعك، أو ساهم فيه!
التعليقات