Spec-Zone.ru › TensorFlow 2.9

tf.keras.layers.TextVectorization

Слой предобработки, который отображает текстовые признаки в целые последовательности.

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

Просмотр псевдонимов

Основные псевдонимы

tf.keras.layers.experimental.preprocessing.TextVectorization

tf.keras.layers.TextVectorization(
    max_tokens=None,
    standardize='lower_and_strip_punctuation',
    split='whitespace',
    ngrams=None,
    output_mode='int',
    output_sequence_length=None,
    pad_to_max_tokens=False,
    vocabulary=None,
    idf_weights=None,
    sparse=False,
    ragged=False,
    **kwargs
)

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

Словарный запас для слоя должен быть либо задан при создании, либо выучен с помощью 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().

Обзор и полный список слоев предобработки см. в руководстве по предобработке руководства.

Аргументы
max_tokens Максимальный размер словаря для этого слоя. Это следует указывать только при адаптации словаря или при установке pad_to_max_tokens=True. Обратите внимание, что этот словарь содержит 1 токен OOV, поэтому эффективное количество токенов составляет (max_tokens - 1 - (1 if output_mode == "int" else 0)).
standardize Необязательная спецификация для применения стандартизации к входному тексту. Значения могут быть:
  • None: Отсутствует стандартизация.
  • "lower_and_strip_punctuation": Текст будет приведен к нижнему регистру, а все знаки препинания будут удалены.
  • "lower": Текст будет приведен к нижнему регистру.
  • "strip_punctuation": Все знаки препинания будут удалены.
  • Вызываемая функция: входы будут переданы в вызываемую функцию, которая должна выполнить стандартизацию и вернуть результат.
split Необязательная спецификация для разделения входного текста. Значения могут быть:
  • None: Отсутствует разделение.
  • "whitespace": Разделение по пробелам.
  • "character": Разделение по каждому символу Юникода.
  • Вызываемая функция: стандартизированные входные данные будут переданы вызываемой функции, которая должна выполнить разделение и вернуть результат.
  • ngrams Необязательная спецификация для создания n-грамм из, возможно, разделенного входного текста. Значения могут быть None, целым числом или кортежем целых чисел; передача целого числа создаст n-граммы до этого целого числа, а передача кортежа целых чисел создаст n-граммы для указанных значений в кортеже. Передача None означает, что n-граммы не будут созданы.
    output_mode Необязательная спецификация для вывода слоя. Значения могут быть "int", "multi_hot", "count" или "tf_idf", настраивая слой следующим образом:
    • "int": Вывод целых индексов, по одному цельному индексу на каждый разделенный токен строки. При output_mode == "int", 0 зарезервирован для замаскированных позиций; это уменьшает размер словаря до max_tokens - 2 вместо max_tokens - 1.
    • "multi_hot": Вывод одного целочисленного массива на пакет, размером либо vocab_size, либо max_tokens, содержащего 1 в всех элементах, где токен, сопоставленный с этим индексом, встречается по крайней мере один раз в элементе пакета.
    • "count": Как "multi_hot", но целочисленный массив содержит количество раз, которое токен в этом индексе встречался в элементе пакета.
    • "tf_idf": Как "multi_hot", но применяется алгоритм TF-IDF для поиска значения в каждом слоте токена. Для вывода "int" поддерживается любая форма входных и выходных данных. Для всех других режимов вывода в настоящее время поддерживаются только входные данные ранга 1 (и выходные данные ранга 2 после разделения).
    output_sequence_length Действительно только в режиме INT. Если установлено, выходные данные будут иметь время размерность, заполненную или усеченную ровно до output_sequence_length значений, что приведет к тензору формы (batch_size, output_sequence_length) независимо от того, сколько токенов возникло в результате шага разделения. По умолчанию None.
    pad_to_max_tokens Действительно только в режимах "multi_hot", "count", и "tf_idf". Если True, выходные данные будут заполнены по оси признаков до max_tokens даже если количество уникальных токенов в словаре меньше max_tokens, что приведет к тензору формы (batch_size, max_tokens) независимо от размера словаря. По умолчанию False.
    vocabulary Необязательно. Массив строк или путь к текстовому файлу. Если передается массив, можно передать кортеж, список, 1D массив NumPy или 1D тензор, содержащий строковые термины словаря. Если передается путь к файлу, файл должен содержать по одной строке на термин в словаре. Если этот аргумент задан, нет необходимости adapt() слоя.
    idf_weights Действительно только при output_mode равно "tf_idf". Кортеж, список, 1D массив NumPy или 1D тензор такой же длины, как словарь, содержащий весовые коэффициенты обратной частоты документов с плавающей точкой, которые будут умножаться на количество терминов на образец для получения конечного веса tf_idf. Если аргумент vocabulary задан, и output_mode равно "tf_idf", этот аргумент должен быть предоставлен.
    ragged Булево значение. Применимо только к режиму вывода "int". Если True, возвращает RaggedTensor вместо плотного Tensor, где у каждой последовательности может быть разная длина после разделения строк. По умолчанию False.
    sparse Булево значение. Применимо только к режиму вывода "multi_hot", "count", и "tf_idf". Если True, возвращает SparseTensor вместо плотного Tensor. По умолчанию False.

    Пример:

    В этом примере создается слой 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.
    
    # Create the layer.
    vectorize_layer = tf.keras.layers.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__() слоя.

    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 = tf.keras.layers.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']
    
    Атрибуты
    is_adapted Была ли уже подгонка слоя к данным.

    Методы

    adapt

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

    adapt(
        data, batch_size=None, steps=None
    )
    

    Вычисляет словарь строковых терминов из токенов в наборе данных.

    Вызов adapt() на слое TextVectorization является альтернативой передаче предварительно вычисленного словаря при создании через аргумент vocabulary. Слой TextVectorization всегда должен быть либо адаптирован к набору данных, либо должен быть снабжен словарем.

    Во время adapt(), слой создаст словарь всех строковых токенов, встречающихся в наборе данных, отсортированных по количеству вхождений, при этом совпадения будут решаться в порядке сортировки токенов (от большего к меньшему). В конце adapt(), если max_tokens установлен, словарь будет усечен до размера max_tokens. Например, адаптация слоя с max_tokens=1000 вычислит 1000 самых частотных токенов, встречающихся в наборе данных. Если output_mode='tf-idf', adapt() также выучит частоты документов каждого токена в наборе данных.

    Для повышения эффективности TextVectorization в любом контексте распределения, словарь сохраняется статичным относительно любых скомпилированных tf.Graph, которые вызывают слой. В результате, если слой будет адаптирован второй раз, любые модели, использующие этот слой, должны быть перекомпилированы. Для получения дополнительной информации см. tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt.

    adapt() предназначен только для использования в качестве инструмента на одной машине для вычисления состояния слоя. Для анализа набора данных, который не может поместиться на одной машине, см. Tensorflow Transform для многомашинного решения, основанного на map-reduce.

    Аргументы
    data Данные для обучения. Можно передать в виде tf.data.Dataset, или как массив numpy.
    batch_size Целое число или None. Количество выборок на обновление состояния. Если не указано, batch_size по умолчанию равно 32. Не указывайте batch_size если ваши данные представлены в виде наборов данных, генераторов или экземпляров keras.utils.Sequence (поскольку они генерируют пакеты).
    steps Целое число или None. Общее количество шагов (пакетов выборок). При обучении с входными тензорами, такими как тензоры данных TensorFlow, значение по умолчанию None равно количеству выборок в вашем наборе данных, деленному на размер пакета, или 1, если это невозможно определить. Если x является набором данных tf.data, а 'steps' равно None, эпоха будет выполняться до тех пор, пока входной набор данных не будет исчерпан. При передаче бесконечно повторяющегося набора данных необходимо указать аргумент steps . Этот аргумент не поддерживается при вводе массивов.

    compile

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

    compile(
        run_eagerly=None, steps_per_execution=None
    )
    

    Настраивает слой для adapt.

    Аргументы
    run_eagerly Булево значение. По умолчанию False. Если True, логика этого Model не будет обернута в tf.function. Рекомендуется оставить это значение как None, если ваш Model не может быть запущен внутри tf.function. steps_per_execution: Целое число. По умолчанию 1. Количество пакетов, которые будут выполняться во время каждого вызова tf.function. Выполнение нескольких пакетов внутри одного вызова tf.function может значительно улучшить производительность на TPU или небольших моделях с большой нагрузкой Python.

    get_vocabulary

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

    get_vocabulary(
        include_special_tokens=True
    )
    

    Возвращает текущий словарь слоя.

    Аргументы
    include_special_tokens Если True, возвращаемый словарь будет включать маркеры заполнения и OOV, и индекс термина в словаре будет равен индексу термина при вызове слоя. Если False, возвращаемый словарь не будет включать маркеры заполнения или OOV.

    reset_state

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

    reset_state()
    

    Сбрасывает статистику слоя предобработки.

    set_vocabulary

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

    set_vocabulary(
        vocabulary, idf_weights=None
    )
    

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

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

    Аргументы
    vocabulary Массив или путь к текстовому файлу. Если передается массив, можно передать кортеж, список, одномерный массив numpy или одномерный тензор, содержащий термины словаря. Если передается путь к файлу, файл должен содержать по одной строке на каждый термин в словаре.
    idf_weights Кортеж, список, одномерный массив numpy или одномерный тензор весов обратной частоты документов с длиной, равной длине словаря. Должен быть установлен, если output_mode равно "tf_idf". В противном случае не должен устанавливаться.
    Исключения
    ValueError Если количество входов слишком велико, входы не совпадают или отсутствуют входные данные.
    RuntimeError Если словарь не может быть установлен при вызове этой функции. Это происходит, когда "multi_hot", "count", и режимы "tf_idf", если pad_to_max_tokens равно False, и сам слой уже был вызван.

    update_state

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

    update_state(
        data
    )
    

    Накапливает статистику для слоя предобработки.

    Аргументы
    data Мини-пакет входов в слой.

    vocabulary_size

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

    vocabulary_size()
    

    Получает текущий размер словаря слоя.

    Возвращает
    Целочисленный размер словаря, включая необязательные индексы маски и OOV.

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

    Spec-Zone.ru

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