R语言recipes中,能否用相对频率替代step_tokenfilter()?
解决方案
要在step_tokenfilter()中基于相对频率(而非默认的绝对频率)筛选token,可以通过以下步骤实现:
方法一:预计算相对频率并传入筛选词表
先在训练数据上计算经过停用词过滤后的token相对频率,筛选出目标数量的高频词,再将这些词传入step_tokenfilter()的tokens参数,替代默认的绝对频率排序逻辑:
library(tidytext) library(dplyr) library(recipes) # 1. 在训练数据上计算token相对频率,筛选前1000个高频词 token_rel_freq <- data_train %>% # 拆分token unnest_tokens(token, sentence_lemma) %>% # 移除停用词 anti_join(tibble(token = stopwords_list), by = "token") %>% # 统计绝对频次+计算相对频率 count(token, name = "abs_count") %>% mutate(rel_freq = abs_count / sum(abs_count)) %>% # 按相对频率降序排序,取前1000个 arrange(desc(rel_freq)) %>% slice_head(n = 1000) %>% pull(token) # 2. 修改预处理流程,使用预筛选的词表过滤token data_rec <- recipe(year ~ sentence_lemma, data = data_train) %>% step_tokenize(sentence_lemma) %>% step_stopwords(sentence_lemma, custom_stopword_source = stopwords_list) %>% step_tokenfilter(sentence_lemma, tokens = token_rel_freq) %>% # 传入预筛选词表 step_tfidf(sentence_lemma) %>% step_normalize(all_predictors())
关键说明
- 该方法严格基于训练数据计算相对频率,避免了数据泄露问题,符合机器学习预处理的规范。
step_tokenfilter()本身没有内置的相对频率过滤参数,通过预计算词表的方式是最直接的替代方案。
内容的提问来源于stack exchange,提问作者Malichot
相关产品推荐
相关产品推荐

