如何缩小词袋模型?

Posted

技术标签:

【中文标题】如何缩小词袋模型?【英文标题】:How to shrink a bag-of-words model? 【发布时间】:2020-01-31 12:29:14 【问题描述】:

问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋特征集。我的模型大小达到 30 GB,我确信特征集中的大多数单词对整体性能没有贡献。

如何在不损失(太多)性能的情况下缩小大词袋模型?

【问题讨论】:

【参考方案1】:

如果您不想更改神经网络的架构而只是想减少内存占用,可以进行的调整是减少 CountVectorizer 注释的术语。 从scikit-learn 文档中,我们(至少)有三个参数来减少词汇量。

ma​​x_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1.0

在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1

在构建词汇表时,忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。

ma​​x_features : int 或 None,默认=None

如果不是 None,则构建一个仅考虑按语料库中的词频排序的最高 max_features 的词汇表。 如果词汇表不是 None,则忽略此参数。

首先,尝试使用 ma​​x_dfmin_df。如果尺寸仍然不符合您的要求,您可以使用 ma​​x_features 随意降低尺寸。

注意ma​​x_features 调整可以比其他参数以更高的比率降低分类准确度

【讨论】:

【参考方案2】:

使用特征选择。特征选择使用一些评分函数,根据它们相对于标签的分布从数据集中删除特征。

例如,很少出现或随所有标签随机出现的特征不太可能有助于准确分类,并且得分较低。

这是一个使用sklearn的示例:

from sklearn.feature_selection import SelectPercentile

# Assume some matrix X and labels y
# 10 means only include the 10% best features
selector = SelectPercentile(percentile=10)

# A feature space with only 10% of the features
X_new = selector.fit_transform(X, y)

# See the scores for all features
selector.scores

与往常一样,请务必仅对您的训练数据调用 fit_transform。使用开发或测试数据时,仅使用transform。有关其他文档,请参阅 here。

请注意,还有一个 SelectKBest,它的作用相同,但它允许您指定要保留的特征的绝对数量,而不是百分比。

【讨论】:

以上是关于如何缩小词袋模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark 中正确地将数字特征与文本(词袋)结合起来?

NLP之词袋模型和TF-IDF模型

词袋模型(bag of words)构建实战

视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析

自然语言处理----词袋模型

NLP⚠️学不会打我! 半小时学会基本操作 3⚠️ 词袋模型