Python 使用自动编码器实现两两文本相似性

Python 使用自动编码器实现两两文本相似性,python,tensorflow,keras,word2vec,autoencoder,Python,Tensorflow,Keras,Word2vec,Autoencoder,我的数据集只包含500个样本。数据集有三列 句子1 句子2 0或1(表示相似性) 我的任务是训练一个编码器,它将两个句子作为输入,如果句子相似,则返回1,否则返回0 我使用预先训练过的word2vec嵌入来提取特征。我的模型只有50%的准确率 sent_in = Input(shape=(150, )) sent_emb = Embedding(input_dim=vocab_size, output_dim=300, weights=[E],)(sent_in) conv1 = Conv1D(

我的数据集只包含500个样本。数据集有三列

  • 句子1
  • 句子2
  • 0或1(表示相似性) 我的任务是训练一个编码器,它将两个句子作为输入,如果句子相似,则返回1,否则返回0

    我使用预先训练过的word2vec嵌入来提取特征。我的模型只有50%的准确率

    sent_in = Input(shape=(150, ))
    sent_emb = Embedding(input_dim=vocab_size, output_dim=300, weights=[E],)(sent_in)
    conv1 = Conv1D(32, 5, activation='relu', padding='same')(sent_emb)
    pool1 = MaxPooling1D(2)(conv1)
    conv2 = Conv1D(64, 5, activation='relu', padding='same')(pool1)
    pool2 = MaxPooling1D(2)(conv2)
    conv3 = Conv1D(128, 5, activation='relu', padding='same')(pool2)
    flat1 = Flatten()(conv3)
    
    sent_in2 = Input(shape=(150, ))
    sent_emb2 = Embedding(input_dim=vocab_size, output_dim=300, weights=[E],)(sent_in2)
    conv4 = Conv1D(32, 5, activation='relu', padding='same')(sent_emb2)
    pool3 = MaxPooling1D(2)(conv4)
    conv5 = Conv1D(64, 5, activation='relu', padding='same')(pool3)
    pool4 = MaxPooling1D(2)(conv5)
    conv6 = Conv1D(128, 5, activation='relu', padding='same')(pool4)
    flat2 = Flatten()(conv6)
    
    concatenated = concatenate([flat1, flat2])
    
    dense1 = Dense(32, activation='relu')(concatenated)
    out = Dense(1, activation='sigmoid')(dense1)
    model = Model(inputs=[sent_in,sent_in2], outputs=out)
    model.summary()
    
    我的网络如下图所示

    问题:

    1) 每个自动编码器必须有一个编码器和一个解码器吗

    2) 如何提高我的准确性

    1)每个自动编码器必须有一个编码器和一个解码器吗?

    是的,这是必须的。如果你打算把编码器和解码器训练成独立的神经网络,你可能很快就会面临这样一个问题:我们不知道编码(特征压缩集)应该是什么。 没有标签表明输入特征应与此特定编码相对应。 因此,不可能训练我们的编码器!没有编码器,我们就没有编码,因此我们没有解码器的输入功能! 这使得训练我们的解码器也不可能

    2)如何提高准确性?

    我想这里已经回答了这个问题:

    下面的解释也有帮助:

    自动编码器对卷积神经网络分类任务准确性的影响

    可以合理地说,较低的编码大小导致较低的精度,并且当 编码大小达到某个数字,因为越低的编码大小意味着图像数据中的丢失越多,这意味着 重构后的图像将与原始数据更为不同。此外,即使编码的大小很大 足够了,图像数据仍然存在丢失。因此,精度仍然低于原始精度和精度 在框中,绘图停止增加。当使用足够大的编码大小训练自动编码器时 这两种情况的准确率约为92%。与CNN相比,CNN以原始数据为输入,实现了 准确率为99%,自动编码器造成的准确度损失不会太大

    这是基于研究论文

    1)每个自动编码器必须有一个编码器和一个解码器吗?

    是的,这是必须的。如果你打算把编码器和解码器训练成独立的神经网络,你可能很快就会面临这样一个问题:我们不知道编码(特征压缩集)应该是什么。 没有标签表明输入特征应与此特定编码相对应。 因此,不可能训练我们的编码器!没有编码器,我们就没有编码,因此我们没有解码器的输入功能! 这使得训练我们的解码器也不可能

    2)如何提高准确性?

    我想这里已经回答了这个问题:

    下面的解释也有帮助:

    自动编码器对卷积神经网络分类任务准确性的影响

    可以合理地说,较低的编码大小导致较低的精度,并且当 编码大小达到某个数字,因为越低的编码大小意味着图像数据中的丢失越多,这意味着 重构后的图像将与原始数据更为不同。此外,即使编码的大小很大 足够了,图像数据仍然存在丢失。因此,精度仍然低于原始精度和精度 在框中,绘图停止增加。当使用足够大的编码大小训练自动编码器时 这两种情况的准确率约为92%。与CNN相比,CNN以原始数据为输入,实现了 准确率为99%,自动编码器造成的准确度损失不会太大

    这是基于研究论文