在不平衡引文数据集上使用LSTM进行情感分析

问题描述 投票:0回答:1

我有一个非常不平衡的数据集。https://cl.awaisathar.com/citation-sentiment-corpus/上课时间:829负类:280中立类别:7627

这是我的网络:

Sentiment_LSTM(
  (embedding): Embedding(5491, 400)
  (lstm): LSTM(400, 512, num_layers=2, batch_first=True, dropout=0.5)
  (dropout): Dropout(p=0.5, inplace=False)
  (fc): Linear(in_features=512, out_features=3, bias=True)
  (sig): Sigmoid()
)

丢失功能:

lr=0.001

criterion = nn.BCELoss()
optimizer = torch.optim.Adam(net.parameters(), lr=lr)

在小班教学中我的准确性很低。我该如何进一步改善?

nlp lstm sentiment-analysis
1个回答
0
投票

我会尝试使用softmax而不是三个Sigmoids。使用sigmoids,可以对三个条件独立的分布进行建模。这并不是您真正想要的,因为评论可以是肯定的,中性的或否定的,但不能同时例如是肯定的和中性的—它们根本不是独立的。使用softmax,概率分布将在三个类别中分布,并且模型可能更好地理解为正意味着同时不是中立。

还请注意,对于softmax,您需要使用NLLLossNLLLoss而不是CrossEntropyLoss

如果这还不够,您可以为损失增加权重,因此正面和负面评论在培训中会更加突出。为此,您需要自己减少损失。设置CrossEntropyLoss,这样就不会得到一个单一的数字,而是一个损失值的向量,批次中的每个示例一个。然后,您可以将其乘以权重向量(我将从将权重设置为0.5(中性)和1(其他两项)开始)。然后,您可以仅通过在张量上调用BCELoss方法来平均损失。

© www.soinside.com 2019 - 2024. All rights reserved.