我必须将大量文本分类为10,000多个类别。因为我仍然是学生,所以我将需要专家的建议。

我的数据是分类为商品的描述和标题。例如,标题为“大而优质的键盘”的键盘在办公>计算机>键盘类别中。

现在,我使用“ from sklearn.feature_extraction.text import TfidfVectorizer”表示我的文本数据。但是矩阵的内存太大。
您是否有代表大量数据的提示?

我当时正在考虑使用word-2-vec表示数据,然后使用神经网络进行分类。

但是我需要您的建议才能走上正确的道路!

谢谢

最佳答案

如果要减小Tfidf向量化的大小,我为您提供了两种选择。

假设您具有以下数据:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD

X = ["When I wake up in the morning I always eat apples",
"What do you eat in the morning",
"Usually I only drink coffee",
"How awful, I really cannot stand coffee"]


应用Tfidf变换时,您将得到形状为(4,21)的矩阵:

vectorizer = TfidfVectorizer()
vectorized_X = vectorizer.fit_transform(X)
vectorized_X.shape
>>> (4,21)


现在让我们假设21列太多了,我们想减少它。

选项1

您可以使用降维。一旦执行了Tfidf,最自然的是使用截断的SVD。这将对tfidf向量化执行线性降维。这样做的好处是您可以指定希望保留的新组件的数量:

svd = TruncatedSVD(n_components=2)
reduced_X = svd.fit_transform(vectorized_X)
reduced_X.shape
>>> (4,2)


选项2

Tfidf允许您指定要在向量化中保留多少个单词。然后,它返回仅在术语频率方面对前几个单词执行的向量化。

vectorizer_reduction = TfidfVectorizer(max_features = 5)
vectorized_reduced_X = vectorizer_reduction.fit_transform(X)
vectorized_reduced_X.shape
>>> (4,5)


如果我可以在两者之间做出选择,那么我会选择选项1,因为它首先考虑了所有信息,然后对其进行汇总,而选项2只是从一开始就丢弃了信息。但是我也希望选项1花费更长的时间...因此,最佳解决方案可能是两者的混合(首先应用限制性Tfidf,然后应用SVD)?

关于python-3.x - 如何在python 3中分类大量文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55911531/

10-11 09:21