python - Sklearn+Gensim : How to use Gensim's Word2Vec embedding for Sklearn text classification

标签 python machine-learning scikit-learn gensim

我正在构建一个多标签文本分类程序,我正在尝试使用 OneVsRestClassifier+XGBClassifier 对文本进行分类。最初,我使用 Sklearn 的 Tf-Idf 矢量化来矢量化文本,效果很好。现在我使用 Gensim 的 Word2Vec 对文本进行矢量化。然而,当我将矢量化数据输入 OneVsRestClassifier+XGBClassifier 时,在分割测试数据和训练数据的行上出现以下错误:

TypeError: Singleton array array(, dtype=object) cannot be considered a valid collection.

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

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是字符串列表(我试图分类的文本描述)。

最佳答案

x这里变成 gensim.models.word2vec.Word2Vec 的 numpy 数组转换对象——它实际上不是 textList 的 word2vec 表示返回的内容。

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

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

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

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)

关于python - Sklearn+Gensim : How to use Gensim's Word2Vec embedding for Sklearn text classification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599259/

相关文章:

Python)有什么方法可以获取某个文件所在的当前目录位置?

python - Kivy 在 Samsung Exynos5422 w/Mali-T628 MP6 上表现不佳

javascript - 新形状和旧形状必须具有相同数量的元素

python - 迁移学习时 TensorFlow 中的验证和评估指标问题

python - 如何训练 python 函数返回我想要的结果?

python - 如何让我的决策树模型在每个节点都提问

python - 数据帧转换后保留标题

python - 在列表之间插入的最有效方法?

python - 在python中将字符串视为文件

python - 如何应用 sklearn 的 EllipticEnvelope 找出给定数据集中的最高异常值?