【问题标题】:Sklearn classifier can't be trained with Gensim Word2Vec dataSklearn 分类器无法使用 Gensim Word2Vec 数据进行训练
【发布时间】:2019-12-28 05:36:59
【问题描述】:

我正在构建一个程序,将多个标签/标签分配给文本描述。我正在使用 Scikit-Learn 的 OneVsRestClassifier+XGBClassifier 对矢量化文本描述进行分类。我正在使用 Gensim 的 Word2Vec 对文本进行矢量化。但是,当我尝试将分类器拟合到矢量化数据时,出现以下错误:

IndexError: 元组索引超出范围

下面是我的代码(错误发生在我尝试拟合分类器的最后一行):

w2vModel = Word2Vec(sentences, size=150, window=10, min_count=2, workers=multiprocessing.cpu_count())
modelCorpus = list(w2vModel.wv.vocab)

descriptions = []
for sentence in sentences:
    wordList = []
    for word in sentence: 
        if (word in modelCorpus):
            wordList.append(w2vModel.wv[word])
    descriptions.append(np.concatenate(wordList))

x = np.array(descriptions)

# Vectorize ticket labels/tags using MultiLabelBinarizer
tagList = relevantDF.Tags # Retrieve list of tags
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)
yTrain = csr_matrix(yTrain).toarray()

# Fit OneVsRestClassifier w/ XGBClassifier
clf = OneVsRestClassifier(XGBClassifier(max_depth=3, n_estimators=300, learning_rate=0.003))
clf.fit(xTrain, yTrain)

x的形状是:(8347,)

y的形状为:(8347, 24)

xTrain 的形状是:(6677,)

yTrain 的形状是:(6677, 24)

【问题讨论】:

    标签: python machine-learning scikit-learn gensim word2vec


    【解决方案1】:

    我的猜测是每个样本没有固定数量的特征。与较短的句子相比,较长的句子向描述中添加了更多的词向量。您可以对它们进行平均,而不是连接词向量:

    descriptions.append(np.mean( np.array(wordList), axis=0 ))
    

    或者你看看Doc2Vec,它会为每个句子生成一个向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2021-05-19
      • 2019-02-07
      • 1970-01-01
      • 2019-09-05
      • 2021-10-22
      相关资源
      最近更新 更多