Skip to content

Commit 7d27baf

Browse files
author
plliao
committed
set the parameter of seq2vec 0.4.0
1 parent 5a15683 commit 7d27baf

9 files changed

Lines changed: 108 additions & 149 deletions

seq2vec/model/seq2vec_C2R_char.py

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
"""Sequence-to-Sequence word2vec."""
2-
32
import keras.models
43
from keras.optimizers import RMSprop
54
from keras.layers import Input, Reshape
65
from keras.layers.core import Dense
76
from keras.layers.wrappers import TimeDistributed
8-
from keras.layers import Conv2D
7+
from keras.layers import Conv2D, LSTM
98
from keras.layers.pooling import MaxPool2D
109
from keras.models import Model
11-
from keras import regularizers
1210

1311
from yklz import MaskConv, ConvEncoder, MaskConvNet
1412
from yklz import MaskToSeq, MaskPooling, Pick
15-
from yklz import RNNDecoder, LSTMPeephole, RNNCell
13+
from yklz import RNNDecoder, RNNCell
1614

1715
from seq2vec.transformer import CharEmbeddingOneHotTransformer
1816
from seq2vec.transformer import WordEmbeddingTransformer
@@ -40,7 +38,7 @@ def __init__(
4038
word2vec_model,
4139
max_index=10000,
4240
max_length=10,
43-
embedding_size=300,
41+
char_embedding_size=300,
4442
learning_rate=0.0001,
4543
conv_size=5,
4644
channel_size=10,
@@ -57,24 +55,32 @@ def __init__(
5755
word2vec_model,
5856
max_length,
5957
)
60-
self.embedding_size = embedding_size
58+
self.char_embedding_size = char_embedding_size
6159
self.max_index = max_index
6260
self.conv_size = conv_size
6361
self.channel_size = channel_size
6462
self.encoding_size = (
65-
self.embedding_size // self.conv_size * self.channel_size
63+
self.char_embedding_size // self.conv_size * self.channel_size
6664
)
6765

6866
super(Seq2VecC2RChar, self).__init__(
6967
max_length,
7068
latent_size,
7169
learning_rate
7270
)
71+
self.custom_objects['RNNDecoder'] = RNNDecoder
72+
self.custom_objects['MaskPooling'] = MaskPooling
73+
self.custom_objects['MaskToSeq'] = MaskToSeq
74+
self.custom_objects['MaskConv'] = MaskConv
75+
self.custom_objects['MaskConvNet'] = MaskConvNet
76+
self.custom_objects['ConvEncoder'] = ConvEncoder
77+
self.custom_objects['RNNCell'] = RNNCell
78+
self.custom_objects['Pick'] = Pick
7379

7480
def create_model(
7581
self,
7682
rho=0.9,
77-
decay=0.01,
83+
decay=0.0,
7884
):
7985

8086
inputs = Input(
@@ -85,16 +91,15 @@ def create_model(
8591
)
8692
char_embedding = TimeDistributed(
8793
Dense(
88-
self.embedding_size,
94+
self.char_embedding_size,
8995
use_bias=False,
90-
kernel_regularizer=regularizers.l2(0.001),
9196
activation='tanh'
9297
)
9398
)(inputs)
9499

95100
char_embedding = Reshape((
96101
self.max_length,
97-
self.embedding_size,
102+
self.char_embedding_size,
98103
1
99104
))(char_embedding)
100105
masked_embedding = MaskConv(0.0)(char_embedding)
@@ -109,19 +114,18 @@ def create_model(
109114
(2, self.conv_size),
110115
strides=(1, self.conv_size),
111116
activation='tanh',
112-
padding='valid',
117+
padding='same',
113118
use_bias=False,
114-
kernel_regularizer=regularizers.l2(0.001)
115119
)
116120
)(masked_embedding)
117121

118-
final_window_size = self.max_length - 1
119-
final_feature_size = self.channel_size * self.embedding_size // self.conv_size
120-
121122
mask_feature = MaskPooling(
122123
MaxPool2D(
123-
(final_window_size, 1),
124-
padding='valid'
124+
(
125+
self.max_length,
126+
1
127+
),
128+
padding='same'
125129
),
126130
pool_mode='max'
127131
)(char_feature)
@@ -132,28 +136,25 @@ def create_model(
132136

133137
dense_input = RNNDecoder(
134138
RNNCell(
135-
LSTMPeephole(
139+
LSTM(
136140
units=self.latent_size,
137141
return_sequences=True,
138142
implementation=2,
139143
unroll=False,
140-
dropout=0.1,
141-
recurrent_dropout=0.1,
142-
kernel_regularizer=regularizers.l2(0.001),
143-
recurrent_regularizer=regularizers.l2(0.001),
144+
dropout=0.,
145+
recurrent_dropout=0.,
144146
),
145147
Dense(
146-
units=final_feature_size,
148+
units=self.encoding_size,
147149
activation='tanh'
148150
),
149-
dense_dropout=0.1
151+
dense_dropout=0.
150152
)
151153
)(encoded_feature)
152154

153155
outputs = TimeDistributed(
154156
Dense(
155157
self.word_embedding_size,
156-
kernel_regularizer=regularizers.l2(0.001),
157158
activation='tanh'
158159
)
159160
)(dense_input)
@@ -170,32 +171,18 @@ def create_model(
170171
model.compile(loss='cosine_proximity', optimizer=optimizer)
171172
return model, encoder
172173

173-
def load_customed_model(self, file_path):
174-
return keras.models.load_model(
175-
file_path, custom_objects={
176-
'RNNDecoder': RNNDecoder,
177-
'MaskPooling': MaskPooling,
178-
'MaskToSeq': MaskToSeq,
179-
'MaskConv': MaskConv,
180-
'MaskConvNet': MaskConvNet,
181-
'ConvEncoder': ConvEncoder,
182-
'LSTMPeephole':LSTMPeephole,
183-
'RNNCell':RNNCell,
184-
'Pick':Pick
185-
}
186-
)
187-
188174
def load_model(self, file_path):
189175
self.model = self.load_customed_model(file_path)
190176
picked = Pick()(self.model.get_layer(index=7).output)
191177
self.encoder = Model(
192178
self.model.input,
193179
picked
194180
)
195-
self.embedding_size = self.model.get_layer(index=1).output_shape[2]
181+
self.char_embedding_size = self.model.get_layer(index=1).output_shape[2]
196182
self.max_length = self.model.get_layer(index=0).output_shape[1]
197183
self.max_index = self.model.input_shape[2]
198-
self.conv_size = self.embedding_size // self.model.get_layer(index=4).output_shape[2]
184+
self.conv_size = self.char_embedding_size \
185+
// self.model.get_layer(index=4).output_shape[2]
199186
self.channel_size = self.model.get_layer(index=4).output_shape[3]
200187
self.encoding_size = self.encoder.output_shape[1]
201188
self.latent_size = self.model.get_layer(index=8).layer.recurrent_layer.units

seq2vec/model/seq2vec_C2R_word.py

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
"""Sequence-to-Sequence word2vec."""
22
import keras.models
33
from keras.optimizers import RMSprop
4-
from keras.layers import Input, Conv3D
5-
from keras.layers.core import Dense
4+
from keras.layers import Input, Conv3D, LSTM
5+
from keras.layers.core import Dense, Dropout
66
from keras.layers.wrappers import TimeDistributed
77
from keras.layers.pooling import MaxPooling3D
88
from keras.models import Model
9-
from keras import regularizers
109

1110
from yklz import MaskConv, MaskConvNet, MaskPooling, ConvEncoder
12-
from yklz import MaskToSeq, RNNDecoder, RNNCell, LSTMPeephole, Pick
11+
from yklz import MaskToSeq, RNNDecoder, RNNCell, Pick
1312
from seq2vec.transformer import WordEmbeddingConv3DTransformer
1413
from seq2vec.transformer import WordEmbeddingTransformer
1514
from seq2vec.model import TrainableSeq2VecBase
@@ -50,18 +49,26 @@ def __init__(
5049
word2vec_model,
5150
max_length
5251
)
53-
self.embedding_size = word2vec_model.get_size()
52+
self.word_embedding_size = word2vec_model.get_size()
5453
self.conv_size = conv_size
5554
self.channel_size = channel_size
5655
self.encoding_size = (
57-
self.embedding_size // self.conv_size * self.channel_size
56+
self.word_embedding_size // self.conv_size * self.channel_size
5857
)
5958

6059
super(Seq2VecC2RWord, self).__init__(
6160
max_length,
6261
latent_size,
6362
learning_rate
6463
)
64+
self.custom_objects['RNNDecoder'] = RNNDecoder
65+
self.custom_objects['MaskPooling'] = MaskPooling
66+
self.custom_objects['MaskToSeq'] = MaskToSeq
67+
self.custom_objects['MaskConv'] = MaskConv
68+
self.custom_objects['MaskConvNet'] = MaskConvNet
69+
self.custom_objects['ConvEncoder'] = ConvEncoder
70+
self.custom_objects['RNNCell'] = RNNCell
71+
self.custom_objects['Pick'] = Pick
6572

6673
def create_model(
6774
self,
@@ -73,15 +80,11 @@ def create_model(
7380
shape=(
7481
self.max_length,
7582
self.max_length,
76-
self.embedding_size,
83+
self.word_embedding_size,
7784
1
7885
)
7986
)
8087

81-
final_window_size = self.max_length - 1
82-
final_feature_size = self.embedding_size // self.conv_size * self.channel_size
83-
final_feature_window_size = 1
84-
8588
masked_inputs = MaskConv(0.0)(inputs)
8689
masked_seqs = MaskToSeq(
8790
MaskConv(0.0),
@@ -94,20 +97,19 @@ def create_model(
9497
(2, 2, self.conv_size),
9598
strides=(1, 1, self.conv_size),
9699
activation='tanh',
97-
padding='valid',
100+
padding='same',
98101
use_bias=False,
99-
kernel_regularizer=regularizers.l2(0.001)
100102
)
101103
)(masked_inputs)
102104

103105
pooling = MaskPooling(
104106
MaxPooling3D(
105107
(
106-
final_window_size,
107-
final_window_size,
108-
final_feature_window_size
108+
self.max_length,
109+
self.max_length,
110+
1
109111
),
110-
padding='valid'
112+
padding='same'
111113
),
112114
pool_mode='max'
113115
)(conv)
@@ -118,28 +120,25 @@ def create_model(
118120

119121
decoded = RNNDecoder(
120122
RNNCell(
121-
LSTMPeephole(
123+
LSTM(
122124
self.latent_size,
123125
return_sequences=True,
124126
implementation=2,
125127
unroll=False,
126-
dropout=0.1,
127-
recurrent_dropout=0.1,
128-
kernel_regularizer=regularizers.l2(0.001),
129-
recurrent_regularizer=regularizers.l2(0.001)
128+
dropout=0.,
129+
recurrent_dropout=0.,
130130
),
131131
Dense(
132-
units=final_feature_size,
132+
units=self.encoding_size,
133133
activation='tanh'
134134
),
135-
dense_dropout=0.1
135+
dense_dropout=0.
136136
)
137137
)(encoded)
138138

139139
outputs = TimeDistributed(
140140
Dense(
141-
self.embedding_size,
142-
kernel_regularizer=regularizers.l2(0.001),
141+
self.word_embedding_size,
143142
activation='tanh'
144143
)
145144
)(decoded)
@@ -156,29 +155,14 @@ def create_model(
156155
model.compile(loss='cosine_proximity', optimizer=optimizer)
157156
return model, encoder
158157

159-
def load_customed_model(self, file_path):
160-
return keras.models.load_model(
161-
file_path, custom_objects={
162-
'RNNDecoder': RNNDecoder,
163-
'MaskPooling': MaskPooling,
164-
'MaskToSeq': MaskToSeq,
165-
'MaskConv': MaskConv,
166-
'MaskConvNet': MaskConvNet,
167-
'ConvEncoder': ConvEncoder,
168-
'LSTMPeephole':LSTMPeephole,
169-
'RNNCell':RNNCell,
170-
'Pick':Pick
171-
}
172-
)
173-
174158
def load_model(self, file_path):
175159
self.model = self.load_customed_model(file_path)
176160
picked = Pick()(self.model.get_layer(index=5).output)
177161
self.encoder = Model(
178162
self.model.input,
179163
picked
180164
)
181-
self.embedding_size = self.model.input_shape[3]
165+
self.word_embedding_size = self.model.input_shape[3]
182166
self.max_length = self.model.input_shape[1]
183167
self.conv_size = self.model.get_layer(index=2).layer.kernel_size[2]
184168
self.latent_size = self.model.get_layer(index=6).layer.recurrent_layer.units

0 commit comments

Comments
 (0)