cnn_mm.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:character-identification 作者: emorynlp 项目源码 文件源码
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))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号