これは、SentencePiece トークナイザーを使用してテキストをエンコードおよびデコードする純粋な Go 実装です。
「エンコーディング」は、トレーニングされたトークナイザー モデルを使用して、テキストをトークンに分割するために使用される操作です。 「デコード」はその逆のプロセスであり、トークンのリストを元のテキストに変換します。
SentencePiece は、protobuf 構成ファイルによって構成されるトークナイザーの一般的なファミリーです。このリポジトリは現在、Gemma モデルのトークン化を再現するために必要な機能のみを実装することに重点を置いています (Google 独自の Gemini モデル ファミリには同じトークナイザーが使用されています)。具体的には、Gemma が使用するものであるため、BPE トークン化のみを実装します。
このパッケージは、Gemma トークナイザーを使用してテキストをトークンにエンコードするために使用する準備ができている必要があります。 SentencePiece Python バインディングと比較して、合理的に最適化され、広範囲にテストされています (このリポジトリのsystem_test.go
を参照)。
問題や矛盾が見つかった場合は、問題を開いてください。
トークナイザーの構成ファイルは、トレーニングされたトークナイザー モデルを記述する protobuf (プロトコル バッファー形式でシリアル化された構造化データ) です。これには、トークン化に使用される完全な学習語彙やその他の構成情報が含まれます。
このリポジトリの一部ではありません。公式の Gemma 実装リポジトリから取得してください。 NewProcessor*
コンストラクターは、このファイルを読み取ることを想定しています。
protobuf はトークナイザーを構成するために使用されます。 protobuf の構造は、https://github.com/google/sentencepiece から提供されるinternal/model/sentencepiece_model.proto
ファイルによって記述されます。
そこから*.pb.go
ファイルを再生成するには:
$ cd internal/model
$ ./gen.sh
構成 protobuf 自体は、Tokenizer 構成セクションで説明されているように取得されます。すべてのテストでは、 MODELPATH
環境変数がトークナイザー構成ファイルのローカル コピーを指す必要があります。
このトークナイザーの動作のブラウザ内デモを確認するには、https://eliben.github.io/go-sentencepiece/ にアクセスしてください。
Go コードは WebAssembly にコンパイルされ、小さな JS プログラムからロードされて、テキストの対話型エンコードが可能になります。