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

Watson Assistant结合LIME做模型解释报错,是否仅支持Scikit-learn?

解决LIME解释Watson Assistant预测的问题

LIME的模型支持范围

LIME并非只支持Scikit-learn模型,它可以适配任何具备预测能力的模型,核心要求是你能提供一个符合格式要求的预测函数——这个函数需要接收文本样本列表,返回对应每个样本的类别置信度数组。

解决"TypeError: 'list' object is not callable"错误

出现这个错误的核心原因是:你向explain_instance方法传入的是get_watson_assistant_response执行后的结果(一个list),但该方法需要的是可调用的预测函数,而非函数的执行结果。

具体修复步骤

  1. 定义符合LIME要求的预测函数
    这个函数要接收文本列表作为输入,批量返回每个文本对应的意图置信度数组,且数组的类别顺序必须固定:

    import numpy as np
    
    def watson_predict_proba(texts):
        confidence_list = []
        for text in texts:
            # 调用你的方法获取单条文本的意图置信度
            # 假设get_watson_assistant_response返回固定顺序的置信度列表,比如[0.8, 0.1, 0.1]
            confidences = get_watson_assistant_response(text)
            confidence_list.append(confidences)
        # 转换为numpy数组,符合LIME的输入格式要求
        return np.array(confidence_list)
    

    如果你的get_watson_assistant_response返回的是字典(比如{"意图A":0.8, "意图B":0.1, "意图C":0.1}),需要先将其转换为固定顺序的列表:

    # 先定义固定的意图顺序
    INTENT_ORDER = ["意图A", "意图B", "意图C"]
    
    def watson_predict_proba(texts):
        confidence_list = []
        for text in texts:
            intent_dict = get_watson_assistant_response(text)
            # 按固定顺序提取置信度
            confidences = [intent_dict[intent] for intent in INTENT_ORDER]
            confidence_list.append(confidences)
        return np.array(confidence_list)
    
  2. 正确调用LIME的解释方法
    初始化LimeTextExplainer后,将定义好的watson_predict_proba函数传入explain_instance,而非函数的执行结果:

    from lime.lime_text import LimeTextExplainer
    
    # 初始化解释器,传入类别名称(要和INTENT_ORDER对应)
    explainer = LimeTextExplainer(class_names=INTENT_ORDER)
    # 要解释的目标用户文本
    target_text = "我想查询我的订单状态"
    # 生成解释结果,num_features指定要展示的关键特征数量
    explanation = explainer.explain_instance(target_text, watson_predict_proba, num_features=5)
    
    # 可以打印或可视化解释结果
    explanation.show_in_notebook()
    # 或者输出文本格式的解释
    print(explanation.as_list())
    

关键注意事项

  • 预测函数必须接收文本列表,而非单条文本,因为LIME会生成多个扰动后的文本样本进行测试。
  • 返回的置信度数组必须保持类别顺序一致,否则解释结果会对应错误的意图。
  • 如果Watson Assistant的API调用存在速率限制,建议在预测函数中添加适当的延迟,避免触发限流。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:47:46