Это чистая реализация кодирования и декодирования текста на Go с помощью токенизатора SentencePiece.
«Кодирование» — это операция, используемая для разделения текста на токены с использованием обученной модели токенизатора. «Декодирование» — это обратный процесс — преобразование списка токенов в исходный текст.
SentencePiece — это общее семейство токенизаторов, которое настраивается с помощью файла конфигурации protobuf. В настоящее время этот репозиторий сосредоточен на реализации только тех функций, которые необходимы для воспроизведения токенизации моделей Gemma (тот же токенизатор используется для собственного семейства моделей Gemini от Google). В частности, он реализует только токенизацию BPE, поскольку именно это использует Gemma.
Этот пакет должен быть готов к использованию для кодирования текста в токены с помощью токенизатора Gemma; он был разумно оптимизирован и тщательно протестирован по сравнению с привязками SentencePiece 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
указывала на локальную копию файла конфигурации токенизатора.
Чтобы увидеть демоверсию этого токенизатора в действии в браузере, посетите https://eliben.github.io/go-sentencepiece/.
Код Go компилируется в WebAssembly и загружается из небольшой программы JS, что обеспечивает интерактивное кодирование текста.