imodelsX

imodelsX

多功能文本模型分析与优化库

imodelsX是一个与Scikit-learn兼容的Python库,专注于文本模型和数据的解释、预测和优化。该库集成了多种可解释的建模技术,包括Tree-Prompt、iPrompt和Aug-Linear等。imodelsX还提供LLM封装器和数据集封装器等实用工具,简化文本数据处理流程。通过支持多种解释方法,imodelsX能够生成自然语言解释,并为用户提供易于实现的基线模型。

imodelsX文本模型可解释性机器学习自然语言处理Github开源项目
<p align="center"> <img src="https://microsoft.github.io/aug-models/embgam_gif.gif" width="18%"> <img align="center" width=40% src="https://yellow-cdn.veclightyear.com/ab5030c0/3ad73386-e642-4f9f-851f-bc4f7834f56f.svg?sanitize=True&kill_cache=1"> </img> <img src="https://microsoft.github.io/aug-models/embgam_gif.gif" width="18%"></p> <p align="center">一个用于解释、预测和引导文本模型/数据的Scikit-learn友好库。<br/>同时包含一些用于文本数据入门的实用工具。 </p> <p align="center"> <a href="https://github.com/csinva/imodelsX/tree/master/demo_notebooks">📖 演示笔记本</a> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/e60fe96b-9248-4708-b906-9925b84f43c9.svg"> <img src="https://img.shields.io/badge/python-3.9+-blue"> <img src="https://img.shields.io/pypi/v/imodelsx?color=green"> </p>

可解释建模/引导

模型参考输出描述
Tree-Prompt🗂️, 🔗, 📄, 📖,解释<br/>+ 引导生成提示树以<br/>引导LLM(官方
iPrompt🗂️, 🔗, 📄, 📖解释<br/>+ 引导生成解释数据模式的提示(官方
AutoPromptㅤㅤ🗂️, 🔗, 📄解释<br/>+ 引导使用输入梯度<br/>找到自然语言提示
D3🗂️, 🔗, 📄, 📖解释解释两个分布之间的差异
SASCㅤㅤ🗂️, 🔗, 📄解释使用LLM解释<br/>黑盒文本模块(官方
Aug-Linear🗂️, 🔗, 📄, 📖线性模型使用LLM提取嵌入<br/>以拟合更好的线性模型(官方
Aug-Tree🗂️, 🔗, 📄, 📖决策树使用LLM扩展特征<br/>以拟合更好的决策树(官方
QAEmb🗂️, 🔗, 📄, 📖可解释<br/>嵌入通过向LLM提问<br/>生成可解释嵌入(官方
KAN🗂️, 🔗, 📄, 📖小型<br/>网络拟合2层Kolmogorov-Arnold网络
<p align="center"> <a href="https://github.com/csinva/imodelsX/tree/master/demo_notebooks">📖</a>演示笔记本 &emsp; <a href="https://csinva.io/imodelsX/">🗂️</a> 文档 &emsp; 🔗 参考代码 &emsp; 📄 研究论文 </br> ⌛ 我们计划支持其他可解释算法,如<a href="https://arxiv.org/abs/2205.12548">RLPrompt</a>、<a href="https://arxiv.org/abs/2007.04612">CBMs</a>和<a href="https://arxiv.org/abs/2004.00221">NBDT</a>。如果您想贡献算法,欢迎提交PR 😄 </p>

通用工具

模型参考
🗂️ LLM包装器轻松调用不同的LLM
🗂️ 数据集包装器下载经过最小处理的huggingface数据集
🗂️ N元组包学习N元组的线性模型
🗂️ 线性微调在LLM嵌入之上微调单个线性层

快速入门

安装: pip install imodelsx(或者,为了更多控制,克隆并从源代码安装)

演示: 请参阅演示笔记本

自然语言解释

Tree-prompt

from imodelsx import TreePromptClassifier import datasets import numpy as np from sklearn.tree import plot_tree import matplotlib.pyplot as plt # 设置数据 rng = np.random.default_rng(seed=42) dset_train = datasets.load_dataset('rotten_tomatoes')['train'] dset_train = dset_train.select(rng.choice( len(dset_train), size=100, replace=False)) dset_val = datasets.load_dataset('rotten_tomatoes')['validation'] dset_val = dset_val.select(rng.choice( len(dset_val), size=100, replace=False)) # 设置参数 prompts = [ "这部电影是", " 积极还是消极?这部电影是", " 这部电影的情感是", " 这部电影的剧情真的是", " 这部电影的演技是", ] verbalizer = {0: " 消极。", 1: " 积极。"} checkpoint = "gpt2" # 拟合模型 m = TreePromptClassifier( checkpoint=checkpoint, prompts=prompts, verbalizer=verbalizer, cache_prompt_features_dir=None, # 'cache_prompt_features_dir/gp2', ) m.fit(dset_train["text"], dset_train["label"]) # 计算准确率 preds = m.predict(dset_val['text']) print('\nTree-Prompt 准确率 (验证集) ->', np.mean(preds == dset_val['label'])) # -> 0.7 # 比较单个提示的准确率 for i, prompt in enumerate(prompts): print(i, prompt, '->', m.prompt_accs_[i]) # -> 0.65, 0.5, 0.5, 0.56, 0.51 # 可视化决策树 plot_tree( m.clf_, fontsize=10, feature_names=m.feature_names_, class_names=list(verbalizer.values()), filled=True, ) plt.show()

iPrompt

from imodelsx import explain_dataset_iprompt, get_add_two_numbers_dataset # 获取一个简单的两数相加数据集 input_strings, output_strings = get_add_two_numbers_dataset(num_examples=100) for i in range(5): print(repr(input_strings[i]), repr(output_strings[i])) # 用自然语言提示字符串解释输入和输出之间的关系 prompts, metadata = explain_dataset_iprompt( input_strings=input_strings, output_strings=output_strings, checkpoint='EleutherAI/gpt-j-6B', # 使用哪个语言模型 num_learned_tokens=3, # 学习多长的提示 n_shots=3, # 每个示例的shot数 n_epochs=15, # 搜索多少轮 verbose=0, # 打印多少信息 llm_float16=True, # 是否以float16加载模型 ) -------- prompts是找到的自然语言提示字符串列表

D3 (DescribeDistributionalDifferences)

from imodelsx import explain_dataset_d3 hypotheses, hypothesis_scores = explain_dataset_d3( pos=positive_samples, # List[str]格式的正面示例 neg=negative_samples, # 另一个List[str] num_steps=100, num_folds=2, batch_size=64, )

SASC

这里我们解释一个模块而不是一个数据集

from imodelsx import explain_module_sasc # 一个对字符串长度做出响应的玩具模块 mod = lambda str_list: np.array([len(s) for s in str_list]) # 一个最长字符串是动物名称的玩具数据集 text_str_list = ["红色", "蓝色", "x", "1", "2", "河马", "大象", "犀牛"] explanation_dict = explain_module_sasc( text_str_list, mod, ngrams=1, )

Aug-imodels

像使用scikit-learn模型一样使用这些。在训练过程中,它们通过LLM拟合更好的特征,但在测试时它们非常快速且完全透明。

from imodelsx import AugLinearClassifier, AugTreeClassifier, AugLinearRegressor, AugTreeRegressor import datasets import numpy as np # 设置数据 dset = datasets.load_dataset('rotten_tomatoes')['train'] dset = dset.select(np.random.choice(len(dset), size=300, replace=False)) dset_val = datasets.load_dataset('rotten_tomatoes')['validation'] dset_val = dset_val.select(np.random.choice(len(dset_val), size=300, replace=False)) # 拟合模型 m = AugLinearClassifier( checkpoint='textattack/distilbert-base-uncased-rotten-tomatoes', ngrams=2, # 使用二元语法 ) m.fit(dset['text'], dset['label']) # 预测 preds = m.predict(dset_val['text']) print('验证集准确率', np.mean(preds == dset_val['label'])) # 解释 print('总n元语法系数数量:', len(m.coefs_dict_)) print('最正面的n元语法') for k, v in sorted(m.coefs_dict_.items(), key=lambda item: item[1], reverse=True)[:8]: print('\t', k, round(v, 2)) print('最负面的n元语法') for k, v in sorted(m.coefs_dict_.items(), key=lambda item: item[1])[:8]: print('\t', k, round(v, 2))

KAN

import imodelsx from sklearn.datasets import make_classification, make_regression from sklearn.metrics import accuracy_score import numpy as np X, y = make_classification(n_samples=5000, n_features=5, n_informative=3) model = imodelsx.KANClassifier(hidden_layer_size=64, device='cpu', regularize_activation=1.0, regularize_entropy=1.0) model.fit(X, y) y_pred = model.predict(X) print('测试准确率', accuracy_score(y, y_pred)) # 现在尝试回归 X, y = make_regression(n_samples=5000, n_features=5, n_informative=3) model = imodelsx.kan.KANRegressor(hidden_layer_size=64, device='cpu', regularize_activation=1.0, regularize_entropy=1.0) model.fit(X, y) y_pred = model.predict(X) print('测试相关性', np.corrcoef(y, y_pred.flatten())[0, 1])

通用工具

简易基准

遵循sklearn API的易于拟合的基准模型。

from imodelsx import LinearFinetuneClassifier, LinearNgramClassifier # 在LLM嵌入之上拟合一个简单的单层微调模型 m = LinearFinetuneClassifier( checkpoint='distilbert-base-uncased', ) m.fit(dset['text'], dset['label']) preds = m.predict(dset_val['text']) acc = (preds == dset_val['label']).mean() print('验证准确率', acc)

LLM包装器

用于调用不同语言模型的简易API,带有缓存功能(比langchain更轻量)。

import imodelsx.llm # 支持任何huggingface checkpoint或openai checkpoint(包括对话模型) llm = imodelsx.llm.get_llm( checkpoint="gpt2-xl", # text-davinci-003, gpt-3.5-turbo, ... CACHE_DIR=".cache", ) out = llm("愿原力与") llm("愿原力与") # 当再次计算相同字符串时,使用缓存

数据包装器

用于加载huggingface数据集并进行基本预处理的API。

import imodelsx.data dset, dataset_key_text = imodelsx.data.load_huggingface_dataset('ag_news') # 确保dset有名为'train'和'validation'的分割, # 且每个分割的输入数据包含在由{dataset_key_text}给定的列中

相关工作

  • imodels包(JOSS 2021 github)- 用于简洁、透明和准确预测建模的可解释ML包(兼容sklearn)。
  • 自适应小波蒸馏(NeurIPS 2021 pdf, github)- 将神经网络蒸馏为简洁的小波模型
  • 变换重要性(ICLR 2020 workshop pdf, github)- 使用简单的重参数化,允许计算输入变换的解耦重要性(例如,为不同频率分配重要性)
  • 分层解释(ICLR 2019 pdf, github)- 将CD扩展到CNN/任意DNN,并将解释聚合成层次结构
  • 解释正则化(ICML 2020 pdf, github)- 在训练期间惩罚CD/ACD得分,使模型泛化能力更强
  • PDR可解释性框架(PNAS 2019 pdf)- 用于指导和构建可解释机器学习的全面框架

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多