tf.lookup.StaticVocabularyTable
Таблица соответствия строк идентификаторам, которая назначает ключам вне словаря хеш-корзины.
Наследует от: TrackableResource
tf.lookup.StaticVocabularyTable(
initializer,
num_oov_buckets,
lookup_key_dtype=None,
name=None,
experimental_is_anonymous=False
)
Используется в блокнотах
| Используется в руководстве | Используется в учебных материалах |
|---|---|
Например, если экземпляр StaticVocabularyTable инициализирован инициализатором соответствия строк идентификаторам, который сопоставляет:
init = tf.lookup.KeyValueTensorInitializer(
keys=tf.constant(['emerson', 'lake', 'palmer']),
values=tf.constant([0, 1, 2], dtype=tf.int64))
table = tf.lookup.StaticVocabularyTable(
init,
num_oov_buckets=5)Объект Vocabulary выполняет следующее сопоставление:
emerson -> 0lake -> 1palmer -> 2-
<other term> -> bucket_id, гдеbucket_idбудет находиться в диапазоне от3до3 + num_oov_buckets - 1 = 7и вычисляется по формуле:hash(<term>) % num_oov_buckets + vocab_size
Если input_tensor имеет тип:
input_tensor = tf.constant(["emerson", "lake", "palmer",
"king", "crimson"])
table[input_tensor].numpy()
array([0, 1, 2, 6, 7])Если initializer равно None, используются только корзины для ключей вне словаря.
Пример использования:
num_oov_buckets = 3
vocab = ["emerson", "lake", "palmer", "crimnson"]
import tempfile
f = tempfile.NamedTemporaryFile(delete=False)
f.write('\n'.join(vocab).encode('utf-8'))
f.close()init = tf.lookup.TextFileInitializer(
f.name,
key_dtype=tf.string, key_index=tf.lookup.TextFileIndex.WHOLE_LINE,
value_dtype=tf.int64, value_index=tf.lookup.TextFileIndex.LINE_NUMBER)
table = tf.lookup.StaticVocabularyTable(init, num_oov_buckets)
table.lookup(tf.constant(["palmer", "crimnson" , "king",
"tarkus", "black", "moon"])).numpy()
array([2, 3, 5, 6, 6, 4])Для генерации идентификаторов корзин для ключей вне словаря используется хеш-функция Fingerprint64.
Обратите внимание, что идентификаторы корзин для ключей вне словаря всегда находятся в диапазоне от size до size + num_oov_buckets - 1 таблицы независимо от её значений, что может привести к неожиданным коллизиям:
init = tf.lookup.KeyValueTensorInitializer(
keys=tf.constant(["emerson", "lake", "palmer"]),
values=tf.constant([1, 2, 3], dtype=tf.int64))
table = tf.lookup.StaticVocabularyTable(
init,
num_oov_buckets=1)
input_tensor = tf.constant(["emerson", "lake", "palmer", "king"])
table[input_tensor].numpy()
array([1, 2, 3, 3])| Аргументы | |
|---|---|
initializer | Объект TableInitializerBase, содержащий данные для инициализации таблицы. Если значение равно None, используются только корзины для ключей вне словаря. |
num_oov_buckets | Количество корзин для ключей вне словаря. Должно быть больше нуля. Если корзины для ключей вне словаря не требуются, вместо этого используйте StaticHashTable. |
lookup_key_dtype | Тип данных ключей, передаваемых в lookup. По умолчанию используется initializer.key_dtype, если задано initializer, в противном случае — tf.string. Тип должен быть строковым или целочисленным, а также приводимым к типу initializer.key_dtype. |
name | Имя операции (необязательно). |
experimental_is_anonymous | Нужно ли использовать для таблицы анонимный режим (по умолчанию False). В анонимном режиме доступ к ресурсу таблицы возможен только через дескриптор ресурса. К таблице нельзя обратиться по имени. Ресурс будет автоматически удалён, когда исчезнут все указывающие на него дескрипторы ресурсов. |
| Вызывает исключения | |
|---|---|
ValueError | если num_oov_buckets не является положительным числом. |
TypeError | если lookup_key_dtype или initializer.key_dtype не являются целочисленными или строковыми. Также если initializer.value_dtype != int64. |
| Атрибуты | |
|---|---|
key_dtype | Тип данных ключей таблицы. |
name | Имя таблицы. |
resource_handle | Возвращает дескриптор ресурса, связанный с этим ресурсом. |
value_dtype | Тип данных значений таблицы. |
Методы
lookup
lookup(
keys, name=None
)
Ищет keys в таблице и возвращает соответствующие значения.
Ключам вне словаря назначаются корзины на основе их хешей.
| Аргументы | |
|---|---|
keys | Ключи для поиска. Это может быть SparseTensor или плотный Tensor. |
name | Необязательное имя операции. |
| Возвращает | |
|---|---|
SparseTensor, если ключи разреженные; RaggedTensor, если ключи имеют структуру ragged; в противном случае — плотный Tensor. |
| Вызывает исключения | |
|---|---|
TypeError | если тип данных keys не совпадает с типом данных ключей таблицы. |
size
size(
name=None
)
Вычисляет количество элементов в этой таблице.
__getitem__
__getitem__(
keys
)
Ищет keys в таблице и возвращает соответствующие значения.
© 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/lookup/StaticVocabularyTable