tf.keras.layers.experimental.preprocessing.IntegerLookup
Преобразует целые числа из словаря в целочисленные индексы.
Наследуется от: PreprocessingLayer, Layer, Module
tf.keras.layers.experimental.preprocessing.IntegerLookup(
max_values=None, num_oov_indices=1, mask_value=0, oov_value=-1, vocabulary=None,
invert=False, **kwargs
)
Этот слой преобразует набор произвольных целых чисел в целочисленный вывод с помощью табличного поиска, с необязательной обработкой значений, отсутствующих в словаре.
Если необходимо, пользователь может вызвать метод adapt() этого слоя на наборе данных, который проанализирует набор данных, определит частоту отдельных строковых значений и создаст словарь из них. Этот словарь может иметь неограниченный размер или быть ограниченным, в зависимости от параметров конфигурации этого слоя; если уникальных значений во входных данных больше, чем максимальный размер словаря, для создания словаря будут использоваться наиболее часто встречающиеся термины.
Примеры:
Создание слоя поиска со словарем, известным заранее
В этом примере создается слой поиска со словарем, заданным заранее.
vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[2, 4, 5],
[5, 1, 3]])>
Создание слоя поиска со словарем, адаптированным к набору данных
В этом примере создается слой поиска, и словарь генерируется путём анализа набора данных.
data = tf.constant([[12, 1138, 42], [42, 1000, 36]]) layer = IntegerLookup() layer.adapt(data) layer.get_vocabulary() [0, -1, 42, 1138, 1000, 36, 12]
Обратите внимание, как значение маски 0 и значение OOV -1 были добавлены в словарь. Остальные значения отсортированы по частоте (1138, который встречается 2 раза, идёт первым), а затем по обратному порядку.
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup()
layer.adapt(data)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[6, 3, 2],
[2, 4, 5]])>
Поиск со множеством токенов OOV.
В этом примере показано, как использовать слой поиска со множеством токенов OOV. Когда слой создаётся с более чем одним токеном OOV, все значения OOV хешируются в количестве OOV-корзин, распределяя значения OOV детерминированным образом по набору.
vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [37, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab, num_oov_indices=2)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[3, 5, 6],
[2, 1, 4]])>
Обратите внимание, что выходной результат для значения OOV 37 равен 2, а для значения OOV 1000 равен 1. Индексы терминов из словаря увеличены на 1 по сравнению с предыдущими примерами (12 отображается как 3 и т. д.) для выделения места для дополнительных значений OOV.
Обратный поиск
В этом примере показано, как отобразить индексы на значения с помощью этого слоя. (Вы также можете использовать adapt() с inverse=True, но для простоты мы передадим словарь в этом примере.)
vocab = [12, 36, 1138, 42]
data = tf.constant([[1, 3, 4], [4, 5, 2]])
layer = IntegerLookup(vocabulary=vocab, invert=True)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[ 12, 1138, 42],
[ 42, -1, 36]])>
Обратите внимание, что целое число 5, которое не входит в словарь, возвращает токен OOV.
Прямой и обратный поиск
В этом примере показано, как использовать словарь стандартного слоя поиска для создания слоя обратного поиска.
vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])
layer = IntegerLookup(vocabulary=vocab)
i_layer = IntegerLookup(vocabulary=layer.get_vocabulary(), invert=True)
int_data = layer(data)
i_layer(int_data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[ 12, 1138, 42],
[ 42, -1, 36]])>
В этом примере входное значение 1000 привело к выводу -1, так как 1000 не было в словаре - оно было представлено как OOV, и все значения OOV возвращаются как -1 в обратном слое. Также обратите внимание, что для работы обратного поиска необходимо предварительно задать словарь forward слоя, либо напрямую, либо через fit(), прежде чем вызывать get_vocabulary().
| Атрибуты | |
|---|---|
max_values | Максимальный размер словаря для этого слоя. Если None, размер словаря не ограничен. Обратите внимание, что этот словарь включает значения OOV и маски, поэтому эффективное количество значений равно (max_values - num_oov_values - (1, если mask_token)). |
num_oov_indices | Количество значений, отсутствующих в словаре (OOV); по умолчанию
|
mask_value | Значение, представляющее входные данные маски; оно отображается на индекс 0. По умолчанию 0. Если установлено None, термин маски не будет добавлен, а значения OOV, если таковые имеются, будут проиндексированы с (0...num_oov_values) вместо (1...num_oov_values+1). |
oov_value | Значение, представляющее значение, отсутствующее в словаре (OOV). По умолчанию -1. |
vocabulary | Необязательный список значений или путь к текстовому файлу, содержащему словарь для загрузки в этот слой. Файл должен содержать по одному значению на строке. Если список или файл содержит один и тот же токен несколько раз, будет выброшено исключение. |
invert | Если True, этот слой будет отображать индексы на элементы словаря вместо отображения элементов словаря на индексы. |
Методы
adapt
adapt(
data, reset_state=True
)
Подстраивает состояние слоя предобработки под набор данных.
Переопределяет метод adapt по умолчанию, чтобы применить соответствующую предобработку к входным данным перед передачей в комбинатор.
| Аргументы | |
|---|---|
data | Данные для обучения. Может быть передано либо как набор данных tf.data, либо как массив numpy. |
reset_state | Необязательный аргумент, указывающий, следует ли очистить состояние слоя в начале вызова adapt. Это должно быть True для этого слоя, который не поддерживает повторные вызовы adapt. |
get_vocabulary
get_vocabulary()
set_vocabulary
set_vocabulary(
vocab
)
Устанавливает данные словаря для этого слоя с inverse=False.
Этот метод устанавливает словарь для этого слоя напрямую, вместо анализа набора данных через 'adapt'. Он должен использоваться всякий раз, когда информация о словаре уже известна. Если данные словаря уже присутствуют в слое, этот метод либо заменит их
| Аргументы | |
|---|---|
vocab | Массив строковых токенов. |
| Исключения | |
|---|---|
ValueError | Если входов слишком много, входы не совпадают или отсутствуют входные данные. |
vocab_size
vocab_size()
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/keras/layers/experimental/preprocessing/IntegerLookup