cartesinus commited on
Commit
2d37aac
·
verified ·
1 Parent(s): 7478881

Add custom RNN model with attention

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"model_type": "custom_rnn", "vocab_size": 250002, "hidden_size": 256, "output_size": 2, "cell_type": "RNN", "architecture": "SimpleRecurrentNetworkWithAttention"}
modeling.py ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import torch
3
+ import torch.nn as nn
4
+
5
+ class Attention(nn.Module):
6
+ def __init__(self, hidden_size):
7
+ super(Attention, self).__init__()
8
+ self.W1 = nn.Linear(hidden_size, hidden_size)
9
+ self.W2 = nn.Linear(hidden_size, hidden_size)
10
+ self.v = nn.Linear(hidden_size, 1, bias=False)
11
+
12
+ def forward(self, hidden, encoder_outputs):
13
+ sequence_len = encoder_outputs.shape[1]
14
+ hidden = hidden.unsqueeze(1).repeat(1, sequence_len, 1)
15
+
16
+ energy = torch.tanh(self.W1(encoder_outputs) + self.W2(hidden))
17
+ attention = self.v(energy).squeeze(2)
18
+ attention_weights = torch.softmax(attention, dim=1)
19
+
20
+ context = torch.bmm(attention_weights.unsqueeze(1), encoder_outputs).squeeze(1)
21
+ return context, attention_weights
22
+
23
+ class SimpleRecurrentNetworkWithAttention(nn.Module):
24
+ def __init__(self, input_size, hidden_size, output_size, cell_type='RNN', device='cpu'):
25
+ super(SimpleRecurrentNetworkWithAttention, self).__init__()
26
+
27
+ self.device = device
28
+ self.embedding = nn.Embedding(input_size, hidden_size)
29
+ self.attention = Attention(hidden_size * 2)
30
+
31
+ if cell_type == 'LSTM':
32
+ self.rnn = nn.LSTM(hidden_size, hidden_size, batch_first=True, bidirectional=True)
33
+ elif cell_type == 'GRU':
34
+ self.rnn = nn.GRU(hidden_size, hidden_size, batch_first=True, bidirectional=True)
35
+ else:
36
+ self.rnn = nn.RNN(hidden_size, hidden_size, batch_first=True, bidirectional=True)
37
+
38
+ self.fc = nn.Linear(hidden_size * 2, output_size)
39
+
40
+ def forward(self, inputs):
41
+ embedded = self.embedding(inputs.to(self.device))
42
+ rnn_output, hidden = self.rnn(embedded)
43
+
44
+ if isinstance(hidden, tuple):
45
+ hidden = hidden[0]
46
+
47
+ hidden = torch.cat((hidden[-2], hidden[-1]), dim=1)
48
+ context, attention_weights = self.attention(hidden, rnn_output)
49
+ output = self.fc(context)
50
+
51
+ return output, attention_weights
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:213c6e85e32e29debb0eba7922836aa1ec1348d5d26c9629df9463d726aa6957
3
+ size 259166474
sentencepiece.bpe.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfc8146abe2a0488e9e2a0c56de7952f7c11ab059eca145a0a727afce0db2865
3
+ size 5069051
special_tokens_map.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "cls_token": "<s>",
4
+ "eos_token": "</s>",
5
+ "mask_token": {
6
+ "content": "<mask>",
7
+ "lstrip": true,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false
11
+ },
12
+ "pad_token": "<pad>",
13
+ "sep_token": "</s>",
14
+ "unk_token": "<unk>"
15
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ffb37461c391f096759f4a9bbbc329da0f36952f88bab061fcf84940c022e98
3
+ size 17082999
tokenizer_config.json ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "<s>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "<pad>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "</s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "<unk>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "250001": {
36
+ "content": "<mask>",
37
+ "lstrip": true,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "bos_token": "<s>",
45
+ "clean_up_tokenization_spaces": false,
46
+ "cls_token": "<s>",
47
+ "eos_token": "</s>",
48
+ "mask_token": "<mask>",
49
+ "model_max_length": 512,
50
+ "pad_token": "<pad>",
51
+ "sep_token": "</s>",
52
+ "tokenizer_class": "XLMRobertaTokenizer",
53
+ "unk_token": "<unk>"
54
+ }