text2vec 0.6.4兼容0.5.1训练模型:create_dtm()报错修复问询
问题:text2vec版本升级后旧LDA模型推理报错修复方案
背景与报错情况
我们使用text2vec 0.5.1 + R 3.6.3训练了LDA模型,每日基于该模型对新增文章数据做推理。系统即将升级至text2vec 0.6.4 + R 4.4.2,测试时发现原推理任务运行create_dtm()函数时报错:
Error in corpus_insert(vocab_corpus_ptr, iterator, grow_dtm, skip_grams_window_context, : argument "binary_cooccurence" is missing, with no default
尝试修改模型中的vectorizer函数,显式设置binary_cooccurence = FALSE后,又出现新错误:
Error in cpp_vocabulary_corpus_create(vocabulary$term, attr(vocabulary, : could not find function "cpp_vocabulary_corpus_create"
核心需求:保留0.5.1版本训练的模型(不重新训练),修复上述报错。
可行修复方案
方案1:用新版本API重构vectorizer(推荐)
text2vec 0.6.x版本重构了底层接口,cpp_vocabulary_corpus_create已被废弃,官方推荐使用vocab_vectorizer函数创建向量器,可直接兼容旧模型的词汇表:
- 从旧模型中提取词汇表:
# 从加载的旧模型对象中获取vocabulary vocabulary <- lda_model_from_rds$vectorizer_env$vocabulary # 若上述路径无效,尝试从lda_model中提取(取决于训练时的保存逻辑) # vocabulary <- lda_model$vocabulary
- 用新版本API创建适配的vectorizer:
# 创建与旧模型词汇表一致的vectorizer,显式设置参数匹配旧行为 vectorizer <- vocab_vectorizer( vocabulary, grow_dtm = FALSE, # 禁止扩展词汇表,与旧模型逻辑一致 binary_cooccurence = FALSE )
- 重新运行
create_dtm:
new_dtm <- create_dtm(it, vectorizer, type = "dgTMatrix")
方案2:修改自定义vectorizer适配新接口
若必须保留原vectorizer的结构,需替换废弃的C++函数调用,适配新版本参数:
# 先确保vocabulary已正确提取 vocabulary <- lda_model_from_rds$vectorizer_env$vocabulary vectorizer <- function (iterator, grow_dtm, skip_grams_window_context, window_size, weights, binary_cooccurence = FALSE) { # 替换为新版本的C++创建函数 vocab_corpus_ptr = cpp_create_vocab_corpus( vocabulary$term, attr(vocabulary, "ngram")[[1]], attr(vocabulary, "ngram")[[2]], attr(vocabulary, "stopwords"), attr(vocabulary, "sep_ngram") ) setattr(vocab_corpus_ptr, "ids", character(0)) setattr(vocab_corpus_ptr, "class", "VocabCorpus") # 适配新版本corpus_insert的参数(可能需根据文档调整) corpus_insert( vocab_corpus_ptr, iterator, grow_dtm, skip_grams_window_context, window_size, weights, binary_cooccurence, min_count = 1 # 新增参数,匹配旧模型的最小词频要求 ) }
关键注意事项
- 必须确保从旧模型中正确提取
vocabulary对象,这是向量器匹配旧模型的核心。 - 显式设置
grow_dtm = FALSE,避免新版本自动扩展词汇表,保证与旧模型的词汇范围完全一致。 - 若原训练时使用了ngram、停用词等特殊配置,需确保新vectorizer的对应参数与旧配置完全相同。
内容的提问来源于stack exchange,提问作者fyt
相关产品推荐
相关产品推荐

