Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.experimental.preprocessing.TextVectorization

Слой векторизации текста.

Наследуется от: PreprocessingLayer, Layer, Module

tf.keras.layers.experimental.preprocessing.TextVectorization(
    max_tokens=None, standardize=LOWER_AND_STRIP_PUNCTUATION,
    split=SPLIT_ON_WHITESPACE, ngrams=None, output_mode=INT,
    output_sequence_length=None, pad_to_max_tokens=True, vocabulary=None, **kwargs
)

Этот слой предоставляет базовые возможности управления текстом в модели Keras. Он преобразует пакет строк (один образец = одна строка) либо в список индексов токенов (один образец = 1D тензор целочисленных индексов токенов), либо в плотное представление (один образец = 1D тензор числовых значений, представляющих данные о токенах образца).

При необходимости пользователь может вызвать метод adapt() этого слоя на наборе данных. Когда этот слой адаптирован, он проанализирует набор данных, определит частоту отдельных значений строк и создаст «словарь» из них. Этот словарь может иметь неограниченный размер или быть ограниченным, в зависимости от параметров конфигурации этого слоя; если уникальных значений ввода больше, чем максимальный размер словаря, для создания словаря будут использоваться наиболее частые термины.

Обработка каждого образца включает следующие шаги:

  1. стандартизация каждого образца (обычно приведение к нижнему регистру + удаление знаков пунктуации)
  2. разделение каждого образца на подстроки (обычно слова)
  3. объединение подстрок в токены (обычно n-граммы)
  4. индексация токенов (сопоставление уникального целочисленного значения с каждым токеном)
  5. преобразование каждого образца с использованием этого индекса, либо в вектор целых чисел, либо в плотный вектор с плавающей запятой.

Некоторые замечания по передаче вызываемых объектов для настройки разделения и нормализации для этого слоя:

  1. Любой вызываемый объект может быть передан в этот слой, но если вы хотите сериализовать этот объект, вы должны передавать только функции, которые являются зарегистрированными сериализуемыми объектами Keras (см. tf.keras.utils.register_keras_serializable для получения дополнительных сведений).
  2. При использовании пользовательского вызываемого объекта для standardize, данные, полученные вызываемым объектом, будут точно такими же, как переданы в этот слой. Вызываемый объект должен вернуть тензор той же формы, что и вход.
  3. При использовании пользовательского вызываемого объекта для split, данные, полученные вызываемым объектом, будут иметь сжатый первый размер — вместо [["string to split"], ["another string to split"]], вызываемый объект увидит ["string to split", "another string to split"]. Вызываемый объект должен вернуть тензор с первым размером, содержащим разделенные токены — в этом примере мы должны увидеть что-то вроде [["string", "to", "split], ["another", "string", "to", "split"]]. Это делает вызываемый объект совместимым с tf.strings.split().

Пример:

В этом примере создаётся слой TextVectorization, который приводит текст к нижнему регистру, разделяет по пробелам, удаляет знаки препинания и выводит целочисленные индексы словаря.

text_dataset = tf.data.Dataset.from_tensor_slices(["foo", "bar", "baz"])
max_features = 5000  # Maximum vocab size.
max_len = 4  # Sequence length to pad the outputs to.
embedding_dims = 2

# Create the layer.
vectorize_layer = TextVectorization(
 max_tokens=max_features,
 output_mode='int',
 output_sequence_length=max_len)

# Now that the vocab layer has been created, call `adapt` on the text-only
# dataset to create the vocabulary. You don't have to batch, but for large
# datasets this means we're not keeping spare copies of the dataset.
vectorize_layer.adapt(text_dataset.batch(64))

# Create the model that uses the vectorize text layer
model = tf.keras.models.Sequential()

# Start by creating an explicit input layer. It needs to have a shape of
# (1,) (because we need to guarantee that there is exactly one string
# input per batch), and the dtype needs to be 'string'.
model.add(tf.keras.Input(shape=(1,), dtype=tf.string))

# The first layer in our model is the vectorization layer. After this
# layer, we have a tensor of shape (batch_size, max_len) containing vocab
# indices.
model.add(vectorize_layer)

# Now, the model can map strings to integers, and you can add an embedding
# layer to map these integers to learned embeddings.
input_data = [["foo qux bar"], ["qux baz"]]
model.predict(input_data)
array([[2, 1, 4, 0],
       [1, 3, 0, 0]])

Пример:

В этом примере создаётся слой TextVectorization путём передачи списка терминов словаря в метод init слоя.

input_array = np.array([["earth", "wind", "and", "fire"], ["fire", "and", "earth", "michigan"]]) expected_output = [[2, 3, 4, 5], [5, 4, 2, 1]]

input_data = keras.Input(shape=(None,), dtype=dtypes.string) layer = get_layer_class()( max_tokens=None, standardize=None, split=None, output_mode=text_vectorization.INT, vocabulary=vocab_data) int_data = layer(input_data) model = keras.Model(inputs=input_data, outputs=int_data)

output_dataset = model.predict(input_array)

>>> vocab_data = ["earth", "wind", "and", "fire"]
>>> max_len = 4  # Sequence length to pad the outputs to.
>>>
>>> # Create the layer, passing the vocab directly. You can also pass the
>>> # vocabulary arg a path to a file containing one vocabulary word per
>>> # line.
>>> vectorize_layer = TextVectorization(
...  max_tokens=max_features,
...  output_mode='int',
...  output_sequence_length=max_len,
...  vocabulary=vocab_data)
>>>
>>> # Because we've passed the vocabulary directly, we don't need to adapt
>>> # the layer - the vocabulary is already set. The vocabulary contains the
>>> # padding token ('') and OOV token ('[UNK]') as well as the passed tokens.
>>> vectorize_layer.get_vocabulary()
['', '[UNK]', 'earth', 'wind', 'and', 'fire']
Атрибуты
max_tokens Максимальный размер словаря для этого слоя. Если None, размер словаря не ограничен. Обратите внимание, что этот словарь содержит 1 токен OOV, поэтому эффективное количество токенов равно (max_tokens - 1 - (1 if output == "int" else 0)).
standardize Необязательная спецификация для стандартизации, применяемой к входному тексту. Значения могут быть None (нет стандартизации), 'lower_and_strip_punctuation' (приведение к нижнему регистру и удаление знаков пунктуации) или Callable. По умолчанию — 'lower_and_strip_punctuation'.
split Необязательная спецификация для разделения входного текста. Значения могут быть None (нет разделения), 'whitespace' (разделение по пробелам ASCII) или Callable. По умолчанию — 'whitespace'.
ngrams Необязательная спецификация для создания n-грамм из входного текста (возможно разделенного). Значения могут быть None, целое число или кортеж целых чисел; передача целого числа создаст n-граммы до этого числа, а передача кортежа целых чисел создаст n-граммы для указанных значений в кортеже. Передача None означает, что n-граммы не будут создаваться.
output_mode Необязательная спецификация для выходных данных слоя. Значения могут быть "int", "binary", "count" или "tf-idf", настраивая слой следующим образом: "int": Выводит целочисленные индексы, по одному целочисленному индексу на каждый токен разделенной строки. При output == "int" 0 зарезервирован для замаскированных позиций; это уменьшает размер словаря до max_tokens-2 вместо max_tokens-1 "binary": Выводит один целочисленный массив на пакет, размером vocab_size или max_tokens, содержащий 1 в всех элементах, где токен, сопоставленный с этим индексом, встречается хотя бы один раз в элементе пакета. "count": Как "binary", но целочисленный массив содержит количество раз, когда токен в этом индексе встречался в элементе пакета. "tf-idf": Как "binary", но применяется алгоритм TF-IDF для нахождения значения в каждом слоте токена.
output_sequence_length Действительно только в режиме INT. Если установлено, размер выходного тензора по времени будет заполнен или обрезан до ровно output_sequence_length значений, что приводит к тензору формы [batch_size, output_sequence_length] независимо от того, сколько токенов получилось из шага разделения. По умолчанию None.
pad_to_max_tokens Действительно только в режимах "binary", "count" и "tf-idf". Если True, размер выходного тензора по оси признаков будет заполнен до max_tokens, даже если количество уникальных токенов в словаре меньше max_tokens, что приводит к тензору формы [batch_size, max_tokens] независимо от размера словаря. По умолчанию True.
vocabulary Необязательный список терминов словаря или путь к текстовому файлу, содержащему словарь для загрузки в этот слой. Файл должен содержать по одному токену на строку. Если список или файл содержит один и тот же токен несколько раз, будет выброшено исключение.

Методы

adapt

Просмотреть исходный код

adapt(
    data, reset_state=True
)

Подстраивает состояние слоя предобработки под набор данных.

Переопределяет метод adapt по умолчанию, чтобы применить соответствующую предобработку к входу перед передачей в комбинатор.

Аргументы
data Данные для обучения. Их можно передавать как tf.data Dataset, как NumPy массив, строковый тензор или как список текстов.
reset_state Необязательный аргумент, указывающий, следует ли очистить состояние слоя в начале вызова adapt. Для этого слоя это должно быть True, так как он не поддерживает повторные вызовы adapt.

get_vocabulary

Просмотреть исходный код

get_vocabulary()

set_vocabulary

Просмотреть исходный код

set_vocabulary(
    vocab, df_data=None, oov_df_value=None
)

Устанавливает данные словаря (и, необязательно, частоты документов) для этого слоя.

Этот метод напрямую устанавливает данные словаря и DF для этого слоя вместо анализа набора данных с помощью «adapt». Он должен использоваться всякий раз, когда информация о словаре (и, необязательно, частоте документов) уже известна. Если данные словаря уже присутствуют в слое, этот метод заменит их.

Аргументы
vocab Массив строковых токенов.
df_data Массив данных частоты документов. Необходим только если тип вывода слоя — TFIDF.
oov_df_value Частота документов для токена OOV. Требуется только если тип вывода — TFIDF.
Исключения
ValueError Если ввода слишком много, вводы не совпадают или отсутствуют входные данные.
RuntimeError Если словарь не может быть установлен при вызове этой функции. Это происходит, когда режимы "binary", "count" и "tfidf", если "pad_to_max_tokens" — False, и сам слой уже был вызван.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/keras/layers/experimental/preprocessing/TextVectorization

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API