-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnn.py
61 lines (48 loc) · 2.93 KB
/
nn.py
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# -*- coding: utf-8 -*-
from keras.models import Model, Input
from keras.layers import LSTM, Embedding, Dense, TimeDistributed, Bidirectional, concatenate
from keras_contrib.layers import CRF
class scope_models():
def bilstm_glove_crf(self, max_len, features_dict, num_tokens, num_labels, embed_dims, embed_matrix, cell_units, drpout, rec_drpout):
inputs = []
if "words" in features_dict:
input_ = Input(shape=(max_len,))
z = Embedding(input_dim=num_tokens["words"], output_dim=embed_dims["words"], input_length=max_len, trainable=False, weights=[embed_matrix])(input_)
inputs.append(input_)
if "cues" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["cues"], output_dim=embed_dims["cues"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
if "cues_spec" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["cues_spec"], output_dim=embed_dims["cues_spec"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
if "pos" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["pos"], output_dim=embed_dims["pos"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
if "upos" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["upos"], output_dim=embed_dims["upos"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
if "syntax" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["syntax"], output_dim=embed_dims["syntax"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
if "sdep" in features_dict:
input_ = Input(shape=(max_len,))
x = Embedding(input_dim=num_tokens["sdep"], output_dim=embed_dims["sdep"], input_length=max_len, trainable=True)(input_)
inputs.append(input_)
z = concatenate([z, x])
z = Bidirectional(LSTM(units=cell_units, return_sequences=True, dropout=drpout, recurrent_dropout=rec_drpout))(z)
z = Bidirectional(LSTM(units=cell_units, return_sequences=True, dropout=drpout, recurrent_dropout=rec_drpout))(z)
z = TimeDistributed(Dense(cell_units, activation="relu"))(z)
crf = CRF(num_labels)
z = crf(z)
model = Model(inputs=inputs , outputs=z)
return crf, model