You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:22