Spec-Zone.ru › TensorFlow 2.3

tf.compat.v1.keras.layers.experimental.preprocessing.StringLookup

Преобразует строки из словаря в целочисленные индексы.

Наследуется от: StringLookup

tf.compat.v1.keras.layers.experimental.preprocessing.StringLookup(
    max_tokens=None, num_oov_indices=1, mask_token='', oov_token='[UNK]',
    vocabulary=None, encoding=None, invert=False, **kwargs
)

Этот слой преобразует набор произвольных строк в целочисленный выходной результат с помощью поиска по таблице, с необязательной обработкой вне словаря.

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

Примеры:

Создание слоя поиска со известным словарем

В этом примере создается слой поиска со предопределённым словарем.

vocab = ["a", "b", "c", "d"]
data = tf.constant([["a", "c", "d"], ["d", "z", "b"]])
layer = StringLookup(vocabulary=vocab)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[2, 4, 5],
       [5, 1, 3]])>

Создание слоя поиска с адаптированным словарем

В этом примере создаётся слой поиска и генерируется словарь путём анализа набора данных.

data = tf.constant([["a", "c", "d"], ["d", "z", "b"]])
layer = StringLookup()
layer.adapt(data)
layer.get_vocabulary()
['', '[UNK]', 'd', 'z', 'c', 'b', 'a']

Обратите внимание, как маркер маски '' и маркер OOV [UNK] были добавлены в словарь. Остальные токены отсортированы по частоте ('d', который встречается 2 раза, стоит первым), а затем по обратному порядку сортировки.

data = tf.constant([["a", "c", "d"], ["d", "z", "b"]])
layer = StringLookup()
layer.adapt(data)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[6, 4, 2],
       [2, 3, 5]])>

Поиск с несколькими токенами OOV.

В этом примере показано, как использовать слой поиска с несколькими токенами OOV. При создании слоя с более чем одним токеном OOV, любые значения OOV хэшируются в число ведер OOV, распределяя значения OOV детерминированным способом по набору.

vocab = ["a", "b", "c", "d"]
data = tf.constant([["a", "c", "d"], ["m", "z", "b"]])
layer = StringLookup(vocabulary=vocab, num_oov_indices=2)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[3, 5, 6],
       [1, 2, 4]])>

Обратите внимание, что выходное значение для значения OOV 'm' равно 1, а для значения OOV 'z' равно 2. Значения в словаре имеют выходной индекс, увеличенный на 1 по сравнению с предыдущими примерами (a отображается в 3 и т.д.), чтобы освободить место для дополнительных значений OOV.

Обратный поиск

В этом примере показано, как отображать индексы в строки, используя этот слой. (Вы также можете использовать adapt() с inverse=True, но для простоты мы передадим словарь в этом примере.)

vocab = ["a", "b", "c", "d"]
data = tf.constant([[1, 3, 4], [4, 5, 2]])
layer = StringLookup(vocabulary=vocab, invert=True)
layer(data)
<tf.Tensor: shape=(2, 3), dtype=string, numpy=
array([[b'a', b'c', b'd'],
       [b'd', b'[UNK]', b'b']], dtype=object)>

Обратите внимание, что целое число 5, которое выходит за пределы области словаря, возвращает маркер OOV.

Обратные и прямые пары поиска

В этом примере показано, как использовать словарь стандартного слоя поиска для создания обратного слоя поиска.

vocab = ["a", "b", "c", "d"]
data = tf.constant([["a", "c", "d"], ["d", "z", "b"]])
layer = StringLookup(vocabulary=vocab)
i_layer = StringLookup(vocabulary=layer.get_vocabulary(), invert=True)
int_data = layer(data)
i_layer(int_data)
<tf.Tensor: shape=(2, 3), dtype=string, numpy=
array([[b'a', b'c', b'd'],
       [b'd', b'[UNK]', b'b']], dtype=object)>

В этом примере входное значение 'z' привело к выводу '[UNK]', так как 1000 не было в словаре — оно было представлено как OOV, а все значения OOV возвращаются как '[OOV}' в обратном слое. Также обратите внимание, что для работы обратного поиска необходимо предварительно установить словарь прямого слоя либо напрямую, либо через fit(), перед вызовом get_vocabulary().

Атрибуты
max_tokens Максимальный размер словаря для этого слоя. Если None, размер словаря не ограничен. Обратите внимание, что этот словарь включает маркеры OOV и маски, поэтому эффективное количество токенов равно (max_tokens - num_oov_indices - (1 if mask_token else 0))
num_oov_indices Количество токенов вне словаря, используемых; по умолчанию
  1. Если это значение больше 1, OOV входные данные хэшируются для определения их значения OOV; если это значение равно 0, при передаче OOV входа, в выходном тензоре будет возвращено '-1'. (Обратите внимание, что, поскольку значение равно -1, а не 0, это позволит вам эффективно отбрасывать OOV значения из категорических кодировок.)
mask_token Токен, представляющий значения маски, который отображается в индекс 0. По умолчанию пустая строка "". Если установлено None, термин маски не будет добавлен, а токены OOV, если таковые имеются, будут индексированы с (0...num_oov_indices) вместо (1...num_oov_indices+1).
oov_token Токен, представляющий значение вне словаря. По умолчанию "[UNK]".
vocabulary Необязательный список терминов словаря или путь к текстовому файлу, содержащему словарь для загрузки в этот слой. Файл должен содержать по одному токену в строке. Если список или файл содержит один и тот же токен несколько раз, будет выдано сообщение об ошибке.
encoding Кодировка Python-строки для использования. По умолчанию 'utf-8'.
invert Если True, этот слой будет отображать индексы в элементы словаря вместо отображения элементов словаря в индексы.

Методы

adapt

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

adapt(
    data, reset_state=True
)

Подгоняет состояние слоя предобработки к набору данных.

Переопределяет метод adapt по умолчанию, чтобы применить соответствующую предобработку к входным данным перед передачей их в комбинированный слой.

Аргументы
data Данные для обучения. Их можно передать либо как tf.data Dataset, либо как массив 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.3/api_docs/python/tf/compat/v1/keras/layers/experimental/preprocessing/StringLookup

Spec-Zone.ru

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