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