นี่เป็นการดำเนินการเข้ารหัสและถอดรหัสข้อความ Go อย่างแท้จริงด้วยโทเค็น Sentence Piece
"การเข้ารหัส" คือการดำเนินการที่ใช้ในการแยกข้อความออกเป็นโทเค็น โดยใช้โมเดลโทเค็นไนเซอร์ที่ได้รับการฝึกอบรม "การถอดรหัส" เป็นกระบวนการย้อนกลับ - การแปลงรายการโทเค็นให้เป็นข้อความต้นฉบับ
Sentence Piece เป็นตระกูลโทเค็นทั่วไปที่ได้รับการกำหนดค่าโดยไฟล์การกำหนดค่า protobuf ขณะนี้พื้นที่เก็บข้อมูลนี้มุ่งเน้นไปที่การใช้ฟังก์ชันที่จำเป็นในการสร้างโทเค็นของโมเดล Gemma ซ้ำ (โทเค็นเดียวกันนี้ใช้สำหรับโมเดลตระกูล Gemini ที่เป็นกรรมสิทธิ์ของ Google) โดยเฉพาะอย่างยิ่งจะใช้โทเค็น BPE เท่านั้นเนื่องจากนี่คือสิ่งที่ Gemma ใช้
แพ็คเกจนี้ควรพร้อมใช้งานสำหรับการเข้ารหัสข้อความเป็นโทเค็นโดยใช้โทเค็น Gemma ได้รับการปรับให้เหมาะสมอย่างเหมาะสมและทดสอบอย่างกว้างขวางเทียบกับการผูก Sentence Piece Python (ดู system_test.go
ในพื้นที่เก็บข้อมูลนี้)
หากคุณพบปัญหาหรือความคลาดเคลื่อน โปรดเปิดปัญหา
ไฟล์การกำหนดค่าสำหรับโทเค็นไนเซอร์คือ protobuf (ข้อมูลที่มีโครงสร้าง ต่อเนื่องกันในรูปแบบบัฟเฟอร์โปรโตคอล) ที่อธิบายโมเดลโทเค็นไนเซอร์ที่ผ่านการฝึกอบรม ประกอบด้วยคำศัพท์ที่เรียนรู้ครบถ้วนซึ่งใช้สำหรับโทเค็นไนซ์ ตลอดจนข้อมูลการกำหนดค่าอื่นๆ
มันไม่ได้เป็นส่วนหนึ่งของที่เก็บนี้ โปรดดึงข้อมูลจากพื้นที่เก็บข้อมูลการใช้งาน Gemma อย่างเป็นทางการ ตัวสร้าง NewProcessor*
คาดว่าจะอ่านไฟล์นี้
protobuf ใช้เพื่อกำหนดค่าโทเค็นไนเซอร์ โครงสร้างของ 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 ขนาดเล็กเพื่อให้สามารถเข้ารหัสข้อความแบบโต้ตอบได้