PyTorch 0.4.1 examples (コード解説) : テキスト分類 – IMDB (RNN)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/12/2018 (0.4.1)
* 本ページは、github 上の以下の pytorch/examples と keras/examples レポジトリのサンプル・コードを参考にしています:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
PyTorch RNN によるセンチメント解析
PyTorch 0.4.x の自作のサンプルをコードの簡単な解説とともに提供しています。
初級チュートリアル程度の知識は仮定しています。
基本的な ConvNet をウォークスルーしたので、次に IMDB を題材にして RNN を扱ってみます。
IMDB データセット
手慣れているので Keras からデータセットをロードします :
from keras.datasets import imdb (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=VOCAB_SIZE) from keras.preprocessing import sequence x_train = sequence.pad_sequences(x_train, maxlen=maxlen) x_test = sequence.pad_sequences(x_test, maxlen=maxlen) x_train = x_train.astype('long') x_test = x_test.astype('long')
次に PyTorch のデータセットとしてラップします :
import torch import torch.utils.data as data ds_train = data.TensorDataset(torch.from_numpy(x_train), torch.from_numpy(y_train)) ds_test = data.TensorDataset(torch.from_numpy(x_test), torch.from_numpy(y_test)) dataloader_train = data.DataLoader(ds_train, batch_size=BATCH_SIZE, shuffle=True) dataloader_test = data.DataLoader(ds_test, batch_size=BATCH_SIZE, shuffle=False)
RNN モデル
今回は最も単純なモデルを使用します :
class Net(nn.Module): def __init__(self): super().__init__() self.embedding = nn.Embedding(VOCAB_SIZE, EMBEDDING_DIM) self.rnn = nn.RNN(input_size=EMBEDDING_DIM, hidden_size=LSTM_HIDDEN_DIM, batch_first=True) self.fc = nn.Linear(LSTM_HIDDEN_DIM, 2) def forward(self, x): embedded = self.embedding(x) output, hidden = self.rnn(embedded) return self.fc(hidden.squeeze(0))
訓練と評価
CrossEntropyLoss
損失関数として CrossEntropyLoss を使用して 100 エポックの訓練で検証精度 74.47 % が得られました :
BCEWithLogitsLoss
損失関数として BCEWithLogitsLoss を使用した場合でも 74.42 % が得られました :
以上