Neural network 如何在keras CNN(2D)中使用word2vec进行文本分类?

Neural network 如何在keras CNN(2D)中使用word2vec进行文本分类?,neural-network,deep-learning,keras,gensim,word2vec,Neural Network,Deep Learning,Keras,Gensim,Word2vec,有一个没有word2vec的卷积1D示例 目前,我正在使用gensim来训练word2vec模型 我想用word2vec和KerasCNN(2D而不是1D)来做文档分类(中文文本)。我在cnn学习了文本分类的基本流程,想做一个测试 例如(我想象的步骤): 使用一个好的电影化文本集来训练word2vec模型 model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2) 将我的句子数据集标记为单词

有一个没有word2vec的卷积1D示例

目前,我正在使用gensim来训练word2vec模型

我想用word2vec和KerasCNN(2D而不是1D)来做文档分类(中文文本)。我在cnn学习了文本分类的基本流程,想做一个测试

例如(我想象的步骤):
  • 使用一个好的电影化文本集来训练word2vec模型

    model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2)
    
  • 将我的句子数据集标记为单词列表数据集(最长的句子超过8000个单词,最短的少于50个)

  • 使用方法将单词列表数据集转换为word2vec数据集

    通过训练模型将每个年龄段中的每个单词转换为一个vec

    1     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    2     [[word2vec size=200], [word2vec size=200]]
    ...
    9999  [[word2vec size=200], [word2vec size=200], [word2vec size=200]]
    
  • Pad word2vec数据集(大小=200零数组)

  • 转到CNN(使用卷积2D)



  • 我搜索了很长时间,但找不到任何方法来执行步骤3(步骤3之后,步骤5中的参数和层设置也很难理解)

    将单个句子转换为二维向量

    假设您有一个单词列表和一个模型,您可以:

    import numpy as np
    sentence_vec = None
    for word in sentence:
        word_vec = np.expand_dims(model[word], axis=0)
        if sentence_vec is None:
            sentence_vec = word_vec
        else:
            sentence_vec = np.concatenate((sentence_vec, word_vec), axis=0)
    

    至于第5步-如果你列出你遇到的问题,这将是很有帮助的。基本上,您只需将两个1D操作(卷积1D、GlobalMapooling1D)更改为它们的2D计数器部件。

    谢谢,没想到它这么简单,只需
    model[word]
    !我查看了gensim.models.Word2Vec的所有方法,但没有找到类似于
    transform
    的东西,这甚至让我想到如果我选择了错误的库。。。关于
    第5步
    ,我只是不知道它需要多少层,每一层使用哪一个退出?什么激活功能?等这一步很难理解。如果没有特定问题的经验,很难猜测哪种体系结构工作得最好。我建议寻找做类似事情的文章,并尝试他们正在做的事情。这将包括您链接但更新为2D的1D示例,以及在文本上进行CNN的其他作品(CharCNN和其他)。这主要是一个反复试验的问题。我发布了一个关于如何使用
    卷积2D
    的问题,您是否介意看看:
    1     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    2     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    ....
    9999  [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    
    import numpy as np
    sentence_vec = None
    for word in sentence:
        word_vec = np.expand_dims(model[word], axis=0)
        if sentence_vec is None:
            sentence_vec = word_vec
        else:
            sentence_vec = np.concatenate((sentence_vec, word_vec), axis=0)