Как мы все знаем, подготовка ввода является очень важным шагом в полном конвейере глубокого обучения для проблем, связанных как с изображениями, так и с текстом. В этом блоге мы попытаемся понять один из наиболее важных методов предварительной обработки текста под названием Tokenizer вместе с параметрами, доступными в keras.

Во-первых, мы попытаемся понять, что в основном означает токенизатор, на простом примере.

Машина не понимает текст, поэтому нам нужно преобразовать текст в машиночитаемый язык, а это не что иное, как числа. Для преобразования текста в числа у нас есть класс в keras под названием Tokenizer. Посмотрите на простой пример ниже, чтобы лучше понять контекст.

Предложение «Я люблю глубокое обучение» будет присвоено Tokenizer в keras указанным ниже числам.

Я — 2, любовь — 4, глубокая — 1, обучение — 3 (Примечание: раньше номера присваивались в алфавитном порядке.

Вот так, если мы передадим огромный набор данных с большим количеством документов в токенизатор keras, он преобразует все текстовые слова в последовательность чисел. Мы поняли концепции токена. Теперь мы попытаемся понять, как мы можем реализовать его с помощью Keras API в большом наборе данных.

Для этого нам нужно сначала импортировать класс токенизатора из предварительной обработки текста keras, используя приведенный ниже код.

из tensorflow.keras.preprocessing.text import Tokenizer

Как только мы импортировали класс Tekenizer, мы создадим экземпляр объекта класса Tokenizer. После создания экземпляра объекта мы будем использовать метод под названием «fit_on_texts» для созданного экземпляра объекта и будем передавать предложение или большой набор данных в качестве параметра в метод «fit_on_texts». Следует отметить одну вещь: метод fit_on_text принимает список, поэтому нам нужно преобразовать предложение или столбцы в наборе данных, к которому мы планируем применить токенизатор, в список. Это можно сделать с помощью приведенного ниже кода.

Теперь мы попытаемся понять важные аргументы класса Tokenizer в строке 3 приведенного выше кода. Ниже приведен список аргументов:

Первый аргумент — это num_words. В нашем примере мы использовали num_words как 10. num_words — это не что иное, как размер вашего словарного запаса. Мы должны быть очень осторожны при выборе этого параметра, потому что это приведет к повышению производительности модели. По умолчанию значение num_words равно none. Лучшее значение для num_words — «len(tokenizer.word_index) + 1".

Второй - это фильтры, т.е. строка, в которой все элементы являются символами, которые будут отфильтрованы из входного текста. По умолчанию значением являются все знаки препинания, а также символы табуляции и разрывов строк, за вычетом символа '.

Третий нижний, то есть логическое значение, которое указывает, следует ли преобразовывать весь переданный текст в нижний регистр или нет. По умолчанию установлено значение True.

Четвертый разделен, что означает, что в данном тексте он будет разделен от указанного разделителя. Например, в предложении «Я/люблю/глубоко/изучение», если я выберу разделитель = «/», результатом будет ['Я', 'люблю', 'глубоко', 'обучение']

Пятый — char_level, по умолчанию — False. Это означает, что он спрашивает, хотим ли мы токенизировать на уровне символов или на уровне слов. Если мы укажем char_level как True, тогда наш пример будет токенизировать следующим образом: «I=1,l-2,o-3,v-4,e-5,m-6,a-7 и так далее». На высоком уровне операция токенизации будет выполняться на уровне персонажа, поэтому в общем случае нам нужно установить для этого параметра значение False.

Шестой — oov_tokens. Это один из самых важных аргументов, и по умолчанию он равен None, но предлагается указать «‹OOV›», потому что, когда мы будем выполнять вызов text_to-sequence для объекта токенизатора, который мы создали ранее, он заменит со словом «‹OOV›» ко всем словарным словам. text_to_sequence — это не что иное, как преобразование сгенерированных токенов в последовательность в соответствии с предложением, которое мы передали классу токенизатора. Это будет более понятно из приведенного ниже фрагмента.

Из приведенного выше примера мы можем ясно видеть, что последовательность текста, которую мы передали в Tokenizer, теперь преобразуется в последовательность чисел. Мы можем сослаться на предыдущий вывод фрагмента для сравнения.

Мы очень близки к тому, чтобы подготовить данные для ввода в наши слои нейронных сетей, поскольку мы поняли, как преобразовывать слова в токены и как преобразовывать последовательность слов в последовательность чисел.

Нам нужно знать одну очень важную вещь: наша нейронная сеть ожидает входную последовательность одинаковой длины, но реальный набор данных или предложение будут иметь другую длину последовательности в 99,9% случаев. Итак, наша последняя цель — сделать все предложения одинаковой длины, и мы можем достичь этого, используя логику keras «padding» и «truncating». для заполнения и усечения нам нужно импортировать класс «pad_sequences» из «keras.preprocessing.text» в keras.

Заполнение: мы можем добавить 0 в начале или в конце предложения, чтобы сделать все предложения одинаковой длины. мы использовали, чтобы найти самое длинное предложение и применить заполнение 0, чтобы соответствовать длине последовательности того же размера. Это можно сделать, используя приведенный ниже код

нам нужно указать последовательность и maxlen в качестве атрибута в классе pad_sequences. В нашем примере у нас есть 2 предложения, а длина самого длинного предложения равна 5, поэтому мы передали maxlen как 5 и получили выходное предложение, оба имеют длину 5. Это пример заполнения, теперь мы будем выглядеть усеченным.

Усечение. Предположим, у нас есть 200 предложений, одно предложение имеет длину 100, а все остальные 199 предложений имеют длину от 15 до 20. В этом случае заполнение не является хорошим выбором, поэтому мы пойдем на усечение, в котором мы укажем maxlen как 20 или 25. Как только мы указали maxlen как 25, все 199 предложений будут дополнены до длины 25, а самое длинное предложение будет усечен со 100 до 25. Таким образом, мы достигли одинаковой длины всей входной последовательности, и поздравляем, мы подготовили наш набор данных для ввода в наши нейронные сети. Ниже приведены несколько советов, о которых нам нужно помнить, чтобы иметь дело с дополнением и усечением.

  1. По умолчанию pad_sequences дополняет самую длинную последовательность
  2. Укажите maxlen, чтобы установить длину последовательностей
  3. По умолчанию последовательности дополняются или усекаются с начала последовательности

Поздравляем! Теперь мы шаг за шагом поняли концепции токенизации и, наконец, подготовили набор данных для ввода в нейронные сети. В следующем блоге мы шаг за шагом узнаем больше о встраивании и предварительно обученных встраиваниях, таких как word2vec, Glove и BERT.

Для получения дополнительной информации я предлагаю просмотреть официальную документацию keras. Если у вас есть какие-либо сомнения по поводу токенизации, прокомментируйте ниже.

Быть в курсе

предложение=[‘Я люблю глубокое обучение’, ‘Вам нравится глубокое обучение’]