Sklearn分类器不能用Gensim Word2Vec d训练

2024-06-09 05:45:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个程序,为文本描述分配多个标签/标签。我正在使用scikitlearn的OneVsRestClassifier+XGBClassifier对向量化的文本描述进行分类。我用Gensim的Word2Vec来矢量化文本。但是,当我尝试将分类器与矢量化数据相匹配时,出现以下错误:

IndexError: tuple index out of range

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

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,)

钇的形状是:(6677,24)


Tags: intest文本标签word形状wordlistdescriptions
1条回答
网友
1楼 · 发布于 2024-06-09 05:45:51

我的猜测是,你没有一个固定数量的特征每个样本。一个较长的句子比一个较短的句子在描述中添加更多的词向量。您可以将它们平均化,而不是串联字向量:

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

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

相关问题 更多 >