Esta es una implementación pura de Go para codificar y decodificar texto con el tokenizador SentencePieza.
"Codificación" es la operación utilizada para dividir el texto en tokens, utilizando un modelo de tokenizador entrenado. "Decodificar" es el proceso inverso: convertir una lista de tokens al texto original.
SentencePieza es una familia general de tokenizadores que se configura mediante un archivo de configuración protobuf. Actualmente, este repositorio se centra en implementar solo la funcionalidad necesaria para reproducir la tokenización de los modelos Gemma (el mismo tokenizador se utiliza para la familia de modelos Gemini, propiedad de Google). Específicamente, solo implementa la tokenización BPE ya que esto es lo que usa Gemma.
Este paquete debería estar listo para codificar texto en tokens utilizando el tokenizador Gemma; se ha optimizado razonablemente y se ha probado exhaustivamente en comparación con los enlaces de Python de SentencePiece (consulte system_test.go
en este repositorio).
Si encuentra algún problema o discrepancia, abra un problema.
El archivo de configuración para el tokenizador es un protobuf (datos estructurados, serializados en el formato de búfer de protocolo) que describe un modelo de tokenizador entrenado; Incluye el vocabulario completo aprendido utilizado para la tokenización, así como otra información de configuración.
No forma parte de este repositorio. Consíguelo del repositorio de implementación oficial de Gemma. Los constructores NewProcessor*
esperarán leer este archivo.
Se utiliza un protobuf para configurar el tokenizador. La estructura del protobuf se describe en el archivo internal/model/sentencepiece_model.proto
, que se proporciona desde https://github.com/google/sentencepiece
Para volver a generar el archivo *.pb.go
a partir de él:
$ cd internal/model
$ ./gen.sh
La configuración del protobuf en sí se obtiene como se describe en la sección de configuración de Tokenizer. Todas las pruebas requieren que la var de entorno MODELPATH
apunte a una copia local del archivo de configuración del tokenizador.
Para ver una demostración en el navegador de este tokenizador en acción, visite https://eliben.github.io/go-sentencepiece/
El código Go se compila en WebAssembly y se carga desde un pequeño programa JS para permitir la codificación interactiva de texto.