이는 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
env var가 필요합니다.
이 토크나이저의 브라우저 내 데모를 보려면 https://eliben.github.io/go-sentencepiece/를 방문하세요.
Go 코드는 WebAssembly로 컴파일되고 작은 JS 프로그램에서 로드되어 텍스트의 대화형 인코딩을 허용합니다.