File size: 1,813 Bytes
497b3ad |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import torch
import torch.nn as nn
class biLSTM(nn.Module):
"""
The LSTM model that will be used to perform Sentiment analysis.
"""
def __init__(self,
# объем словаря, с которым мы работаем, размер входа для слоя Embedding
vocab_size: int,
# размер выходного эмбеддинга каждый элемент последовательности
# будет описан вектором такой размерности
embedding_dim: int,
# размерность hidden state LSTM слоя
hidden_dim: int,
# число слоев в LSTM
n_layers: int,
drop_prob=0.5,
seq_len = 128) -> None:
super().__init__()
self.hidden_dim = hidden_dim
self.n_layers = n_layers
self.seq_len = seq_len
self.embedding = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim,
hidden_dim,
n_layers,
dropout=drop_prob,
batch_first=True,
bidirectional=True
)
self.do = nn.Dropout()
self.fc1 = nn.Linear(2*hidden_dim * self.seq_len, 256)
self.fc2 = nn.Linear(256, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
embeds = self.embedding(x)
lstm_out, _ = self.lstm(embeds)
out = self.fc2(torch.tanh(self.do(self.fc1(lstm_out.flatten(1)))))
sig_out = self.sigmoid(out)
return sig_out |