Machine learning 文本分类:LSTM与前馈

Machine learning 文本分类:LSTM与前馈,machine-learning,keras,nlp,lstm,text-classification,Machine Learning,Keras,Nlp,Lstm,Text Classification,我正在训练一个文本分类模型 任务:给出描述,识别量词 对于ex 1) 此字段包含以美元->金额表示的总收入金额 2) 这有城市代码->代码 3) 总存款金额为34->金额 4) 包含名字信息->名字 5) 包含最后一个nme->name 对于给定的任务,将其建模为文本分类问题是有意义的 我采取了两种方法 方法1: a) 使用手套嵌入获得向量表示 b) 使用前馈神经网络将数据分类为11个可能输出类中的1个 model = Sequential() model.add(layers

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

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

对于ex 1) 此字段包含以美元->金额表示的总收入金额

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

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

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

5) 包含最后一个nme->name

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

我采取了两种方法

方法1:

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(具有额外的上下文能力)不能在前馈的基础上改进。我应该做些什么来改进它

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


另一种可能性是,LSTM在基于上下文和位置的推理方面非常强大,从我收集到的关于您的任务的信息来看,您似乎更多地寻找关键词,而较少寻找远距离关系。这也可以解释为什么前馈工作得更好

为什么使用不同的指标?在你的回答中,这些指标最终是相同的!代码表示余额=此处为代码余额=此处为金额,因此需要lstm理解上下文的能力