python-3.x - 如何在 python 3 中对大量文本进行分类?
问题描述
我必须对超过 10,000 个类别的大量文本进行分类。我需要专家建议,因为我还是一名学生。
我的数据是按类别分类的商业产品的描述和标题。例如,标题为“大而好的键盘”的键盘属于办公室 > 计算机 > 键盘的类别。
现在,我使用“from sklearn.feature_extraction.text import TfidfVectorizer”来表示我的文本数据。但是矩阵在内存中太大了。您对表示大量数据有什么建议吗?
我正在考虑使用 word-2-vec 来表示数据,然后使用神经网络进行分类。
但我需要你的建议才能走上正确的道路!!
谢谢
解决方案
我找到了一种无需将所有数据存储在内存中即可训练分类器的解决方案。
想象一下,您有 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)
推荐阅读
- reactjs - 如何在加载时打开 React Native Maps 标记的标注
- java - NoSuchAlgorithmException[1.2.840.113549.1.1.1 KeyFactory 不可用];
- python - 无法从“img”标签中提取“src”属性
- c# - 如何计算 WebHook 的 ms 签名?
- javascript - 如何在 Javascript/NodeJS 中存储令牌
- networkx - networkx 中的 SimRank 未运行
- javascript - 谷歌表单编辑链接不提交现有值,只提交使用谷歌脚本时更改的值?
- json - 在 Controller 中为每个 RequestMapping 配置不同的 FAIL_ON_UNKNOWN_PROPERTIES
- c# - Xamarin Android反射配对蓝牙目标异常
- html - 文字仅显示在网页顶部