首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sklearn+Gensim:如何将Gensim的Word2Vec嵌入用于Sklearn文本分类

Sklearn+Gensim:如何将Gensim的Word2Vec嵌入用于Sklearn文本分类
EN

Stack Overflow用户
提问于 2019-08-21 21:14:47
回答 1查看 10.3K关注 0票数 2

我正在构建一个多标签文本分类程序,并试图使用OneVsRestClassifier+XGBClassifier对文本进行分类。最初,我使用Sklearn的Tf-以色列国防军矢量化文本,这没有错误。现在,我使用Gensim的Word2Vec来矢量化文本。然而,当我将矢量化数据输入OneVsRestClassifier+XGBClassifier时,在拆分测试和培训数据的行中会出现以下错误:

TypeError: Singleton数组(,dtype=object)不能被视为有效的集合。

我尝试过将矢量化数据转换为一个功能数组(np.array),但这似乎不起作用。下面是我的代码:

代码语言:javascript
复制
x = np.array(Word2Vec(textList, size=120, window=6, min_count=5, workers=7, iter=15))

vectorizer2 = MultiLabelBinarizer()
vectorizer2.fit(tagList)
y = vectorizer2.transform(tagList)

# Split test data and convert test data to arrays
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size=0.20)

变量textListtagList是字符串的列表(我试图对文本描述进行分类)。

EN

回答 1

Stack Overflow用户

发布于 2019-08-21 21:57:52

这里的x变成了gensim.models.word2vec.Word2Vec对象的numpy数组转换--返回的并不是textList的word2vec表示。

想必,您想返回的是文档中每个单词的对应向量(对于表示每个文档的单个向量,最好使用Doc2Vec)。

对于一组文档,其中最冗长的文档包含n单词,那么,每个文档将由n* 120矩阵表示。

用于说明目的的未优化代码:

代码语言:javascript
复制
import numpy as np

model = x = Word2Vec(textList, size=120, window=6, 
                               min_count=5, workers=7, iter=15)

documents = []
for document in textList:
    word_vectors = []
    for word in document.split(' '): # or your logic for separating tokens
        word_vectors.append(model.wv[word])
    documents.append(np.concatenate(word_vectors))

# resulting in an n * 120 -- that is, `Word2Vec:size`-- array
document_matrix = np.concatenate(documents)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57599259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档