Il s'agit d'une pure implémentation Go d'encodage et de décodage de texte avec le tokenizer SentencePièce.
"Encodage" est l'opération utilisée pour diviser le texte en jetons, à l'aide d'un modèle de tokeniseur entraîné. Le « décodage » est le processus inverse : convertir une liste de jetons en texte original.
SentencePièce est une famille générale de tokenizers configurée par un fichier de configuration protobuf. Ce référentiel se concentre actuellement sur la mise en œuvre uniquement des fonctionnalités requises pour reproduire la tokenisation des modèles Gemma (le même tokenizer est utilisé pour la famille de modèles Gemini propriétaire de Google). Plus précisément, il implémente uniquement la tokenisation BPE puisque c'est ce que Gemma utilise.
Ce package doit être prêt à être utilisé pour coder du texte en jetons à l'aide du tokenizer Gemma ; il a été raisonnablement optimisé et largement testé par rapport aux liaisons SentencePièce Python (voir system_test.go
dans ce référentiel).
Si vous rencontrez des problèmes ou des divergences, veuillez ouvrir un problème.
Le fichier de configuration du tokenizer est un protobuf (données structurées, sérialisées au format tampon de protocole) qui décrit un modèle de tokenizer entraîné ; il comprend le vocabulaire complet appris utilisé pour la tokenisation, ainsi que d'autres informations de configuration.
Il ne fait pas partie de ce référentiel. Veuillez le récupérer dans le référentiel officiel d'implémentation de Gemma. Les constructeurs NewProcessor*
s’attendront à lire ce fichier.
Un protobuf est utilisé pour configurer le tokenizer. La structure du protobuf est décrite par le fichier internal/model/sentencepiece_model.proto
, vendu sur https://github.com/google/sentencepiece
Pour régénérer le fichier *.pb.go
à partir de celui-ci :
$ cd internal/model
$ ./gen.sh
La configuration protobuf elle-même est obtenue comme décrit dans la section Configuration de Tokenizer. Tous les tests nécessitent que la variable d'environnement MODELPATH
pointe vers une copie locale du fichier de configuration du tokenizer.
Pour voir une démo dans le navigateur de ce tokenizer en action, visitez https://eliben.github.io/go-sentencepiece/
Le code Go est compilé sur WebAssembly et chargé à partir d'un petit programme JS pour permettre un encodage interactif du texte.