如何使用TF-IDF构建词n-gram的训练向量

2 投票
1 回答
594 浏览
提问于 2025-04-28 09:27

我的任务是用支持向量机(SVM)进行文本分类,使用词的n-gram作为特征。
在使用TF-IDF之前,我的代码是:

word_dic = ngram.wordNgrams(text, n)
freq_term_vector = [word_dic[gram] if gram in word_dic else 0 for gram in global_vector]
X.append(freq_term_vector)

这个代码运行得很好。不过,当我尝试使用TF-IDF时,代码如下:

freq_term_vector = [word_dic[gram] if gram in word_dic else 0 for gram in global_vector]
tfidf = TfidfTransformer(norm="l2")
tfidf.fit(freq_term_vector)
X.append(tfidf.transform(freq_term_vector).toarray())

训练部分可以正常完成,但当程序运行到预测部分时,它提示:

 clf.predict(X_test)
  File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 223, in predict
    scores = self.decision_function(X)
  File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 207, in decision_function
    dense_output=True) + self.intercept_
  File "/usr/lib/python2.7/dist-packages/sklearn/utils/extmath.py", line 83, in safe_sparse_dot
    return np.dot(a, b)
ValueError: shapes (1100,1,38) and (1,11) not aligned: 38 (dim 2) != 1 (dim 0)

训练方法和预测方法是一样的。我该如何解决这个对齐问题?有没有人能帮我检查一下我上面的代码,或者给我一些建议?

暂无标签

1 个回答

1

我觉得问题出在添加内容的部分,试试下面这个:

...
X = tfidf.transform(freq_term_vector)
...
X_test = tfidf.transform(freq_term_vector_test)
clf.predict(X_test)

撰写回答