1

(问题:多类文本分类问题中的过度拟合问题)
在我的个人项目中,目标是根据公司描述对公司的行业标签进行分类。我采取的步骤是:

  1. 删除停用词、标点符号、空格等,并将描述拆分为标记。
  2. 将标签和标记转换为词向量。
  3. 将标记转换为词嵌入模型。
  4. 设置具有 62 个输出节点的 CNN。(62 个不同的行业标签进行分类)

图片/数据集链接供参考:https ://drive.google.com/drive/folders/1yLW2YepoHvSp_koHDDzcAAJBIaYQIen0?usp=sharing


我面临的问题是模型过拟合,不管我做了什么改变。(由于我为损失设置的回调而提前结束)[CNN 准确度][7]

max_features = 700
maxlen = 200
embedding_dims = 50
filters = 200
kernel_size = 3
hidden_dims = 160
es_callback = EarlyStopping(monitor='val_loss', patience=5)

model = Sequential()
model.add(Embedding(vocab_size, 100, weights=[embedding_matrix], trainable=False))
model.add(Dropout(0.4))

model.add(Conv1D(filters,
                 kernel_size,
                 padding='valid',
                 activation='relu',
                 strides=1))
model.add(GlobalMaxPooling1D())

model.add(Dense(hidden_dims))
model.add(Dropout(0.4))
model.add(Activation('relu'))

model.add(Dense(62))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

history = model.fit(X_train, y_label_train,
              batch_size=64,
              epochs=50,
              validation_data=(X_test, y_label_test),
              callbacks=[es_callback])

代码链接:https ://colab.research.google.com/drive/1YqbhPX6e4bJ5FnbfHj7fTQH4tUe6diva?usp=sharing

4

1 回答 1

1

我觉得这个问题很笼统,尽管它不仅对 NLP 有用。因此,我认为要正确解决这个问题,需要涵盖很多主题。我建议您首先关注数据预处理步骤,因此此处描述神经网络架构的代码片段(在我看来)可能是最后一步。基于对 colab 代码的初步了解,我建议:

  • 更好的数据预处理

    • 更正确的数据预处理

      • 例如,我认为您仅在 train data 上应用了以下内容 X['Text_Clean'] = X['Business Description'].apply(lambda x: remove_punct(x)),并且我没有在测试集上看到用于类似转换的管道,也没有看到直接转换。
      • 您在标记上应用了词嵌入。我相信它们会给你的文本“text_final”功能带来更大的价值,这样你就可以从文本叙述的语义表示中获得价值。
    • 一般来说我会说:转换为小写,删除 HTML 标记、标点符号、非字母字符、删除停用词/根据您的特定文本在停用词列表中添加一些其他词、修复词汇表中的一些非正式文本,例如“what's” -> “what is”,并进行词干以将具有大致相同语义的单词转换为一种标准形式。

    • 不平衡分类问题:它发生

当每个类标签的训练数据集中的示例数量不平衡时。

简而言之,当您的少量标签占据与您的文本相关联的大量标签时,其余要学习的“少数”标签不会进行太多训练。

  • 特征工程:您可以创建额外的特征和元数据来增强培训和学习。例如,您可以添加一个列来提供每个实例的情绪,和/或您可以将主题建模应用为一个额外的属性(它们类似于您放在数据框上的“令牌”,支持 - 而不是替换 -主要文本属性)。

最后,我认为首先从TfidfVectorizer开始并在继续神经网络之前观察那里的准确性并不是一个坏主意。如果以上还不够,还可以在使用深度神经网络的同时探索更稳健的迁移学习和预训练模型。

于 2021-02-26T12:10:03.437 回答