YouTokentome es un tokenizador de texto no supervisado centrado en la eficiencia computacional. Actualmente implementa la codificación de par de bytes rápidos (BPE) [Sennrich et al.]. Nuestra implementación es mucho más rápida en el entrenamiento y la tokenización que abrazar la cara, el fastbpe y la pieza de oración. En algunos casos de prueba, es 60 veces más rápido. Consulte nuestros resultados de referencia.
Ventajas clave:
O(N) complejidad, donde N es la duración de los datos de entrenamientoCaracterísticas adicionales:
Además del algoritmo del artículo original, el nuestro no considera tokens que cruzan los límites de las palabras. Al igual que en la pieza de oración, todos los símbolos espaciales fueron reemplazados por meta símbolo "" (U+2581). Permite que las secuencias de tokens se conviertan nuevamente en texto y para que los límites de las palabras se restablezcan.
Por ejemplo, ¡la frase Blazingly fast tokenization! se puede tokenizar en
['▁Bl', 'az', 'ingly', '▁fast', '▁token', 'ization', '!']
pip install youtokentomeComencemos con un ejemplo autónomo.
import random
import youtokentome as yttm
train_data_path = "train_data.txt"
model_path = "example.model"
# Generating random file with training data
# 10000 lines with 100 characters in each line
n_lines = 10000
n_characters = 100
with open ( train_data_path , "w" ) as fout :
for _ in range ( n_lines ):
print ( "" . join ([ random . choice ( "abcd " ) for _ in range ( n_characters )]), file = fout )
# Generating random text
test_text = "" . join ([ random . choice ( "abcde " ) for _ in range ( 100 )])
# Training model
yttm . BPE . train ( data = train_data_path , vocab_size = 5000 , model = model_path )
# Loading model
bpe = yttm . BPE ( model = model_path )
# Two types of tokenization
print ( bpe . encode ([ test_text ], output_type = yttm . OutputType . ID ))
print ( bpe . encode ([ test_text ], output_type = yttm . OutputType . SUBWORD )) youtokentome . BPE . train ( data , model , vocab_size , coverage , n_threads = - 1 , pad_id = 0 , unk_id = 1 , bos_id = 2 , eos_id = 3 )Traine el modelo BPE y guarda para archivar.
Args:
data : cadena, ruta para archivar con datos de capacitaciónmodel : cadena, ruta a donde se guardará el modelo entrenadovocab_size : int, número de tokens en el vocabulario finalcoverage : flotante, fracción de caracteres cubiertos por el modelo. Debe estar en el rango [0, 1]. Un buen valor para usar es de aproximadamente 0.9999.n_threads : int, número de hilos paralelos utilizados para ejecutarse. Si se pasa -1, entonces todos los hilos disponibles se utilizarán. Tenga en cuenta que el número de hilos está limitado por 8 (ver Benchmark).pad_id : int, identificación reservada para rellenounk_id : int, identificación reservada para símbolos desconocidosbos_id : int, identificación reservada para el comienzo del token de oracióneos_id : int, identificación reservada para el final de la oración token Devuelve : clase youtokentome.BPE con el modelo cargado.
youtokentome . BPE ( model , n_threads = - 1 )Constructor de clase. Carga el modelo entrenado.
model : cadena, ruta al modelo entrenadon_threads : int, número de hilos paralelos utilizados para ejecutarse. Si es igual a -1, se utilizará el número máximo de subprocesos disponibles. Clase youtokentome.BPE tiene los siguientes métodos:
encode ( self , sentences , output_type = yttm . OutputType . ID , bos = False , eos = False , reverse = False , dropout_prob = 0 )Args:
sentences : lista de cuerdas, oraciones para la tokenización.output_type : enum, la oración se puede tokenizar a ID o subvenciones. Use OutputType.ID para IDS y OutputType.SUBWORD para subvenciones.bos : Bool, si es cierto, entonces se agregará "comienzo de oración"eos : Bool, si es cierto, entonces se agregará "Fin de la oración"reverse : bool, si es verdadero la secuencia de salida de tokens se invertirádropout_prob : Float, BPE-Dropout Probabilidad (la probabilidad de que una fusión se elimine). Debe estar en el rango [0, 1]. Devuelve: si output_type es igual a youtokentome.OutputType.ID o youtokentome.OutputType.SUBWORD , entonces se devolverá una lista de listas de enteros o una lista de listas de cadenas respectivamente.
vocab ( self ) Devuelve: una lista vocab_size Strings. La cadena i-th en la lista corresponde a la subvención i-th.
vocab_size ( self )Devuelve: Int. Tamaño del vocabulario.
subword_to_id ( self , subword )Args:
subword : cadena. Devuelve: Integer desde el rango [0, VOCAB_SIZE-1]. ID de subvención o, si no hay dicha subvención en el vocabulario, se devolverá unk_id .
id_to_subword ( self , id )Args:
id : int, debe estar en el rango [0, VOCAB_SIZE-1]Devuelve: cadena. SUBORTA DEL VOCABULARIO POR ID.
decode ( self , ids , ignore_ids = None )Convierta cada ID en subvención y concatenado con el símbolo espacial.
Args:
ids : Lista de listas de enteros. Todos los enteros deben estar en el rango [0, VOCAB_SIZE-1]ignore_ids : colección de enteros. Estos índices serían ignorados durante la decodificación. Todos los enteros deben estar en el rango [0, VOCAB_SIZE-1] [predeterminado: Ninguno]Devuelve: Lista de cadenas.
$ yttm bpe --data TRAINING_DATA_FILE --model OUTPUT_MODEL_FILE --vocab_size 2000
$ yttm encode --model OUTPUT_MODEL_FILE --output_type subword < TEST_DATA_FILE > ENCODED_DATA YouTokenToMe admite los siguientes comandos:
$ yttm --help
Usage: yttm [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
bpe Train BPE model.
decode Decode ids to text.
encode Encode text to ids or subwords.
vocab Print list of learned subwords.
El comando bpe le permite entrenar el modelo de codificación de pares de bytes basado en un archivo de texto.
$ yttm bpe --help
Usage: yttm bpe [OPTIONS]
Train BPE model.
Options:
--data PATH Training data file path. [required]
--model PATH Output model file path. [required]
--vocab_size INTEGER Number of tokens in the final vocabulary. [required]
--coverage FLOAT Fraction of characters covered by the model. [default: 1.0]
--n_threads INTEGER Number of threads. [default: -1]
--pad_id INTEGER Padding token id. [default: 0]
--unk_id INTEGER Unknown token id. [default: 1]
--bos_id INTEGER 'Begin of sentence' token id. [default: 2]
--eos_id INTEGER 'End of sentence' token id. [default: 3]
--help Show this message and exit.
Aplicar la codificación BPE para un corpus de oraciones. Use stdin para entrada y stdout para la salida.
Por defecto, la codificación funciona en paralelo usando hilos n_threads . El número de hilos está limitado por 8 (ver Benchmark).
Con la opción --stream , --n_threads será ignorado y todas las oraciones se procesarán una por una. Cada oración será tokenizada y escrita en el stdout antes de leer la próxima oración.
$ yttm encode --help
Usage: yttm encode [OPTIONS]
Encode text to ids or subwords.
Options:
--model PATH Path to file with learned model. [required]
--output_type TEXT 'id' or 'subword'. [required]
--n_threads INTEGER Number of threads. [default: -1]
--bos Add tab 'begin of sentence'.
--eos Add tab 'end of sentence'.
--reverse Reverse output sequence of tokens.
--stream Process each line before reading the next one.
--dropout_prob BPE-dropout probability (the probability of a merge being dropped). [default: 0]
--help Show this message and exit.
Vocabulario de impresión. Esto puede ser útil para comprender el modelo.
$ yttm vocab --help
Usage: yttm vocab [OPTIONS]
Print list of learned subwords.
Options:
--model PATH Path to file with learned model. [required]
--verbose Add merging rules.
--help Show this message and exit.
Convertir las identificaciones de nuevo al texto. Use stdin para entrada y stdout para la salida.
$ yttm decode --help
Usage: yttm decode [OPTIONS]
Decode ids to text.
Options:
--model PATH Path to file with learned model. [required]
--ignore_ids List of indices to ignore for decoding. Example: --ignore_ids=1,2,3
--help Show this message and exit.