如何使用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中文本分类的基本流程,想做个测试
例如(我想象的步骤):
使用好的Cinese Tokenized Text Set训练word2vec模型
model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2)
将我的句子数据集标记为单词列表数据集(最长的句子超过 8000 个单词,最短的句子少于 50 个)
1 ['你们', '好', '今天', '天气', '真', '好']
2 ['嗯', '对的']
...
9999 ['好', '就', '这样']
使用一种方法将单词列表数据集转换为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]]
填充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]]
转到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 .
有没有 word2vec 的 Convolution1D 示例 https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py。
目前正在使用gensim训练word2vec模型
我想用word2vec和keras cnn(二维不是一维)做文档分类(中文文本)。学习了cnn中文本分类的基本流程,想做个测试
例如(我想象的步骤):
使用好的Cinese Tokenized Text Set训练word2vec模型
model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2)
将我的句子数据集标记为单词列表数据集(最长的句子超过 8000 个单词,最短的句子少于 50 个)
1 ['你们', '好', '今天', '天气', '真', '好'] 2 ['嗯', '对的'] ... 9999 ['好', '就', '这样']
使用一种方法将单词列表数据集转换为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]]
填充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]]
转到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 .