如何使用word2vec和keras CNN(2D)做文本分类?

How to use word2vec with keras CNN (2D) to do text classification?

有没有 word2vec 的 Convolution1D 示例 https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py

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

我想用word2vec和keras cnn(二维不是一维)做文档分类(中文文本)。学习了cnn中文本分类的基本流程,想做个测试

例如(我想象的步骤):

  1. 使用好的Cinese Tokenized Text Set训练word2vec模型

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

    1     ['你们', '好', '今天', '天气', '真', '好']
    2     ['嗯', '对的']
    ...
    9999  ['好', '就', '这样']
    
  3. 使用一种方法将单词列表数据集转换为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]]
    
  4. 填充word2vec数据集(大小为200的零数组)

    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]]
    
  5. 转到CNN(使用Convolution2D)


找了半天,没找到第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 操作(Convolution1D,GlobalMaxPooling1D)更改为它们的 2D counter-parts .