Ini adalah implementasi Go murni untuk menyandikan dan mendekode teks dengan tokenizer SentencePiece.
"Pengkodean" adalah operasi yang digunakan untuk membagi teks menjadi token, menggunakan model tokenizer yang terlatih. "Decoding" adalah proses sebaliknya - mengubah daftar token menjadi teks asli.
SentencePiece adalah keluarga umum tokenizer yang dikonfigurasi oleh file konfigurasi protobuf. Repositori ini saat ini berfokus pada penerapan fungsionalitas yang diperlukan untuk mereproduksi tokenisasi model Gemma (tokenizer yang sama digunakan untuk rangkaian model Gemini milik Google). Secara khusus, ini hanya menerapkan tokenisasi BPE karena inilah yang digunakan Gemma.
Paket ini harus siap digunakan untuk menyandikan teks menjadi token menggunakan tokenizer Gemma; sudah cukup dioptimalkan dan diuji secara ekstensif vs. binding SentencePiece Python (lihat system_test.go
di repositori ini).
Jika Anda menemukan masalah atau ketidaksesuaian, silakan buka terbitannya.
File konfigurasi untuk tokenizer adalah protobuf (data terstruktur, diserialkan dalam format buffer protokol) yang menjelaskan model tokenizer terlatih; itu mencakup kosakata lengkap yang dipelajari yang digunakan untuk tokenisasi, serta informasi konfigurasi lainnya.
Itu bukan bagian dari repositori ini. Silakan ambil dari repositori implementasi Gemma resmi. Konstruktor NewProcessor*
akan membaca file ini.
Protobuf digunakan untuk mengonfigurasi tokenizer. Struktur protobuf dijelaskan oleh file internal/model/sentencepiece_model.proto
, yang dijual dari https://github.com/google/sentencepiece
Untuk membuat ulang file *.pb.go
dari file tersebut:
$ cd internal/model
$ ./gen.sh
Konfigurasi protobufnya sendiri didapat seperti yang dijelaskan pada bagian konfigurasi Tokenizer. Semua pengujian memerlukan MODELPATH
env var untuk menunjuk ke salinan lokal file konfigurasi tokenizer.
Untuk melihat demo dalam browser dari tokenizer ini, kunjungi https://eliben.github.io/go-sentencepiece/
Kode Go dikompilasi ke WebAssembly dan dimuat dari program JS kecil untuk memungkinkan pengkodean teks interaktif.