pytorch---情感分析


前言:

  這個系列一共有8個部分。主要參考了github上的幾個代碼。

  使用工具有torchtext,pytorch。

  數據集主要是爛番茄電影評論數據集https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews。

實驗相關:

數據集處理:

  爛番茄電影評論數據集是包含了訓練集和測試集,原始的句子已經通過斯坦福大學的解析器解析成為了很多短句,是數據集中的phrase ,另外提供了sentenceid可以尋找到原始的句子,情緒標簽分為五個

0 - 消極
1 - 有些消極
2 - 中立
3 - 有點積極
4 - 積極

  首先先觀察數據

1 import pandas as pd
2 
3 files1 = pd.read_csv("datasets/train.tsv",sep="\t")
4 files2 = pd.read_csv("datasets/test.tsv",sep="\t")
5 files1.head(5)
6 files2.head(5)

train_datatest_data

利用torchtext構建數據集

import torchtext
from torchtext import data,datasets
train_data = data.TabularDataset(
        path='./datasets/train.tsv',format='tsv',
        skip_header=True,
        fields = [('PhraseId', None),('SentenceId', None),('Phrase', TEXT),('Sentiment',LABEL)])
test_data = data.TabularDataset(
        path='./datasets/test.tsv',format='tsv',
        skip_header=True,
        fields = [('PhraseId', None),('SentenceId', None),('Phrase', TEXT)])

import random

train_data, valid_data = train_data.split(random_state = random.seed(10))

 構造詞典和batch

from torchtext.vocab import GloVe
from torchtext import data


TEXT.build_vocab(train_data, vectors=GloVe(name='6B', dim=300))
LABEL.build_vocab()
BATCH_SIZE = 64 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits( (train_data, valid_data, test_data), batch_size = BATCH_SIZE, device = device)
 

構建模型:

使用最簡單的RNN,如下

 

import torch.nn as nn

class RNN(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
        
        super().__init__()
        
        self.embedding = nn.Embedding(vocab_size, embedding_dim)
        
        self.rnn = nn.RNN(embedding_dim, hidden_dim,frist_batch=True)
        
        self.fc = nn.Linear(hidden_dim, output_dim)
        
    def forward(self, text):
        
        embedded = self.embedding(text).permute(1,0,2)
     output, hidden = self.rnn(embedded) 
  
     return self.fc(hidden)

import torch.optim as optim
import torch.nn.functional as F

model = RNN()
model.train()
optimizer = optim.Adam(model.parameters(), lr=0.01)
loss_funtion = F.cross_entropy

for epoch in range(2):
  for batch in train_iterator:
    optimizer.zero_grad()
    predicted = model(batch.Phrase)

    loss = loss_funtion(predicted, batch.Sentiment)
    loss.backward()
    optimizer.step()

 
         

 

 不怎么會寫,后面補充完。。。為啥別人的博客寫的那么好!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM