微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NLP:将其他功能与手套嵌入一起用于情感分析

如何解决NLP:将其他功能与手套嵌入一起用于情感分析

我想将推文分类为负面、中立或正面。我已经使用 pytorch 构建了一个 NN,它确实使用了预训练的手套嵌入和 LSTM 层并且做得不错:

class LSTMClassifier(nn.Module):
    def __init__(self,input_dim,embedding_dim,hidden_dim,output_dim):
        super(LSTMClassifier,self).__init__()
        self.glove_embedding = nn.Embedding(input_dim,embedding_dim)
        self.glove_embedding.weight.data.copy_(TEXT.vocab.vectors)
        self.lstm = nn.LSTM(embedding_dim,dropout = 0.3,num_layers = 2,bidirectional = True)
        self.linear = nn.Linear(hidden_dim,output_dim)

    def forward(self,text):
      embeds = self.glove_embedding(text)
      lstm_out,(hm,cm) = self.lstm(embeds )
      last_hm = hm[-1]
      linear_out = self.linear(last_hm )
      log_probs = F.log_softmax(linear_out,dim = 0)
      return log_probs

现在我想稍微玩一下这个神经网络,看看我是否可以改进。特别是,我想尝试将 POS 标签与手套嵌入一起输入 LSTM 层是否能改善任何事情。我对 POS 标签进行热编码并将它们连接到嵌入中,然后再将其提供给 LSTM:

POS.build_vocab(train_set) #building a dictionary for POS,which is a pytorch field containing my POS-tags
POS_NUM = len(POS.vocab)
.
.
.   

class LSTMClassifier(nn.Module):
    def __init__(self,pos_num,embedding_dim)
        self.pos_len = pos_num
        self.glove_embedding.weight.data.copy_(TEXT.vocab.vectors)
        self.lstm = nn.LSTM(embedding_dim + self.pos_len,output_dim)


    def forward(self,fields):
      text,pos = fields
      pos_one_hot = torch.nn.functional.one_hot(pos,self.pos_len)
      embeds = self.glove_embedding(text)
      super_vector = torch.cat([pos_one_hot,embeds],dim=2)
      lstm_out,cm) = self.lstm(super_vector)
      last_hm = hm[-1]
      linear_out = self.linear(last_hm )
      log_probs = F.log_softmax(linear_out,dim = 0)
      return log_probs 

这也有效,但是,它不会以任何方式影响性能(因此它不会让它变得更好,也不会让它变得更糟)。我不确定是我做错了什么,还是 POS 标签对我的数据分类无关紧要。

我上面发布的第二个网络实际上使用了 POS 标签还是我做错了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。