這是使用 SentencePiece 分詞器對文字進行編碼和解碼的純 Go 實作。
「編碼」是使用經過訓練的分詞器模型將文字拆分為標記的操作。 「解碼」是相反的過程-將標記清單轉換為原始文字。
SentencePiece 是由 protobuf 設定檔配置的通用分詞器系列。該儲存庫目前專注於實現重現 Gemma 模型標記化所需的功能(相同的標記器用於 Google 專有的 Gemini 系列模型)。具體來說,它僅實現 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 程式加載,以允許互動式文字編碼。