هذا هو تطبيق Go خالص لتشفير النص وفك تشفيره باستخدام رمز SentencePiece.
"الترميز" هو العملية المستخدمة لتقسيم النص إلى رموز مميزة، باستخدام نموذج رمز مميز مُدرب. "فك التشفير" هو عملية عكسية - تحويل قائمة الرموز المميزة إلى النص الأصلي.
SentencePiece هي عائلة عامة من الرموز المميزة التي تم تكوينها بواسطة ملف تكوين protobuf. يركز هذا المستودع حاليًا على تنفيذ الوظيفة المطلوبة فقط لإعادة إنتاج الترميز لنماذج Gemma (يتم استخدام نفس الرمز المميز لمجموعة نماذج Gemini المملوكة لشركة Google). على وجه التحديد، فهو ينفذ فقط ترميز BPE نظرًا لأن هذا هو ما تستخدمه Gemma.
يجب أن تكون هذه الحزمة جاهزة للاستخدام لتشفير النص إلى رموز باستخدام رمز Gemma المميز؛ لقد تم تحسينه بشكل معقول واختباره على نطاق واسع مقابل روابط SentencePiece Python (راجع system_test.go
في هذا المستودع).
إذا وجدت أي مشاكل أو تناقضات، يرجى فتح قضية.
ملف التكوين الخاص بأداة الرمز المميز هو protobuf (بيانات منظمة، متسلسلة في تنسيق المخزن المؤقت للبروتوكول) الذي يصف نموذج رمز مميز مُدرب؛ فهو يشتمل على المفردات الكاملة التي تم تعلمها والمستخدمة في الترميز، بالإضافة إلى معلومات التكوين الأخرى.
إنه ليس جزءًا من هذا المستودع. برجاء إحضاره من مستودع تنفيذ Gemma الرسمي. يتوقع منشئو NewProcessor*
قراءة هذا الملف.
يتم استخدام protobuf لتكوين الرمز المميز. يتم وصف بنية البروتوبوف من خلال الملف internal/model/sentencepiece_model.proto
، والذي يتم توفيره من https://github.com/google/sentencepiece
لإعادة إنشاء الملف *.pb.go
منه:
$ cd internal/model
$ ./gen.sh
يتم الحصول على تكوين protobuf نفسه كما هو موضح في قسم تكوين Tokenizer. تتطلب كافة الاختبارات وجود MODELPATH
env var للإشارة إلى نسخة محلية من ملف تكوين أداة الرمز المميز.
لمشاهدة العرض التوضيحي داخل المتصفح لهذا الرمز المميز أثناء العمل، تفضل بزيارة https://eliben.github.io/go-sentencepiece/
يتم تجميع كود Go إلى WebAssembly وتحميله من برنامج JS صغير للسماح بالتشفير التفاعلي للنص.