模型预处理层介绍(3) - IntegerLookup

模型预处理层介绍(3) - IntegerLookup

IntegerLookup 的作用,是将整型特征映射到连续范围的预处理层。

tf.keras.layers.IntegerLookup(
    max_tokens=None,
    num_oov_indices=1,
    mask_token=None,
    oov_token=-1,
    vocabulary=None,
    vocabulary_dtype='int64',
    idf_weights=None,
    invert=False,
    output_mode='int',
    sparse=False,
    pad_to_max_tokens=False,
    **kwargs
)

IntegerLookup 层通过基于表的词汇表查找将一组任意整数输入标记映射到索引整数输出。该层的输出索引将连续排列,直到最大词汇表大小,即使输入标记是非连续的或无界的。该层支持通过 output_mode 对输出进行编码的多个选项,并可选地支持词汇表外(out-of-vocabulary, OOV)令牌和Mask进行掩码屏蔽。

层的词汇必须在构造时提供,或者通过 adapt()学习。在 adapt()期间,该层将分析一个数据集,确定单个整数标记的频率,并从中创建词汇表。如果词汇表的大小有上限,那么将使用最频繁的标记来创建词汇表,其他所有标记将被视为 OOV。

该层有两种可能的输出模式。当 output_mode 为"int"时,输入整数将转换为它们在词汇表中的索引(整数)。当 output_mode 为"multi_hot"、"count"或"tf_idf"时,输入整数被编码到一个数组中,其中每个维度对应于词汇表中的一个元素。

我们来看一个官方的例子:

vocab = [12, 36, 1138, 42]
data = tf.constant([[12, 1138, 42], [42, 1000, 36]])  # Note OOV tokens
layer = tf.keras.layers.IntegerLookup(vocabulary=vocab)
layer(data)

在这个例子里面,词汇表vocab = [12, 36, 1138, 42] 的 index 顺序为 index = [1, 2, 3, 4], 所以在 data 当中出现的 int,都会从 vocab 里面找到对应的 index。 注意,data 里面有一个元素为 1000,这个元素不在创建 IntegerLookup 的 vocab 里面,所以会被单独设置为 oov index,也就是 0,我们来看一下输出:

<tf.Tensor: shape=(2, 3), dtype=int64, numpy=
array([[1, 3, 4],
       [4, 0, 2]], dtype=int64)>

参考

https://tensorflow.google.cn/api_docs/python/tf/keras/layers/IntegerLookup

posted @ 2023-02-16 14:38  NoMornings  阅读(47)  评论(0编辑  收藏  举报