如何使用单词的向量表示(从Word2Vec等获得)作为分类器的特征?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用单词的向量表示(从Word2Vec等获得)作为分类器的特征?相关的知识,希望对你有一定的参考价值。

我熟悉使用BOW功能进行文本分类,其中我们首先找到语料库词汇表的大小,这些词汇表的大小就是我们的特征向量。对于每个句子/文件及其所有组成单词,我们然后根据该单词/文档中该单词的缺席/存在而放置0/1。

但是,既然我正在尝试使用每个单词的向量表示,那么创建全局词汇是必不可少的吗?

答案

假设向量的大小为N(通常在50或500之间)。推广泛化BOW的传统的简单方法是用N个零替换0位(在BOW中),并用真实向量(比如来自Word2Vec)替换1位(在BOW中)。那么特征的大小将是N * | V | (与BOW中的| V |特征向量相比,其中| V |是词汇的大小)。对于相当数量的训练实例,这种简单的概括应该可以正常工作。

为了使特征向量更小,人们使用各种技术,例如使用具有各种操作的向量的递归组合。 (参见递归/递归神经网络和类似技巧,例如:http://web.engr.illinois.edu/~khashab2/files/2013_RNN.pdfhttp://papers.nips.cc/paper/4204-dynamic-pooling-and-unfolding-recursive-autoencoders-for-paraphrase-detection.pdf

另一答案

要为每个句子获取固定长度的特征向量,尽管每个句子中的单词数不同,请执行以下操作:

  1. 将每个句子标记为组成单词
  2. 为每个单词得到单词向量(如果它不是忽略该单词)
  3. 平均你得到的所有单词向量
  4. 这总会给你一个d-dim向量(d是单词向量暗淡)

下面是代码片段

def getWordVecs(words, w2v_dict):
    vecs = []
    for word in words:
        word = word.replace('
', '')
        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

单词是在对一个句子进行标记后获得的标记列表。

以上是关于如何使用单词的向量表示(从Word2Vec等获得)作为分类器的特征?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Word2Vec 获取单词列表的向量?

如何同时使用 word2vec 和 RNN?

Glove词向量

word2vec是如何得到词向量的?

词向量:GloVe

word2vec是如何得到词向量的