python-3.x - 如何在Python 3中对大量文本进行分类?

标签 python-3.x machine-learning keras scikit-learn nlp

我必须对超过 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/

相关文章:

python - 在 Keras 中对具有不同分辨率的图像进行训练和验证

python - 为什么这个 keras 网络不是 "learning"?

python-3.x - Keras、 tensorflow : Merge two different model output into one

python - 如何在python中读取动态生成的文件并建立索引

python - 如何在自定义颜色图中获取屏蔽值的透明度 (matplotlib/python)

python - 将数据目录拆分为训练和测试目录,并保留子目录结构

tensorflow - 深度神经网络: could a random batch size be useful for training?

python-3.x - 从 Cloud Functions 中的父目录或同级目录导入模块?

python - 将代码从 Python 2.x 转换为 3.x

tensorflow - 如何计算 CNN 的权重数?