【问题标题】:Text Classification : LSTM vs Feedforward文本分类:LSTM 与前馈
【发布时间】:2020-04-07 05:11:00
【问题描述】:

我正在训练一个文本分类模型。

任务:给定描述,识别量词

前任 1) 此字段包含以美元为单位的总收入金额 -> 金额

2) 这有城市代码 -> 代码

3) 总存款金额为 34 -> 金额

4) 包含名字信息 -> 名称

5) 包含最后一个 nme -> 名称

对于给定的任务,将其建模为文本分类问题是有意义的。

我采取了两种方法

方法一:

a) 使用手套嵌入获得向量表示

b) 使用前馈神经网络将数据分类为 11 个可能的输出类中的 1 个


    model = Sequential()
    model.add(layers.Embedding(vocab_size, embedding_dim, 
                               weights=[embedding_matrix], 
                               input_length=maxlen, 
                               trainable=False))
    model.add(layers.GlobalMaxPool1D())
    model.add(layers.Dense(200, activation='relu'))
    model.add(layers.Dense(100, activation='relu'))
    model.add(layers.Dense(50, activation='relu'))
    model.add(layers.Dense(11, activation='softmax'))
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    model.summary()

这种方法给了我 80% 的测试准确率

方法 2:我打算使用 LSTM,因为他们还可以学习上下文和从以前的单词中学习


    model = Sequential()
    model.add(layers.Embedding(vocab_size, embedding_dim, 
                               weights=[embedding_matrix], 
                               input_length=maxlen, 


    model.add(layers.LSTM(100,dropout=0.2, recurrent_dropout=0.2, activation='tanh'))
    model.add(layers.Dense(11, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])

    epochs = 100
    batch_size = 32

    model.summary()

问题与我做什么无关,LSTM 的准确率永远不会超过 40%。它从头到尾卡在上面。

此外,前馈网络(方法 1)可以检测到“总量为 6 美元”之类的简单情况,但 LSTM 甚至无法得到正确的结果并将其预测为其他

我的问题是为什么 LSTM(具有附加的上下文功能)无法改进前馈。我应该怎么做才能改进它。

【问题讨论】:

  • 为什么使用不同的指标?
  • 指标最终是相同的

标签: machine-learning keras nlp lstm text-classification


【解决方案1】:

我不能确切地说出原因,但我的猜测是样本量/数据质量。学习越深入,它需要的数据越多,它对训练数据中的小偏差就越敏感。如果您有一个小数据集,那么不太复杂的模型可能会更好地服务。

另一种可能性是 LSTM 在基于上下文和位置的推理方面非常强大,从我对您的任务的收集来看,您似乎更多地寻找关键字而不是长距离关系。这也可以解释为什么前馈效果更好

【讨论】:

  • 感谢您的回复!代码表示余额金额=这里是代码余额金额与代码=这里是金额因此需要lstm理解上下文的能力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2019-01-28
  • 1970-01-01
  • 2021-04-28
  • 2018-06-10
  • 2020-04-16
  • 2019-09-05
相关资源
最近更新 更多