imodelsX
用 LLM 内嵌可解释性,让 Tree-Prompt、iPrompt 等算法自动从数据中发现结构化提示词
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 LLM 内嵌可解释性,让 Tree-Prompt、iPrompt 等算法自动从数据中发现结构化提示词
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
深夜,你盯着屏幕上那条准确率高达 92% 的文本分类模型,内心却毫无底气——它到底是怎么判断的?是捕捉到了真正的语义,还是碰巧学会了数据集中的某种虚假相关性?
这种焦虑,困扰着每一位认真做机器学习的从业者。模型越大、效果越好,「黑箱」就越黑。传统的 SHAP、LIME 等事后解释方法固然有效,但本质上仍是"事后诸葛亮",解释本身并非模型决策的一部分。
imodelsX 带来了一个更根本的思路:用大语言模型(LLM)本身来解释和引导文本模型。它不是给黑箱加一层解释外壳,而是让 LLM 成为模型的组成部分,让可解释性内嵌于决策过程本身。
imodelsX 的前身是同样由 Chandan Singh 主导开发的 imodels 库(GitHub 1.4k★,发表于 JOSS 2021),该项目专注于表格数据的可解释建模,提供了规则集、决策树、贝叶斯规则列表等可解读模型的标准实现。
在此基础上,imodelsX 将可解释性的边界扩展到了自然语言处理领域,并引入了 LLM 作为核心组件。Candan Singh 本人在 UC Berkeley 获得 PhD 后,目前在微软研究院担任高级研究员,专注于 ML 可解释性在科学和医学领域的应用,其工作曾发表于 PNAS、Nature Communications、NeurIPS、ICML 等顶会。
当前 LLM 应用中存在一个根本矛盾:LLM 能力强大但不可控。Prompt 工程虽然有效,但本质上是一种「暴力搜索」——靠试错找到合适的提示,而非系统性地理解数据与输出之间的映射关系。
imodelsX 通过结构化 Prompt 学习来解决这个矛盾:不是让开发者手动设计 Prompt,而是让算法自动从数据中发现最优的提示词,并将提示组织成语义连贯的结构。
Tree-Prompt 是 imodelsX 的旗舰功能,它将决策树的思想移植到了 Prompt 设计层面。开发者定义一组候选提示(如「这部电影____」「情感____」),算法自动学习哪些提示在哪些数据子集上表现最佳,最终生成一棵 Prompt 决策树。
实际效果令人印象深刻:在 IMDb 情感分类任务中,Tree-Prompt 仅用 5 个候选提示,就在验证集上达到了 70% 的准确率,并且能清晰展示每个分支的决策逻辑。树的每个叶子节点对应一个最终标签(如「Positive」),从根到叶的路径清晰记录了决策依据。
from imodelsx import TreePromptClassifier
prompts = [
"This movie is",
" Positive or Negative? The movie was",
" The sentiment of the movie was",
" The plot of the movie was really",
" The acting in the movie was",
]
m = TreePromptClassifier(checkpoint="gpt2", prompts=prompts, ...)
m.fit(train_texts, train_labels)
preds = m.predict(val_texts)
代码完全兼容 scikit-learn API,fit/predict 风格对熟悉 sklearn 的开发者极为友好。
如果说 Tree-Prompt 是在已有的提示池中做选择,iPrompt 则更进一步——它从原始数据对中自动生成有意义的提示词。给定一组「输入→输出」样例(如「两个数字相加」的任务),iPrompt 通过梯度优化在 LLM 的 embedding 空间中搜索最优的 few-shot 示例组合,最终输出人类可读的自然语言提示。
这种方法的核心洞察是:LLM 的 embedding 空间中隐藏着丰富的语义结构,通过端到端学习可以在这个空间中精确定位「正确的推理模式」。
除了 Prompt 学习,imodelsX 还提供了两条将 LLM 能力注入传统模型的技术路线:
这两项技术均出自微软研究院与华盛顿大学合作的论文《Interpretable ML for Science with Foundation Model Augmented Models》(Nature Communications 2023),在多个科学数据集上验证了有效性。
传统的文本 embedding 是一个稠密向量,对人类不友好。QAEmb 提出了一种新思路:用 LLM 生成「可被人类理解」的 embedding。具体做法是向 LLM 提问一组预先设计的问题,用 LLM 的回答作为样本的「可解释特征向量」。
例如,要 embedding 一篇新闻文章,可以问:「这篇文章的主题是什么?」「作者态度是正面还是负面?」「涉及哪些实体?」——每个问题的答案就是一个维度,所有答案拼在一起就是这个文章的可解释 embedding。
imodelsX 采用清晰的模块化架构:
imodelsx/
├── __init__.py # 统一导出
├── llm.py # LLM 调用封装(支持多种后端)
├── data.py # HuggingFace 数据集便捷加载
├── embeddings.py # embedding 生成工具
├── metrics.py # 评估指标
├── viz.py # 可视化工具
├── treeprompt/ # Tree-Prompt 实现
├── iprompt/ # iPrompt 实现
├── auglinear/ # Aug-Linear 实现
├── augtree/ # Aug-Tree 实现
├── qaemb/ # QAEmb 实现
├── sasc/ # SASC 实现
├── d3/ # D3 实现
└── kan/ # KAN 实现
每个子模块均可独立使用,通过顶层 __init__.py 提供统一的 TreePromptClassifier、auglinear.AugLinearClassifier 等 API。依赖方面,库本身依赖 PyTorch、Transformers、LangChain 等主流 ML 生态,可通过 pip install imodelsx 一键安装。
imodelsX 几乎所有功能都依赖 LLM 的能力。作者在文档中明确提到,Tree-Prompt 等方法在小模型(如 GPT-2)上可能效果不佳,需要 GPT-3.5/4 级别的模型才能充分发挥潜力。这意味着实际使用中,用户需要自行管理 LLM API 成本或本地部署的开销。
Tree-Prompt 本质上仍是在离散的 Prompt 集合上做组合搜索,当候选提示数量增加时,搜索空间呈指数增长。当前实现对候选提示的数量有一定限制(一般不超过几十个),不适用于需要数百个独立特征的场景。
部分学者对「LLM 生成解释」本身提出了质疑:LLM 的解释是否可靠?是否会「 hallucination 」出看似合理但实际错误的推理链?imodelsX 目前没有提供对解释本身质量的自动评估机制,用户需要自行判断 LLM 生成解释的准确性。
imodelsX 代表了可解释 AI 领域的一个重要趋势——从「事后解释」走向「内置可解释」。当 LLM 本身成为模型的一部分,解释不再是附加产物,而是决策过程的直接输出。
从增长曲线看,该项目虽然 stars 数量(176)目前不高,但背后是微软研究院的持续投入和 Nature Communications 等顶刊的学术背书,在可解释 AI 细分领域具有较高的学术影响力和工程参考价值。
安装:
pip install imodelsx
示例(Tree-Prompt 情感分类):
from imodelsx import TreePromptClassifier
m = TreePromptClassifier(checkpoint="gpt2", prompts=prompts)
m.fit(train_texts, train_labels)
accuracy = (m.predict(val_texts) == val_labels).mean()
官方文档:https://csinva.io/imodelsX/
Demo Notebook:https://github.com/csinva/imodelsX/tree/master/demo_notebooks