| 24 | """TextRNN + TextCNN |
| 25 | """ |
| 26 | def __init__(self, dataset, config): |
| 27 | super(TextRCNN, self).__init__(dataset, config) |
| 28 | self.rnn = RNN( |
| 29 | config.embedding.dimension, config.TextRCNN.hidden_dimension, |
| 30 | num_layers=config.TextRCNN.num_layers, |
| 31 | batch_first=True, bidirectional=config.TextRCNN.bidirectional, |
| 32 | rnn_type=config.TextRCNN.rnn_type) |
| 33 | |
| 34 | hidden_dimension = config.TextRCNN.hidden_dimension |
| 35 | if config.TextRCNN.bidirectional: |
| 36 | hidden_dimension *= 2 |
| 37 | self.kernel_sizes = config.TextRCNN.kernel_sizes |
| 38 | self.convs = torch.nn.ModuleList() |
| 39 | for kernel_size in self.kernel_sizes: |
| 40 | self.convs.append(torch.nn.Conv1d( |
| 41 | hidden_dimension, config.TextRCNN.num_kernels, |
| 42 | kernel_size, padding=kernel_size - 1)) |
| 43 | |
| 44 | self.top_k = self.config.TextRCNN.top_k_max_pooling |
| 45 | hidden_size = len(config.TextRCNN.kernel_sizes) * \ |
| 46 | config.TextRCNN.num_kernels * self.top_k |
| 47 | |
| 48 | self.linear = torch.nn.Linear(hidden_size, len(dataset.label_map)) |
| 49 | self.dropout = torch.nn.Dropout(p=config.train.hidden_layer_dropout) |
| 50 | |
| 51 | def get_parameter_optimizer_dict(self): |
| 52 | params = list() |