Tensorflow lstm用于情绪分析而不是学习。更新

时间:2017-10-05 01:00:50

标签: tensorflow lstm sentiment-analysis recurrent-neural-network rnn

更新:

我正在为我的最终项目建立一个神经网络,我需要一些帮助。

我正在尝试建立一个rnn来对西班牙文本进行情绪分析。我有大约200,000个带标签的推文,我使用带有西班牙语嵌入的word2vec进行矢量化

数据集&矢量:

  • 我删除了重复项并将数据集拆分为训练和测试集。
  • 向量化时应用填充,未知和句末标记结束。
  • 我将@mentions映射到word2vec模型中的已知名称。示例:@iamthebest => “约翰”

我的模特:

  • 我的数据张量有shape =(batch_size,20,300)。
  • 我有3个类:中性,正面和负面,所以我的目标张量有shape =(batch_size,3)
  • 我使用BasicLstm单元格和动态rnn来构建网络。
  • 我使用Adam Optimizer和softmax_cross entropy进行损失计算
  • 我使用了一个dropout包装来减少过度拟合。

上次运行:

  • 我尝试过不同的配置,但似乎没有。
  • 上次设置:2个图层,512个批次大小,15个时期和0.001个lr。

Accuracy

Loss

弱点:

我担心最后一层以及在dynamic_rnn

中处理最终状态

代码:

structp

1 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。在阅读了一些论文和更多的试错之后,我弄明白了我的错误。

1)数据集:我有一个大型数据集,但我没有正确格式化。

  • 我检查了推文标签的分布(中性,正面和负面),意识到所述推文的分布存在差异并将其标准化。
  • 我通过删除网址标签和不必要的标点来清理它。
  • 我在矢量化之前洗牌了。

2)初始化:

  • 我用零初始化了MultiRNNCell,并将自定义的最终图层更改为tf.contrib.fully_connected。我还添加了偏置和权重矩阵的初始化。 (通过修复此问题,我开始在Tensorboard中看到更好的损失和准确度图)

3)辍学:

4)学习率下降:

  • 我在10,000步之后添加了指数衰减率来控制过度拟合。

最终结果:

应用所有这些更改后,我达到了84%的测试准确率,这是可以接受的,因为我的数据集仍然很糟糕。

我的最终网络配置是:

  • num_epochs = 20
  • tweet_size = 20
  • hidden_​​size = 400
  • vec_size = 300
  • batch_size = 512
  • number_of_layers = 2
  • number_of_classes = 3
  • start_learning_rate = 0.001
相关问题