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. Он преобразует пакет строк (один пример = одна строка) либо в список индексов токенов (один пример = одномерный тензор целочисленных индексов токенов), либо в плотное представление (один пример = одномерный тензор значений с плавающей точкой, представляющих данные о токенах примера). Этот слой предназначен для обработки входных данных на естественном языке. Для обработки простых строковых входных данных (категориальных строк или предварительно токенизированных строк) см. kers_core.layers.StringLookup.

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

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

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

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

  1. Этому слою можно передать любую вызываемую функцию, но для сериализации объекта следует передавать только функции, зарегистрированные как сериализуемые объекты Keras (подробности см. в keras.saving.register_keras_serializable).
  2. При использовании пользовательской вызываемой функции для standardize данные, полученные этой функцией, будут точно такими же, какими они были переданы слою. Функция должна возвращать тензор той же формы, что и входные данные.
  3. При использовании пользовательской вызываемой функции для split из полученных ею данных будет удалено измерение 1-го ранга: вместо [["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 (независимо от используемого бэкенда).
Аргументы
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": разбиение по каждому символу Unicode.
  • Вызываемая функция: нормализованные входные данные передаются вызываемой функции, которая должна выполнить разбиение и вернуть результат.
  • 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 Необязательный параметр. Массив строк или путь к текстовому файлу в виде строки. Если передан массив, это может быть кортеж, список, одномерный массив NumPy или одномерный тензор, содержащий термины словаря. Если передан путь к файлу, файл должен содержать по одному термину словаря в каждой строке. Если задан этот аргумент, адаптировать слой с помощью adapt() не требуется.
    idf_weights Допустимо только при значении output_mode, равном "tf_idf". Кортеж, список, одномерный массив NumPy или одномерный тензор той же длины, что и словарь, содержащий веса обратной частоты документа с плавающей точкой. Они умножаются на количество терминов для каждого образца, чтобы получить итоговый вес 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, который приводит текст к нижнему регистру, разбивает его по пробельным символам, удаляет знаки препинания и возвращает целочисленные индексы словаря.

    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 и позволяет создать такой же слой из словаря конфигурации. Он не обрабатывает связи между слоями (за это отвечает Network) и веса (за них отвечает 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 Массив или путь к текстовому файлу в виде строки. Если передан массив, это может быть кортеж, список, одномерный массив NumPy или одномерный тензор, содержащий термины словаря. Если передан путь к файлу, файл должен содержать по одному термину словаря в каждой строке.
    idf_weights Кортеж, список, одномерный массив NumPy или одномерный тензор весов обратной частоты документа, длина которого совпадает с длиной словаря. Необходимо задать, если 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