将LIME应用于quanteda文本模型时遭遇corpus方法适配错误
问题根源与解决方法
问题出在LIME内部的数据流逻辑:你设置了preprocess = get_matrix,所以LIME会先把原始文本转成dfm对象,然后在调用predict_model时,传入的newdata其实是这个预处理后的dfm对象,而不是你以为的原始文本向量——但你的predict_model函数里直接调用corpus(newdata),而corpus()并不支持dfm类型的输入,所以报错了。
1. 修正predict_model.textmodel_nb_fitted函数
我们需要先判断输入的newdata类型,如果是dfm就直接用,否则再转成corpus和dfm:
predict_model.textmodel_nb_fitted <- function(x, newdata, type, ...) { # 判断输入类型:如果是dfm就直接处理,否则转成dfm if (inherits(newdata, "dfm")) { X <- dfm_select(newdata, x$data$x) } else { X <- corpus(newdata) X <- dfm_select(dfm(X), x$data$x) } res <- predict(x, newdata = X, ...) switch( type, raw = data.frame(Response = res$nb.predicted, stringsAsFactors = FALSE), prob = as.data.frame(res$posterior.prob, check.names = FALSE) ) }
2. 优化get_matrix函数(可选但推荐)
让它能同时处理文本向量和数据框输入,提升兼容性:
get_matrix <- function(x){ corpus <- quanteda::corpus(x) dfm <- quanteda::dfm(corpus, remove_url = TRUE, remove_punct = TRUE, remove = stopwords("english")) return(dfm) }
3. 重新运行流程
修改完以上两个函数后,重新初始化explainer并运行explain函数,就能正常执行了。
内容的提问来源于stack exchange,提问作者Kasia Kulma
相关产品推荐
相关产品推荐

