YouTokentome ist ein unbeaufsichtigter Text -Tokenizer, der sich auf die Recheneffizienz konzentriert. Derzeit implementiert es eine schnelle Bytepaar -Codierung (BPE) [Sennrich et al.]. Unsere Implementierung ist bei Training und Tokenisierung viel schneller als das Umarmen von Gesicht, Fastbpe und Satzstück. In einigen Testfällen ist es 60 -mal schneller. Schauen Sie sich unsere Benchmark -Ergebnisse an.
Schlüsselvorteile:
O(N) , wobei N die Länge der Trainingsdaten istZusätzliche Funktionen:
Sowie im Algorithmus aus dem Originalpapier betrachtet unsere keine Token, die die Wortgrenzen überschreiten. Genau wie im Satzstück wurden alle Raumsymbole durch Meta -Symbol "W" (U+2581) ersetzt. Es ermöglicht es, dass Sequenzen von Token in Text und Word -Grenzen zurückversetzt werden.
Zum Beispiel der Ausdruck, Blazingly fast tokenization! kann tokenisiert werden
['▁Bl', 'az', 'ingly', '▁fast', '▁token', 'ization', '!']
pip install youtokentomeBeginnen wir mit einem in sich geschlossenen Beispiel.
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 )Trainiert BPE -Modell und speichert in Datei.
Args:
data : String, Pfad zur Datei mit Trainingsdatenmodel : String, Pfad zu dem Ort, an dem das geschulte Modell gespeichert wirdvocab_size : int, Anzahl der Token im endgültigen Vokabularcoverage : Float, Bruchteil der vom Modell abgedeckten Zeichen. Muss im Bereich sein [0, 1]. Ein guter Wert für die Verwendung liegt bei 0,9999.n_threads : int, Anzahl der parallelen Threads, die zum Ausführen verwendet werden. Wenn -1 übergeben wird, werden alle verfügbaren Threads verwendet. Beachten Sie, dass die Anzahl der Threads um 8 begrenzt ist (siehe Benchmark).pad_id : int, reservierte ID für die Polsterungunk_id : int, reservierte ID für unbekannte Symbolebos_id : INT, reservierte ID für den Beginn des Satztokenseos_id : int, reservierte ID für das Ende des Satztokens Rückgabe : Klasse youtokentome.BPE mit dem geladenen Modell.
youtokentome . BPE ( model , n_threads = - 1 )Klassenkonstruktor. Lädt das trainierte Modell.
model : String, Pfad zum trainierten Modelln_threads : int, Anzahl der parallelen Threads, die zum Ausführen verwendet werden. Wenn es gleich -1 entspricht, wird die maximale Anzahl der verfügbaren Threads verwendet. Klasse youtokentome.BPE hat die folgenden Methoden:
encode ( self , sentences , output_type = yttm . OutputType . ID , bos = False , eos = False , reverse = False , dropout_prob = 0 )Args:
sentences : Liste der Zeichenfolgen, Sätze für die Tokenisierung.output_type : enum, der Satz kann zu IDs oder Subwords tokenisiert werden. Verwenden Sie OutputType.ID für IDs und OutputType.SUBWORD für Unterwörter.bos : Bool, wenn wahr, wird der Token „Beginn des Satzes“ hinzugefügteos : Bool, wenn wahr, wird das Token „Ende des Satzes“ hinzugefügtreverse : Bool, wenn die Ausgangsfolge von Token umgekehrt wird, wird es umgekehrtdropout_prob : Float, BPE-Dropout-Wahrscheinlichkeit (die Wahrscheinlichkeit, dass eine Verschmelzung fallen gelassen wird). Muss im Bereich sein [0, 1]. Rückgaben: Wenn output_type youtokentome.OutputType.ID oder youtokentome.OutputType.SUBWORD entspricht, wird eine Liste von Listen von Ganzzahlen oder Listen der Zeichenfolgen zurückgegeben.
vocab ( self ) Rückgabe: Eine Liste vocab_size . Die I-te-Zeichenfolge in der Liste entspricht dem Subword von I-Th.
vocab_size ( self )Rückgabe: int. Größe des Wortschatzes.
subword_to_id ( self , subword )Args:
subword : String. Rückgabe: Ganzzahl aus dem Bereich [0, vocab_size-1]. ID des Subwords oder, wenn es kein solches Subword im Wortschatz gibt, wird unk_id zurückgegeben.
id_to_subword ( self , id )Args:
id : Int, muss im Bereich sein [0, vocab_size-1]Rückgabe: String. Subword aus dem Wortschatz durch ID.
decode ( self , ids , ignore_ids = None )Konvertieren Sie jede ID in Subword und verkettet mit Raumsymbol.
Args:
ids : Liste der Zahlenlisten. Alle Ganzzahlen müssen sich im Bereich befinden [0, Vocab_size-1]ignore_ids : Sammlung von Ganzzahlen. Diese Indizes würden während der Dekodierung ignoriert. Alle Ganzzahlen müssen sich im Bereich befinden [0, Vocab_size-1] [Standard: Keine]Rückgaben: Liste der Saiten.
$ 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 unterstützt die folgenden Befehle:
$ 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.
Mit dem Befehl bpe können Sie das Byte -Paar -Codierungsmodell basierend auf einer Textdatei trainieren.
$ 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.
Wenden Sie die BPE -Codierung für einen Sätzekorpus an. Verwenden Sie stdin für Eingabe und stdout für die Ausgabe.
Standardmäßig funktioniert die Codierung parallel mit n_threads -Threads. Die Anzahl der Threads ist um 8 begrenzt (siehe Benchmark).
Mit der Option --stream werden --n_threads ignoriert und alle Sätze nacheinander verarbeitet. Jeder Satz wird tokenisiert und in den stdout geschrieben, bevor der nächste Satz gelesen wird.
$ 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.
Druckvokabular. Dies kann nützlich sein, um das Modell zu verstehen.
$ 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.
Wenden Sie die IDs in Text zurück. Verwenden Sie stdin für Eingabe und stdout für die Ausgabe.
$ 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.