В этом посте в блоге мы будем стремиться узнать, как реализовывать токенизацию и последовательность, важные шаги предварительной обработки текста, в Tensorflow.
Контур
- Введение в токенизатор
- Понимание секвенирования
Введение в токенизатор
Токенизация – это процесс разделения текста на более мелкие единицы, такие как предложения, слова или подсловки. В этом разделе мы увидим, как мы можем предварительно обработать текстовый корпус, токенизируя текст в слова в Tensorflow. Мы будем использовать API KERAS с рецензией Tensorflow; Приведенный ниже фрагмент кода показывает необходимый импорт.
import tensorflow as tf from tensorflow import keras from tensorflow.keras.preprocessing.text import Tokenizer
И VOILA! 🎉 У нас есть все модули импортированы! Давайте инициализируем список предложений, которые мы будем токенить.
sentences = [ 'Life is so beautiful', 'Hope keeps us going', 'Let us celebrate life!' ]
Следующим шагом является создание токена и позвонить в fit_on_texts
метод.
tokenizer = Tokenizer() tokenizer.fit_on_texts(sentences)
Ну, когда текстовый корпус очень большой, мы можем указать дополнительные num_words
аргумент, чтобы получить самые частые слова. Например, если бы мы хотели получить 100 самых частых слов в корпусе, то Tokenizer (num_words = 100)
Только это!
Чтобы узнать, как были созданы эти токены, и индексы присваиваются словами, мы можем использовать Word_index
атрибут.
word_index = tokenizer.word_index print(word_index) # Here's the output: {'life': 1, 'us': 2, 'is': 3, 'so': 4, 'beautiful': 5, 'hope': 6, 'keeps': 7, 'going': 8, 'let': 9, 'celebrate': 10}
Ну, пока так хорошо! Но что происходит, когда тестовые данные содержат слова, которые мы не учитывали в словаре? 🤔
test_data = [ 'Our life is to celebrate', 'Hoping for the best!', 'Let peace prevail everywhere' ]
Мы представили предложения в test_data
которые содержат слова, которые не находятся в нашем более раннем словаре.
Как мы учитываем такие слова, которые не в словаре? Мы можем определить аргумент oov_token
Для учета такого словарь (ОВ) жетонов.
tokenizer = Tokenizer(oov_token="") The word_index now returns the following output: {' ': 1, 'life': 2, 'us': 3, 'is': 4, 'so': 5, 'beautiful': 6, 'hope': 7, 'keeps': 8, 'going': 9, 'let': 10, 'celebrate': 11}
Понимание секвенирования
В этом разделе мы построим на токеризованный текст, используя эти генерируемые токены для преобразования текста в последовательность.
Мы можем получить последовательность, позвонив Texts_to_seachences
метод.
sequences = tokenizer.texts_to_sequences(sentences) #Here's the output: [[2, 4, 5, 6], [7, 8, 3, 9], [10, 3, 11, 2]]
Давайте теперь сделаем шаг назад. Что происходит, когда предложения разной длины? Тогда нам придется преобразовать все их на ту же длину.
Мы импортируем PAD_SESCENCENS
Функция для прокладки наших последовательностей и посмотрите на мягкие последовательности.
from tensorflow.keras.preprocessing.sequence import pad_sequences padded = pad_sequences(sequences) print("\nPadded Sequences:") print(padded) # Output Padded Sequences: [[ 2 4 5 6] [ 7 8 3 9] [10 3 11 2]]
По умолчанию Длина вспышки самого длинного предложения
Отказ Однако мы можем ограничить максимальную длину, явно установив Maxlen
аргумент
padded = pad_sequences(sequences,maxlen=5) print("\nPadded Sequences:") print(padded) # Output Padded Sequences: [[ 0 2 4 5 6] [ 0 7 8 3 9] [ 0 10 3 11 2]]
Теперь давайте прокладываем наши тестовые последовательности после преобразования их в последовательности.
test_seq = tokenizer.texts_to_sequences(test_data) print("\nTest Sequence = ", test_seq) padded = pad_sequences(test_seq, maxlen=10) print("\nPadded Test Sequence: ") print(padded) And here's our output. # Output Test Sequence = [[1, 2, 4, 1, 11], [1, 1, 1, 1], [10, 1, 1, 1]] Padded Test Sequence: [[ 0 0 0 0 0 1 2 4 1 11] [ 0 0 0 0 0 0 1 1 1 1] [ 0 0 0 0 0 0 10 1 1 1]]
Мы видим, что все мягкие последовательности имеют длину Maxlen
и сложены 0,2 в начале. Что если мы хотели бы добавить трейлинг нули вместо в начале? Нам нужно только указать padding = 'post'
padded = pad_sequences(test_seq, maxlen=10, padding='post') print("\nPadded Test Sequence: ") print(padded) # Output Padded Test Sequence: [[ 1 2 4 1 11 0 0 0 0 0] [ 1 1 1 1 0 0 0 0 0 0] [10 1 1 1 0 0 0 0 0 0]]
До сих пор ни одно из предложений не имеет длины, превышающей Maxlen
, но на практике у нас может быть приговоры, которые намного дольше, чем Maxlen
Отказ В этом случае мы должны обрезать предложения и могут установить аргумент усечение = «пост»
или 'pre'
отбросить первые несколько или последние несколько слов, которые превышают указанный Maxlen
Отказ
Счастливое обучение и кодирование! 🎈✨🎉👩🏽💻
Ссылка
Обработка натурального языка в Tensorflow на Coursera
Обложка Изображение: Фото Сьюзен q Инь на Бессмысленно
Оригинал: “https://dev.to/balapriya/tokenization-and-sequencing-in-tensorflow-3p0n”