YouTokentome adalah tokenizer teks tanpa pengawasan yang berfokus pada efisiensi komputasi. Saat ini mengimplementasikan Fast Byte Pair Encoding (BPE) [Sennrich et al.]. Implementasi kami jauh lebih cepat dalam pelatihan dan tokenisasi daripada memeluk wajah, fastbpe, dan kalimat. Dalam beberapa kasus uji, 60 kali lebih cepat. Lihat hasil benchmark kami.
Keuntungan utama:
O(N) , di mana N adalah panjang data pelatihanFitur tambahan:
Serta dalam algoritma dari kertas asli, kami tidak mempertimbangkan token yang melintasi batas kata. Sama seperti di kalimat, semua simbol ruang digantikan oleh simbol meta "" (U+2581). Ini memungkinkan urutan token untuk dikonversi kembali ke teks dan agar batas kata dipulihkan.
Misalnya, frasa Blazingly fast tokenization! bisa menjadi tokenisasi
['▁Bl', 'az', 'ingly', '▁fast', '▁token', 'ization', '!']
pip install youtokentomeMari kita mulai dengan contoh mandiri.
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 )Melatih model BPE dan menyimpan untuk mengajukan.
Args:
data : String, jalur ke file dengan data pelatihanmodel : String, jalur ke tempat model terlatih akan disimpanvocab_size : int, jumlah token dalam kosakata akhircoverage : Mengapung, sebagian kecil dari karakter yang dicakup oleh model. Harus dalam kisaran [0, 1]. Nilai yang baik untuk digunakan adalah sekitar 0,9999.n_threads : int, jumlah utas paralel yang digunakan untuk berjalan. Jika -1 dilewatkan, maka semua utas yang tersedia akan digunakan. Perhatikan bahwa jumlah utas dibatasi oleh 8 (lihat Benchmark).pad_id : int, ID yang dipesan untuk bantalanunk_id : int, id cadangan untuk simbol yang tidak diketahuibos_id : int, id cadangan untuk memulai token kalimateos_id : int, ID yang dicadangkan untuk Token Kalimat Akhir Pengembalian : Kelas youtokentome.BPE dengan model yang dimuat.
youtokentome . BPE ( model , n_threads = - 1 )Konstruktor kelas. Memuat model yang terlatih.
model : String, jalur ke model terlatihn_threads : int, jumlah utas paralel yang digunakan untuk berjalan. Jika sama dengan -1, maka jumlah maksimum utas yang tersedia akan digunakan. Kelas youtokentome.BPE memiliki metode berikut:
encode ( self , sentences , output_type = yttm . OutputType . ID , bos = False , eos = False , reverse = False , dropout_prob = 0 )Args:
sentences : Daftar string, kalimat untuk tokenisasi.output_type : enum, kalimat dapat di -tokenized ke ID atau Subwords. Gunakan OutputType.ID untuk ID dan OutputType.SUBWORD untuk subwords.bos : Bool, jika benar maka token "awal kalimat" akan ditambahkaneos : bool, jika benar maka token "akhir kalimat" akan ditambahkanreverse : bool, jika benar urutan output token akan terbalikdropout_prob : float, bpe-dropout probabilitas (probabilitas gabungan yang dijatuhkan). Harus dalam kisaran [0, 1]. Pengembalian: Jika output_type sama dengan youtokentome.OutputType.ID atau youtokentome.OutputType.SUBWORD kemudian daftar daftar bilangan bulat atau daftar daftar string akan dikembalikan masing -masing.
vocab ( self ) Pengembalian: Daftar vocab_size STRING. String i-th dalam daftar sesuai dengan subword i-th.
vocab_size ( self )Pengembalian: Int. Ukuran kosa kata.
subword_to_id ( self , subword )Args:
subword : String. Pengembalian: Integer dari rentang [0, Vocab_Size-1]. ID subword atau, jika tidak ada subword seperti itu dalam kosakata, unk_id akan dikembalikan.
id_to_subword ( self , id )Args:
id : int, harus dalam kisaran [0, vocab_size-1]Returns: String. Subword dari kosa kata oleh ID.
decode ( self , ids , ignore_ids = None )Konversi setiap ID ke subword dan menggabungkan dengan simbol ruang.
Args:
ids : Daftar daftar bilangan bulat. Semua bilangan bulat harus dalam kisaran [0, Vocab_Size-1]ignore_ids : Koleksi bilangan bulat. Indeks ini akan diabaikan selama decoding. Semua bilangan bulat harus dalam kisaran [0, Vocab_Size-1] [Default: None]Pengembalian: Daftar String.
$ 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 mendukung perintah berikut:
$ 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.
Perintah bpe memungkinkan Anda untuk melatih model pengkodean pasangan byte berdasarkan file teks.
$ 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.
Terapkan pengkodean BPE untuk kumpulan kalimat. Gunakan stdin untuk input dan stdout untuk output.
Secara default, pengkodean bekerja secara paralel menggunakan utas n_threads . Jumlah utas dibatasi oleh 8 (lihat Benchmark).
Dengan opsi --stream , --n_threads akan diabaikan dan semua kalimat akan diproses satu per satu. Setiap kalimat akan di -tokenized dan ditulis ke stdout sebelum kalimat berikutnya dibaca.
$ 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.
Cetak kosa kata. Ini bisa berguna untuk memahami model.
$ 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.
Konversi ID kembali ke teks. Gunakan stdin untuk input dan stdout untuk output.
$ 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.