如何缩小词袋模型?
Posted
技术标签:
【中文标题】如何缩小词袋模型?【英文标题】:How to shrink a bag-of-words model? 【发布时间】:2020-01-31 12:29:14 【问题描述】:问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋特征集。我的模型大小达到 30 GB,我确信特征集中的大多数单词对整体性能没有贡献。
如何在不损失(太多)性能的情况下缩小大词袋模型?
【问题讨论】:
【参考方案1】:如果您不想更改神经网络的架构而只是想减少内存占用,可以进行的调整是减少 CountVectorizer 注释的术语。
从scikit-learn
文档中,我们(至少)有三个参数来减少词汇量。
max_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1.0
在构建词汇表时,忽略文档频率严格高于给定阈值的术语(特定于语料库的停用词)。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。
min_df : 在 [0.0, 1.0] 或 int 范围内浮动,默认 = 1
在构建词汇表时,忽略文档频率严格低于给定阈值的术语。该值在文献中也称为截止值。如果是float,参数代表文档的比例,整数绝对计数。如果词汇表不是 None,则忽略此参数。
max_features : int 或 None,默认=None
如果不是 None,则构建一个仅考虑按语料库中的词频排序的最高 max_features 的词汇表。 如果词汇表不是 None,则忽略此参数。
首先,尝试使用 max_df 和 min_df。如果尺寸仍然不符合您的要求,您可以使用 max_features 随意降低尺寸。
注意:max_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 中正确地将数字特征与文本(词袋)结合起来?