首页 > 解决方案 > 如何在 python 3 中对大量文本进行分类?

问题描述

我必须对超过 10,000 个类别的大量文本进行分类。我需要专家建议,因为我还是一名学生。

我的数据是按类别分类的商业产品的描述和标题。例如,标题为“大而好的键盘”的键盘属于办公室 > 计算机 > 键盘的类别。

现在,我使用“from sklearn.feature_extraction.text import TfidfVectorizer”来表示我的文本数据。但是矩阵在内存中太大了。您对表示大量数据有什么建议吗?

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

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

谢谢

标签: python-3.xmachine-learningkerasscikit-learnnlp

解决方案


我找到了一种无需将所有数据存储在内存中即可训练分类器的解决方案。

想象一下,您有 2 个数据集用于训练 1 分类器。

#Data 1
X1_text = ["When I wake up in the morning I always eat apples",
     "What do you eat in the morning"]
y1 = [1,1] #target 1
#Data 2
X2_text = ["Usually I only drink coffee",
     "How awful, I really cannot stand coffee"]
y2 = [2,2] #target 2

我们使用散列来向量化数据

from sklearn.feature_extraction.text import HashingVectorizer
vectorizer = HashingVectorizer(decode_error='ignore', n_features=2 ** 18)
X1 = vectorizer.transform(X1_text)
X2 = vectorizer.transform(X2_text)

我们将使用 partial_fit 分两步训练 SGDClassifier。 https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html

from sklearn.linear_model.stochastic_gradient import SGDClassifier
clf = SGDClassifier()

第一步,对 X1 / y1 使用 partial_fit。参数类必须包含所有可能的类来预测。这里是 1 和 2 。注意:如果你有,例如,所有目标的变量类,你可以使用 classes = np.unique(classes)。请参阅文档。

clf.partial_fit(X1, y1, classes = [1,2])

第二步,用其他数据重新训练分类器。不要使用属性类。

clf.partial_fit(X2, y2)

推荐阅读