我熟悉使用BOW功能进行文本分类,其中我们首先找到语料库词汇表的大小,该词汇量变为我们的特征向量的大小。对于每个句子/文件及其所有组成单词,我们然后根据该单词/文档中该单词的缺席/存在而放置0/1。
但是,现在我正在尝试使用每个单词的向量表示,创建全局词汇必不可少?
答案 0 :(得分:7)
假设向量的大小为N(通常在50或500之间)。推广泛化BOW的传统的简单方法是用N个零替换0位(在BOW中),并用真实向量(比如来自Word2Vec)替换1位(在BOW中)。那么特征的大小将是N * | V | (与BOW中的| V |特征向量相比,其中| V |是词汇的大小)。这种简单的概括应该适用于相当数量的训练实例。
为了使特征向量更小,人们使用各种技术,例如使用向量的递归组合和各种操作。 (请参阅递归/递归神经网络和类似技巧,例如:http://web.engr.illinois.edu/~khashab2/files/2013_RNN.pdf或http://papers.nips.cc/paper/4204-dynamic-pooling-and-unfolding-recursive-autoencoders-for-paraphrase-detection.pdf)
答案 1 :(得分:0)
要为每个句子获取固定长度的特征向量,尽管每个句子中的单词数不同,请执行以下操作:
下面是代码snipet
def getWordVecs(words, w2v_dict):
vecs = []
for word in words:
word = word.replace('\n', '')
try:
vecs.append(w2v_model[word].reshape((1,300)))
except KeyError:
continue
vecs = np.concatenate(vecs)
vecs = np.array(vecs, dtype='float')
final_vec = np.sum(vecs, axis=0)
return final_vec
单词是在对一个句子进行标记后获得的标记列表。