Keras中具有可变标签分布的文本的多标签分类

数据挖掘 Python 喀拉斯 多标签分类
2022-02-14 08:52:14

我目前正在使用一个数据集,其中每行包含两件事:

  • 文本
  • 相关标签

两人都是荷兰人。

我正在尝试构建一个模型,该模型允许我根据从数据集中学到的内容为新文本分配标签。

我认为我遇到的问题是数据集本身非常小(大约 2000 条消息),但标签的分布也很不均匀。

例如,最常用的标签出现了 121 次,但大约有 40 个标签在不同的文章中只出现了 5 次。

我试图通过使用荷兰语词向量来解决数据量问题,并将它们用于嵌入层。这允许为最终模型提供更多上下文。

标签问题我还没有解决方案。我认为我应该制作一个自定义损失函数,让标签出现频率更高的文本在有效时权重更小,而出现更少的标签得分更高。但我不知道如何开始。如果你能帮助我,谢谢!

我的模型如下所示:

MAX_SEQUENCE_LENGTH = 100
EMBEDDING_DIM = 300

embedding_layer = Embedding(num_words,
                            EMBEDDING_DIM,
                            weights=[embedding_matrix],
                            input_length=MAX_SEQUENCE_LENGTH,
                            trainable=False)

sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)
x = Dropout(0.1)(embedded_sequences)
x = Conv1D(128, 5, activation='relu')(x)
x = MaxPooling1D(5)(x)
x = Conv1D(128, 5, activation='relu')(x)
x = MaxPooling1D(5)(x)
x = Flatten()(x)
x = Dense(128, activation='relu')(x)
preds = Dense(len(labels_index), activation='sigmoid')(x)

model = Model(sequence_input, preds)
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

数据输入是一个填充序列,因为输入和输出是与输入相关的标签的二进制列表(使用 MultiLabelBinarizer 制作)。

0个回答
没有发现任何回复~