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
)
Используется в блокнотах
| Используется в руководстве | Используется в руководствах |
|---|---|
Этот слой предоставляет базовые возможности для работы с текстом в модели Keras. Он преобразует пакет строк (один пример = одна строка) либо в список индексов токенов (один пример = одномерный тензор целочисленных индексов токенов), либо в плотное представление (один пример = одномерный тензор значений с плавающей точкой, представляющих данные о токенах примера). Этот слой предназначен для обработки входных данных на естественном языке. Для обработки простых строковых входных данных (категориальных строк или предварительно токенизированных строк) см. kers_core.layers.StringLookup.
Словарь слоя необходимо либо передать при его создании, либо получить с помощью adapt(). При адаптации этот слой анализирует набор данных, определяет частоту отдельных строковых значений и формирует из них словарь. Размер словаря может быть неограниченным или ограничиваться параметрами конфигурации слоя; если во входных данных больше уникальных значений, чем допускает максимальный размер словаря, для его создания используются наиболее частотные термины.
Обработка каждого примера включает следующие этапы:
- Нормализация каждого примера (обычно приведение к нижнему регистру и удаление знаков препинания)
- Разбиение каждого примера на подстроки (обычно слова)
- Объединение подстрок в токены (обычно n-граммы)
- Индексация токенов (сопоставление каждому токену уникального целочисленного значения)
- Преобразование каждого примера с помощью этого индекса в вектор целых чисел или плотный вектор значений с плавающей точкой.
Некоторые примечания о передаче вызываемых объектов для настройки разбиения и нормализации в этом слое:
- Этому слою можно передать любую вызываемую функцию, но для сериализации объекта следует передавать только функции, зарегистрированные как сериализуемые объекты Keras (подробности см. в
keras.saving.register_keras_serializable). - При использовании пользовательской вызываемой функции для
standardizeданные, полученные этой функцией, будут точно такими же, какими они были переданы слою. Функция должна возвращать тензор той же формы, что и входные данные. - При использовании пользовательской вызываемой функции для
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 | Необязательное указание способа нормализации входного текста. Возможные значения:
|
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