Spec-Zone.ru › TensorFlow

tf.keras.layers.TextVectorization

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

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

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,
    encoding='utf-8',
    name=None,
    **kwargs
)

Используется в ноутбуках

Используется в руководстве Используется в учебниках
  • Работа с предобработочными слоями
  • Загрузка текста
  • Распределённое обучение с DTensors
  • Базовая классификация текста
  • Использование дополнительных признаков: предобработка признаков
  • Нейронный машинный перевод с вниманием

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

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

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

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

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

  1. Любая вызываемая функция может быть передана в этот слой, но если вы хотите сериализовать этот объект, вы должны передать только функции, зарегистрированные как сериализуемые Keras (подробнее см. keras.saving.register_keras_serializable).
  2. При использовании пользовательской вызываемой функции для standardize, данные, получаемые вызываемой функцией, будут точно такими же, как переданы в этот слой. Вызываемая функция должна вернуть тензор той же формы, что и входные данные.
  3. При использовании пользовательской вызываемой функции для split, данные, получаемые вызываемой функцией, будут иметь сжатый первый размер — вместо [["string to split"], ["another string to split"]], вызываемая функция увидит ["string to split", "another string to split"]. Вызываемая функция должна вернуть tf.Tensor типа string с первым измерением, содержащим разделенные токены — в этом примере мы должны увидеть что-то вроде [["string", "to", "split"], ["another", "string", "to", "split"]].
Примечание: Этот слой использует TensorFlow внутри. Он не может использоваться в составе скомпилированной вычислительной схемы модели с любым другим бэкэндом, кроме TensorFlow. Однако он может использоваться с любым бэкэндом при работе в режиме eager. Он также всегда может использоваться в составе конвейера предобработки входных данных с любым бэкэндом (вне самой модели), что и рекомендуется.
Примечание: Этот слой можно безопасно использовать внутри конвейера tf.data (независимо от используемого бэкенда).
Args
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. Если ragged равно True, то output_sequence_length всё ещё может усекать вывод.
    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". Поддерживается только с бэкэндом TensorFlow. Если True, возвращает RaggedTensor вместо плотного Tensor, где длина каждой последовательности может отличаться после разделения строк. По умолчанию False.
    sparse Булево значение. Применимо только к режимам вывода "multi_hot", "count" и "tf_idf". Поддерживается только с бэкэндом TensorFlow. Если True, возвращает SparseTensor вместо плотного Tensor. По умолчанию False.
    encoding Необязательно. Кодировка текста для интерпретации входных строк. По умолчанию "utf-8".

    Примеры:

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

    END_OF_DOCUMENT_MARKER
    max_tokens = 5000  # Maximum vocab size.
    max_len = 4  # Sequence length to pad the outputs to.
    # Create the layer.
    vectorize_layer = TextVectorization(
        max_tokens=max_tokens,
        output_mode='int',
        output_sequence_length=max_len)
    # Now that the vocab layer has been created, call `adapt` on the
    # list of strings to create the vocabulary.
    vectorize_layer.adapt(["foo bar", "bar baz", "baz bada boom"])
    # Now, the layer can map strings to integers -- you can use an
    # embedding layer to map these integers to learned embeddings.
    input_data = [["foo qux bar"], ["qux baz"]]
    vectorize_layer(input_data)
    array([[4, 1, 3, 0],
           [1, 2, 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 = keras.layers.TextVectorization(
        max_tokens=max_tokens,
        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']
    Атрибуты
    input Получает тензор(ы) входных данных символической операции.

    Возвращает только тензор(ы), соответствующие первому вызову операции.

    output Получает тензор(ы) выходных данных слоя.

    Возвращает только тензор(ы), соответствующие первому вызову операции.

    Методы

    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() также вычислит частоты документов для каждого токена в наборе данных.

    Аргументы
    data Данные для обучения. Их можно передать в виде пакетного tf.data.Dataset, списка строк или массива NumPy.
    steps Целое число или None. Общее количество шагов (пакетов образцов) для обработки. Если data — tf.data.Dataset, и steps — None, adapt() будет выполняться до исчерпания входных данных. При передаче бесконечно повторяющегося набора данных, необходимо указать аргумент steps. Этот аргумент не поддерживается с входными массивами или списками.

    finalize_state

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

    finalize_state()
    

    from_config

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

    @classmethod
    from_config(
        config
    )
    

    Создаёт слой по его конфигурации.

    Этот метод — обратный get_config, способный создать тот же слой из словаря конфигурации. Он не обрабатывает связность слоёв (обрабатывается сетью), ни веса (обрабатываются set_weights).

    Аргументы
    config Словарь Python, обычно результат вызова get_config.
    Возвращает
    Экземпляр слоя.

    get_vocabulary

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

    get_vocabulary(
        include_special_tokens=True
    )
    

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

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

    load_assets

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

    load_assets(
        dir_path
    )
    

    reset_state

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

    reset_state()
    

    save_assets

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

    save_assets(
        dir_path
    )
    

    set_vocabulary

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

    set_vocabulary(
        vocabulary, idf_weights=None
    )
    

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

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

    Аргументы
    vocabulary Массив или путь к текстовому файлу. Если передаётся массив, можно передать кортеж, список, 1D массив NumPy или 1D тензор, содержащий термины словаря. Если передаётся путь к файлу, файл должен содержать по одной строке на каждый термин в словаре.
    idf_weights Кортеж, список, 1D массив NumPy или 1D тензор весов обратной частоты документов, с длиной, равной длине словаря. Должен быть установлен, если output_mode — "tf_idf". В противном случае не должен быть установлен.

    symbolic_call

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

    symbolic_call(
        *args, **kwargs
    )
    

    update_state

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

    update_state(
        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/api_docs/python/tf/keras/layers/TextVectorization

    Spec-Zone.ru

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