tf.keras 如何处理具有可变长度值列表的分类列

tf.keras how to handle a categorical column which has a list of values of variable length

我正在使用 tf.keras 来构建我的模型。通常我使用 tf.keras.layers.Embedding 层来处理分类数据。例如,如果其中一个输入列采用以下格式

应用程序

fb
whatsapp
Instagram

使用上面的数据,我对数据进行标签编码并将其传递到嵌入层,如下所示。

inp = tf.keras.Input(shape=(1,), name="app_input")
emb_layer = tf.keras.layers.Embedding(vocab_size, embedding_size, input_length=1, name="emb_" + feature)(inp)

但是如果我的列在每一行中有多个值怎么办?例如,数据采用以下格式:

应用程序

[脸书,whatsapp]
[whatsapp、instagram、fb]

我无法使用单热编码,因为独特的应用程序数量巨大。我想为这些应用程序生成嵌入,但不确定如何处理上述数据。

一种方法(也是一种常用的方法)是选择输入序列长度的某个固定上限,然后使用额外的“空”元素填充短于该最大值的序列,例如使用tf.keras.preprocessing.sequence.pad_sequences.

然后您将使用填充序列作为嵌入层的输入 emb_layer = tf.keras.layers.Embedding(vocab_size, embedding_size, input_length=max_len),其中 max_len 是上面提到的上限。