You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多类别情感分析LSTM模型求助:挪威语文本验证准确率下降问题

挪威语文本多类别情感分析:验证准确率后期下降的原因排查

我正在针对挪威语文本开展多类别情感分析工作,自认为已完成正确的预处理步骤,但每次调整模型后,验证准确率都会在几个epoch后出现下降。我看到网上同类模型的准确率与验证准确率表现都较好,想请教可能的原因是什么?

我尝试过的模型如下:

模型1

# Define model architecture
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(num_words, 100, input_shape=(trainX.shape[1],)))
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(units=25, activation='tanh', dropout=0.2)))
model.add(tf.keras.layers.Dense(units=3, activation='softmax'))
model.summary()
# Compile and fit model
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.0015), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(trainX, trainY, epochs=8, batch_size=64, validation_data=(devX, devY))

# Evaluate model
loss, accuracy = model.evaluate(testX, testY, verbose=0)
print(loss, accuracy)

模型2

# Define model architecture
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(num_words, 100, input_shape=(trainX.shape[1],)))
model.add(tf.keras.layers.LSTM(units=25, activation='tanh', dropout=0.2))
model.add(tf.keras.layers.Dense(units=3, activation='softmax'))
model.summary()

# Compile and fit model
model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=0.0015), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(trainX, trainY, epochs=8, batch_size=64, validation_data=(devX, devY))

# Evaluate model
loss, accuracy = model.evaluate(testX, testY, verbose=0)
print(loss, accuracy)

可能的原因及解决方向

1. 过拟合风险未充分控制

验证准确率后期下降最常见的原因是过拟合。你当前仅在LSTM层设置了0.2的dropout,抑制过拟合的力度可能不足:

  • 可以在Embedding层后添加tf.keras.layers.SpatialDropout1D(0.2),它会随机丢弃整个词向量,更适合序列数据的正则化
  • 尝试把LSTM的dropout比例提升到0.3-0.4,或者添加recurrent_dropout=0.2(注意该参数会减慢训练速度)
  • 简化模型结构:比如减少LSTM的units数量,或者用GRU替代LSTM来降低模型复杂度

2. 学习率设置不合理

你使用的RMSprop学习率0.0015可能偏大。当模型训练到一定阶段,过大的学习率会导致参数更新幅度过大,跳过最优解,进而让验证集表现下滑:

  • 尝试把学习率降到0.001甚至0.0005,观察验证准确率的变化趋势
  • 加入学习率调度器,比如ReduceLROnPlateau,当验证准确率不再提升时自动降低学习率:
    from tensorflow.keras.callbacks import ReduceLROnPlateau
    lr_scheduler = ReduceLROnPlateau(monitor='val_accuracy', factor=0.5, patience=2, min_lr=1e-5)
    model.fit(..., callbacks=[lr_scheduler])
    

3. 数据集相关问题

即使你认为预处理没问题,也需要再排查以下点:

  • 分布一致性:训练集和验证集的样本分布是否一致?比如是否存在类别不平衡,或者验证集包含训练集未覆盖的领域文本?
  • 预处理细节:挪威语有特殊字符、复合词,是否用了针对挪威语的分词工具(如spaCy挪威语模型)?是否正确处理了大小写、噪声字符?
  • 样本量:如果训练集样本量过小,模型很容易记住训练数据,泛化能力自然差

4. 训练策略待优化

  • 早停机制:你固定训练8个epoch,但可能在第3-4个epoch时验证准确率就达到峰值,之后开始下降。加入早停回调可以及时终止训练,保留最优权重:
    from tensorflow.keras.callbacks import EarlyStopping
    early_stop = EarlyStopping(monitor='val_accuracy', patience=3, restore_best_weights=True)
    model.fit(..., callbacks=[early_stop])
    
  • 批次大小调整:batch_size=64如果适配性不佳,尝试减小到32,让模型参数更新更频繁,可能提升泛化能力

5. 词嵌入效果不足

你用的是随机初始化的Embedding层,对于挪威语这种低资源语言,预训练词嵌入能显著提升模型表现:

  • 尝试使用挪威语专用预训练模型,比如NB-BERT,或者挪威语的Word2Vec/GloVe词向量,替换随机初始化的Embedding层

内容的提问来源于stack exchange,提问作者Sondre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:34