def __init__(self, nb_emb_feats, embdim, dftdim, emb_nb_filters, dft_nb_filters):
self.nb_emb_feats = nb_emb_feats
self.emb_nb_filters = emb_nb_filters
self.dft_nb_filters = dft_nb_filters
self.embdim, self.dftdim = embdim, dftdim
# Mention-Mention embedding vector
inp_m1_emb = Input(shape=(1, nb_emb_feats, embdim))
inp_m2_emb = Input(shape=(1, nb_emb_feats, embdim))
conv_m_emb_1r = Convolution2D(emb_nb_filters, 1, embdim, activation='tanh')
pool_m_emb_1r = MaxPooling2D(pool_size=(nb_emb_feats, 1))
emb_m1_vector_1r = Reshape((emb_nb_filters,))(pool_m_emb_1r(conv_m_emb_1r(inp_m1_emb)))
emb_m2_vector_1r = Reshape((emb_nb_filters,))(pool_m_emb_1r(conv_m_emb_1r(inp_m2_emb)))
conv_m_emb_2r = Convolution2D(emb_nb_filters, 2, embdim, activation='tanh')
pool_m_emb_2r = MaxPooling2D(pool_size=(nb_emb_feats-1, 1))
emb_m1_vector_2r = Reshape((emb_nb_filters,))(pool_m_emb_2r(conv_m_emb_2r(inp_m1_emb)))
emb_m2_vector_2r = Reshape((emb_nb_filters,))(pool_m_emb_2r(conv_m_emb_2r(inp_m2_emb)))
conv_m_emb_3r = Convolution2D(emb_nb_filters, 3, embdim, activation='tanh')
pool_m_emb_3r = MaxPooling2D(pool_size=(nb_emb_feats-2, 1))
emb_m1_vector_3r = Reshape((emb_nb_filters,))(pool_m_emb_3r(conv_m_emb_3r(inp_m1_emb)))
emb_m2_vector_3r = Reshape((emb_nb_filters,))(pool_m_emb_3r(conv_m_emb_3r(inp_m2_emb)))
merged_vectors = merge([emb_m1_vector_1r, emb_m2_vector_1r, emb_m1_vector_2r, emb_m2_vector_2r, emb_m1_vector_3r, emb_m2_vector_3r], mode='concat')
emb_m_matrix = Reshape((1, 2, emb_nb_filters))(merged_vectors)
conv_mm_emb = Convolution2D(emb_nb_filters, 1, emb_nb_filters, activation='tanh')(emb_m_matrix)
emb_mm_vector = Reshape((emb_nb_filters,))(Flatten()(MaxPooling2D(pool_size=(2, 1))(conv_mm_emb)))
# Mention-Mention feature vector
inp_m1_dft = Input(shape=(dftdim,))
inp_m2_dft = Input(shape=(dftdim,))
inp_mm_dft = Reshape((1, 2, dftdim))(merge([inp_m1_dft, inp_m2_dft], mode='concat'))
conv_mm_dft = Convolution2D(dft_nb_filters, 1, dftdim, activation='tanh')(inp_mm_dft)
dft_mm_vector = Reshape((dft_nb_filters,))(Flatten()(MaxPooling2D(pool_size=(2, 1))(conv_mm_dft)))
# Regression
prob = Dense(1, activation="sigmoid")(merge([emb_mm_vector, dft_mm_vector], mode="concat"))
# Model compilation
self.model = Model(input=[inp_m1_emb, inp_m2_emb, inp_m1_dft, inp_m2_dft], output=prob)
self.model.compile(loss='mse', optimizer=Adagrad(lr=0.08))
评论列表
文章目录