Рубрики
Без рубрики

Токенизация и секвенирование в Tensorflow [Руководство]

В этом посте в блоге мы будем стремиться узнать, как реализовать токенизацию и секвенирование, важно … Теги с Python, NLP, MachineLearning.

В этом посте в блоге мы будем стремиться узнать, как реализовывать токенизацию и последовательность, важные шаги предварительной обработки текста, в 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”