YouTokentome - это неконтролируемый текстовый токенизатор, ориентированный на вычислительную эффективность. В настоящее время он реализует быстрое кодирование пары байтов (BPE) [Sennrich et al.]. Наша реализация гораздо быстрее в тренировках и токенизации, чем обнимание лица, FastBPE и предложение. В некоторых тестовых случаях это в 60 раз быстрее. Проверьте наши контрольные результаты.
Ключевые преимущества:
O(N) , где N - длина учебных данныхДополнительные функции:
Помимо алгоритма из оригинальной статьи, наш не учитывает токены, которые пересекают границы. Как и в предложении, все пространственные символы были заменены на Meta Symbol «‘ (U+2581). Это позволяет преобразовать последовательности токенов обратно в текст и для восстановления границ слов.
Например, фраза Blazingly fast tokenization! может быть направлен на
['▁Bl', 'az', 'ingly', '▁fast', '▁token', 'ization', '!']
pip install youtokentomeДавайте начнем с автономного примера.
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 )Поезда модели BPE и сохраняет файл.
Args:
data : строка, путь к файлу с учебными даннымиmodel : строка, путь к тому, где будет сохранена обученная модельvocab_size : int, количество токенов в последнем словареcoverage : плавание, доля символов, покрытых моделью. Должен быть в диапазоне [0, 1]. Хорошее значение для использования составляет около 0,9999.n_threads : int, количество параллельных потоков, используемых для запуска. Если -1 передается, то все доступные потоки будут использоваться. Обратите внимание, что количество потоков ограничено 8 (см. Benchmark).pad_id : int, зарезервированный идентификатор для прокладкиunk_id : int, зарезервированный идентификатор для неизвестных символовbos_id : int, зарезервированный идентификатор для начала токена предложенияeos_id : int, зарезервированный идентификатор для окончания токена предложения Возврат : класс youtokentome.BPE с загруженной моделью.
youtokentome . BPE ( model , n_threads = - 1 )Класс конструктор. Загружает обученную модель.
model : строка, путь к обученной моделиn_threads : int, количество параллельных потоков, используемых для запуска. Если будет равна -1, то будет использоваться максимальное количество доступных потоков. Класс youtokentome.BPE имеет следующие методы:
encode ( self , sentences , output_type = yttm . OutputType . ID , bos = False , eos = False , reverse = False , dropout_prob = 0 )Args:
sentences : список строк, предложения для токенизации.output_type : enum, предложение может быть токенизировано на идентификаторы или подчинки. Используйте OutputType.ID для ids и OutputType.SUBWORD для подводов.bos : Bool, если правда, то токен «Начало предложения» будет добавленоeos : Bool, если True Token «Конец предложения» будет добавленоreverse : Bool, если верно, выходная последовательность токенов будет изменена.dropout_prob : FLOAT, вероятность протокола BPE (вероятность слияния слияния). Должен быть в диапазоне [0, 1]. Возврат: если output_type равен youtokentome.OutputType.ID или youtokentome.OutputType.SUBWORD , то список списков целых чисел или списка списков строк будет возвращен соответственно.
vocab ( self ) Возвращает: список строк vocab_size . Строка I-TH в списке соответствует I-TH SOBWORD.
vocab_size ( self )Возврат: инт. Размер словаря.
subword_to_id ( self , subword )Args:
subword : строка. Возврат: целое число из диапазона [0, Vocab_size-1]. Идентификатор подчинка или, если в словарном словарном нет такого подлона, unk_id будет возвращен.
id_to_subword ( self , id )Args:
id : int, должен быть в диапазоне [0, Vocab_size-1]Возвращает: строка. Подвод из словаря от ID.
decode ( self , ids , ignore_ids = None )Преобразуйте каждый идентификатор в подвод и объединяйте с символом пространства.
Args:
ids : список списков целых чисел. Все целые числа должны быть в диапазоне [0, vocab_size-1]ignore_ids : сбор цетков. Эти индексы будут проигнорированы во время декодирования. Все целые числа должны быть в диапазоне [0, vocab_size-1] [по умолчанию: нет]Возврат: список строк.
$ 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 поддерживает следующие команды:
$ 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.
Команда bpe позволяет вам обучать модель кодирования пар байтов на основе текстового файла.
$ 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.
Примените кодирование BPE для корпуса предложений. Используйте stdin для ввода и stdout для вывода.
По умолчанию кодирование работает параллельно, используя потоки n_threads . Количество потоков ограничено 8 (см. Benchmark).
С опцией --stream - --n_threads будет игнорироваться, и все предложения будут обработаны один за другим. Каждое предложение будет токенизировано и записано в stdout до того, как будет прочитано следующее предложение.
$ 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.
Печать словаря. Это может быть полезно для понимания модели.
$ 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.
Конвертировать идентификаторы обратно в текст. Используйте stdin для ввода и stdout для вывода.
$ 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.