【发布时间】: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