我正在使用tf.keras
构建模型。通常我使用tf.keras.layers.Embedding
层来处理分类数据。例如,如果输入列的格式如下:
应用
fb
whatsapp
instagram
对于上述数据,我会对数据进行标签编码,并通过Embedding层传递,如下所示:
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)
但是,如果一列的每行包含多个值呢?例如,数据格式如下:
应用
[fb, 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
是上述提到的上限。