Machine learning 文本分类:LSTM与前馈
我正在训练一个文本分类模型 任务:给出描述,识别量词 对于ex 1) 此字段包含以美元->金额表示的总收入金额 2) 这有城市代码->代码 3) 总存款金额为34->金额 4) 包含名字信息->名字 5) 包含最后一个nme->name 对于给定的任务,将其建模为文本分类问题是有意义的 我采取了两种方法 方法1: a) 使用手套嵌入获得向量表示 b) 使用前馈神经网络将数据分类为11个可能输出类中的1个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
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理解上下文的能力