【问题标题】:How can I prevent TextVectorization in Tensorflow creating values for Unknown and blank strings?如何防止 Tensorflow 中的 TextVectorization 为未知字符串和空白字符串创建值?
【发布时间】:2021-08-08 13:30:21
【问题描述】:

我正在寻找一个热编码字符串张量作为我的数据集管道的一部分。在我看来,这可以使用TextVectorization 来获得字符串张量的整数表示,然后使用one_hot 进行转换以实现编码的二维张量。

当我使用 TextVectorization 时,它似乎会自动尝试将“”映射到 0,并将词汇字符串中的字符串映射到 1。请参见下面使用 Tensorflow 2.3:

import tensorflow as tf
from tensorflow.keras import layers

possible_values = ["a","b","c"]
text_vectorization = layers.experimental.preprocessing.TextVectorization(output_sequence_length=1)
text_vectorization.set_vocabulary(possible_values)

print(text_vectorization.get_vocabulary())

['', '[UNK]', 'a', 'b', 'c']

我明白为什么它会很有用,因为它可以处理以下张量中的最后 2 个值,而不会引发错误并在此过程中为它们创建特征。

test_tensor = tf.constant(["b","b","c","b","a","potato",""])

print(text_vectorization.call(test_tensor))

tf.Tensor(
[[3]
 [3]
 [4]
 [3]
 [2]
 [1]
 [0]], shape=(7, 1), dtype=int64)

虽然我想在我的应用程序中关闭此行为,因为我不需要它。 The documentation 似乎没有提供禁用它的选项,现在我只是从输出中转到 -2 但这感觉不对。

有没有更简洁、原生的 tensorflow 解决方案来生成字符串张量的整数表示?

【问题讨论】:

  • 您可以编写代码来创建没有这些元素的新列表 - 只需使用 for-loop 从列表中获取元素并检查 if element in possible_values:。如果元素在 possible_values 中,则将其添加到新列表中。

标签: python encoding tensorflow2.0 one-hot-encoding


【解决方案1】:

如果你想删除元素,那么你需要普通的for-loop 来过滤它

data = ["b","b","c","b","a","potato",""]
possible_values = ["a","b","c"]

filtered_data = []

for item in data:
    if item in possible_values:
        filtered_data.append(item)

print(filtered_data)

列表理解更短

data = ["b","b","c","b","a","potato",""]
possible_values = ["a","b","c"]

filtered_data = [x for x in data if x in possible_values]

print(filtered_data)

所以这一切都不需要任何特殊功能。

【讨论】:

  • 嗨,我已经知道我的数据将只包含 ["a","b","c"] 所以我不需要过滤。我只是想知道我是否错过了一种明显的方法来避免 TextVectorization 词汇表中的 ['', '[UNK]'] 值。我不认为有。我现在将坚持使用 -2,否则随后使用 tf.one_hot 创建一个数组将始终包含 2 个始终为 0 的列。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多