PaddlePaddle/TrustAI
Python
Captured source
source ↗PaddlePaddle/TrustAI
Description: 飞桨可信AI
Language: Python
License: Apache-2.0
Stars: 187
Forks: 35
Open issues: 2
Created: 2022-03-13T14:03:07Z
Pushed: 2023-01-18T10:55:50Z
Default branch: main
Fork: no
Archived: no
README:
安装 | 快速开始 | 可信分析 | 可信增强 | 应用案例 | 评测榜单 | 学术文献
TrustAI是基于深度学习平台『飞桨』(PaddlePaddle)开发的集可信分析和增强于一体的可信AI工具集,助力NLP开发者提升深度学习模型效果和可信度,推动模型安全、可靠的落地于应用。
图 TrustAI提供能力概览
News 📢
- 🔥 2022.12.27 TrustAI发布数据地图绘制能力,欢迎大家使用。
- 🔥 2022.10.30 可解释评测数据集入驻千言,部分数据提供人工标注证据,欢迎大家使用。
- 🔥 2022.8.29 PaddleNLP分类系统已经接入TrustAI能力,欢迎大家试用。
- 🔥 2022.8.20 TrustAI发布可信增强能力及应用案例。
- 🎉 2022.5.20 TrustAI首次发布!
可信分析
TrustAI提供证据分析和数据分析能力。
证据分析
证据分析提供模型预测依赖的证据。TrustAI从特征级和实例级两种维度提供证据分析方法,全方位解释模型的预测,帮助开发者了解模型预测机制,以及协助使用者基于证据做出正确决策。
特征级证据分析
根据模型预测结果,从输入文本中提取模型预测所依赖的证据,即输入文本中支持模型预测的若干重要词。
应用示例见AI Studio - 基于TrustAI的特征级证据分析示例-中文情感分析任务
关于方法更多详细内容可参考 - [特征级证据分析文档](./trustai/interpretation/token_level/README.md)
实例级证据分析
从训练数据中找出对当前预测文本影响较大的若干训练样本作为模型预测依赖证据。
应用示例见AI Studio - 基于TrustAI的实例级证据分析示例-中文情感分析任务
关于方法更多详细内容可参考 - [实例级证据分析文档](./trustai/interpretation/example_level/README.md)
数据分析
数据分析能力旨在根据训练、预测信号绘制数据地图(见下图),并结合证据分析识别数据缺陷。当前,TrustAI针对三种数据缺陷提供了识别方法,三种缺陷分别是数据标注错误、数据标注不足(也称为数据覆盖不足)、数据分布偏置。
图 基于训练信号绘制的训练数据地图
数据标注错误识别
TrustAI提供了标注错误数据(即脏数据)自动识别功能,帮助降低人工检查数据的成本。
如下图所示,在两个公开数据集上,TrustAI自动识别的标注错误数据比例远高于随机选择策略。
图 不同策略的标注错误数据识别效果
应用示例见AI Studio - 训练数据中标注错误数据自动识别示例
数据覆盖不足识别
训练数据覆盖不足会导致模型在对应的测试数据上表现不好。基于实例级证据分析方法,TrustAI可识别训练数据覆盖不足的测试数据(这些数据构成的集合称为目标集),模型在目标集上效果降低20%左右。
图 模型在全部测试数据和覆盖不足测试数据上的效果
应用示例见AI Studio - 训练数据覆盖不足识别示例
数据分布偏置识别
神经网络模型会利用数据集中的偏置做预测,这会导致模型没有学会理解语言,鲁棒性差。TrustAI提供了基于统计的偏置识别和基于模型的偏置识别。
基于统计的偏置识别,见偏置识别
基于模型的偏置识别,待开源。
可信增强
TrustAI提供了针对识别缺陷的优化方案,即可信增强功能。当前,从训练数据和训练机制优化角度,TrustAI开源了针对3种数据缺陷的优化方案,希望能够帮助开发者以最小成本解决训练数据缺陷问题。同时,TrustAI开源了一种基于证据指导的预测机制优化方案,用来解决长文本理解问题。
针对数据标注错误的数据清洗
从训练数据角度,直接对TrustAI识别的标注错误数据进行人工修正,效果如下图所示。
图 在三个常见分类任务上针对标注错误的数据清洗效果
从训练机制角度,TrustAI也提供了缓解脏数据影响的策略,待开源。
针对数据覆盖不足的有效数据增强
针对训练数据覆盖不足常见做法是补充数据。为降低标注成本,TrustAI提供了有效数据增强策略,即从未标注数据中选择可以提高训练数据覆盖度和模型效果的数据进行标注。
如下图所示,在两个公开数据集上,TrustAI提供的有效数据增强策略对模型在目标数据上的效果提升远高于随机选择策略。
图 目标集提升的效果
应用示例见AI Studio - 针对训练数据覆盖不足的有效数据增强示例
针对数据分布偏置的偏置消除
TrustAI提供了分布修正和权重修正两种策略,在不需要人工介入的条件下,有效缓解数据偏置对模型训练的影响。
如下图所示,在两个公开的鲁棒性数据集上,TrustAI的权重修正和分布修正策略分别取得明显提升。
图 偏置修正后模型在鲁棒性数据集上的效果
应用示例见AI Studio - 数据分布偏置缓解策略-数据权重修正示例和数据分布偏置缓解策略-数据分布修正示例
证据识别及基于证据的预测 - 预测机制优化
在长本文理解任务中,输入中的冗余信息往往会干扰模型预测,导致模型鲁棒性差。TrustAI提供了“证据识别-基于证据的预测”两阶段预测方案,显著提升长文本任务上的模型效果,尤其是模型的鲁棒性。
以DuReader-robust数据集的训练数据训练模型,在DuReader-robust验证集、测试集以及DuReader-checklist测试集上进行了效果验证,分别验证模型的基本效果、鲁棒性效果、领域泛化效果,各数据集上的答案精准匹配率均取得显著提升。
图 证据识别及基于证据预测的两阶段策略在阅读理解任务上的效果
应用示例见AI Studio - 证据识别及基于证据的预测示例-中文阅读理解任务
关于可信增强更多内容请阅读[tutorials](./tutorials)。
安装
依赖
python: >=3.6.2- `paddlepaddle`: >=2.0
pip 安装
# 依赖paddlepaddle,推荐安装CUDA版本 pip install -U paddlepaddle-gpu pip install -U trustai
源码编译
git clone git@github.com:PaddlePaddle/TrustAI.git cd TrustAI python setup.py install
快速开始
特征级证据分析
 以Integrated Gradient方法为例,其调用方法如下所示:
from trustai.demo import DEMO
from trustai.interpretation import IntGradInterpreter
from trustai.interpretation import visualize
demo = DEMO('chnsenticorp')
# init demo model
model = demo.get_model()
tokens, model_inputs = demo("这个宾馆比较陈旧了")
# tokens: List[List[str]], [['[CLS]', '这', '个', '宾', '馆', '比', '较', '陈', '旧', '了', '[SEP]']]
# model_inputs: List[Paddle.Tensor],满足`logits = model(*model_inputs)`
# init interpreter
interpreter = IntGradInterpreter(model)
result = interpreter(model_inputs)
# result: List[IGResult], result[0].attribtions与tokens[0]一一对应,表示每一个token对预测结果的支持程度,即证据的支持度分数。
# result[0].attributions: [ 0.04054353, 0.12724458, -0.00042592, 0.01736268, 0.07130871, -0.00350687,
# 0.01605285, 0.04392833, 0.04841821, -0.00514487, 0.13098583]
# 可视化结果
html = visualize(result, words=tokens)
# TrustAI提供可视化输出,即根据输入特征的支持度,以不同颜色深度展示结果。颜色越深表示支持度越大,越浅表示支持度越小。 更多详情 - [特征级证据分析文档](./trustai/interpretation/token_level/README.md)
实例级证据分析
 以Feature Similarity方法为例,其调用方法如下所示:
from trustai.demo import DEMO
from trustai.interpretation import FeatureSimilarityModel
demo = DEMO('chnsenticorp')
# init demo model
model = demo.get_model()
tokens, model_inputs = demo("房间设备比较陈旧,没五星标准 客人非常不满意")
# tokens: List[List[str]]
# model_inputs: List[Paddle.Tensor],满足`logits = model(*model_inputs)`
# get dataloader of train data, 满足`logits = model(*next(train_data_loader))`
train_data, train_dataloader = demo.get_train_data_and_dataloader()
# init interpreter
interpreter = FeatureSimilarityModel(model, train_dataloader, classifier_layer_name='classifier')
result = interpreter(model_inputs)
# result: List[ExampleResult], [ExampleResult(pred_label=0, pos_indexes=(7112, 1757, 4487), neg_indexes=(8952, 5986, 1715), pos_scores=(0.9454082250595093, 0.9445762038230896, 0.9439479112625122), neg_scores=(-0.2316494882106781, -0.23641490936279297, -0.23641490936279297))]
# ExampleResult.pos_indexes: List[int], 支持当前预测的训练数据在训练集中的索引
# ExampleResult.neg_indexes: List[int], 不支持当前预测的训练数据在训练集中的索引
# ExampleResult.pos_scores: List[float], 支持当前预测的训练数据的支持度
# ExampleResult.neg_scores: List[float], 不支持当前预测的训练数据的支持度 更多详情 - [实例级证据分析文档](./trustai/interpretation/example_level/README.md)
关于接口使用的更多样例见[examples目录](./examples)
应用案例
 自动识别脏数据,降低人力检查成本
   [训练数据中脏数据自动识别示例](./tutorials/dirty_data_identification)
 以一半标注成本,带来更大效果提升…
Excerpt shown — open the source for the full document.