小编Geo*_* Y.的帖子

获取 TF-IDF 数据时的内存问题

介绍

\n

我正在努力对大型推文数据集进行文本分类,如果有人能给我指出正确的方向,我将不胜感激。

\n

总体而言,我需要训练一个分类器来区分庞大数据集(最多 600 万个文本)上的两个类。我一直在食谱框架中执行此操作,然后通过tidymodels运行 glmnet lasso 。具体问题是我在计算 tf-idf 时内存不足。

\n

问题

\n

我应该朝哪个方向努力来解决这个问题?我基本上可以批量手动获取所有 tf​​-idf 值,然后再次手动将它们组合成稀疏矩阵对象。这听起来很肛门,肯定有人以前遇到过这个问题并解决了它?另一种选择是 Spark,但它远远超出了我目前的能力范围,并且对于一次性任务来说可能有些过大了。或者也许我遗漏了一些东西,而现有的工具能够做到这一点?

\n

具体来说,我在运行以下命令时遇到两种问题(变量应该是不言自明的,但我稍后将提供完整的可重现代码):

\n
recipe <-\n  recipe(Class ~ text, data = corpus) %>% \n  step_tokenize(text) %>%\n  step_stopwords(text) %>% \n  step_tokenfilter(text, max_tokens = m) %>% \n  step_tfidf(text) %>% \n  prep()\n
Run Code Online (Sandbox Code Playgroud)\n

如果corpus太大或者m太大,Rstudio就会崩溃。如果它们相当大,它会发出警告

\n
In asMethod(object) :\n  sparse->dense coercion: allocating vector of size 1.2 GiB\n
Run Code Online (Sandbox Code Playgroud)\n

我在网上没有找到相关内容,我也不太明白。为什么它试图强迫某些东西从稀疏变成密集?这对于任何大型数据集来说肯定会带来麻烦。难道我做错了什么?如果这是可以预防的,也许我的完整数据集会有更好的运气?

\n

或者是否没有希望step_tfidf应对 600 万个观测值并且对最大令牌没有限制?

\n …

r classification tf-idf tidytext tidymodels

3
推荐指数
1
解决办法
139
查看次数

标签 统计

classification ×1

r ×1

tf-idf ×1

tidymodels ×1

tidytext ×1