/TrustAI

飞桨可信AI

Primary LanguagePythonApache License 2.0Apache-2.0

TrustAI是基于深度学习平台『飞桨』(PaddlePaddle)开发的集可信分析和增强于一体的可信AI工具集,助力NLP开发者提升深度学习模型效果和可信度,推动模型安全、可靠的落地于应用。

News 📢

👏可信分析功能

TrustAI提供特征级证据和实例级证据分析方法,全方位解释模型的预测,帮助开发者了解模型预测机制,以及协助使用者基于证据做出正确决策。

特征级证据分析

根据模型预测结果,从输入文本中提取模型预测所依赖的证据,即输入文本中支持模型预测的重要词。

应用示例见AI Studio - 基于TrustAI的中文情感特征级可信分析示例

关于方法更多详细内容可参考 - 特征级证据分析文档

实例级证据分析

从训练数据中找出对当前预测影响较大的若干实例数据作为预测证据。

应用示例见AI Studio - 基于TrustAI的中文情感实例级可信分析示例

关于方法更多详细内容可参考 - 实例级证据分析文档

💥可信增强功能

除了提供可信分析结果以外,TrustAI还包含多项增强功能,能够帮助开发者解决训练数据缺陷问题,用最小的标注成本获得最大幅度的效果提升。

解决训练数据存在脏数据的问题

TrustAI提供了脏数据(即标注质量差的数据)自动识别功能,帮助降低人工检查数据的成本。

如下图所示,在两个公开数据集上,TrustAI自动识别的脏数据比例远高于随机选择策略。


图1 不同策略识别出的脏数据比例

应用示例见AI Studio - 解决训练数据存在脏数据的问题

解决训练数据覆盖不足的问题

训练数据覆盖不足会导致模型在对应的测试数据上表现不好。TrustAI可识别因训练数据覆盖不足而导致的预测效果差的测试样本(这些样本构成的集合称为目标集),并帮助开发者从未标注数据中选择有效数据进行标注,提高训练数据覆盖度和模型效果。

如下图所示,在两个公开数据集上,TrustAI选择的有效数据对模型在目标数据上的效果提升远高于随机选择策略。


图2 目标集提升的效果

应用示例见AI Studio - 解决训练数据覆盖不足的问题

解决训练数据分布偏置的问题

神经网络模型会利用数据集中的偏置做预测,这会导致模型没有学会理解语言,鲁棒性差。TrustAI提供了分布修正和权重修正两种策略,在不需要人工介入的条件下,有效缓解数据偏置对模型训练的影响。

如下图所示,在两个公开的鲁棒性数据集上,TrustAI的权重修正和分布修正策略分别取得明显提升。


图3 偏置修正后模型在鲁棒性数据集上的效果

应用示例见AI Studio - 数据权重修正数据分布修正

解决文本冗余导致精度下降的问题

过长的冗余信息往往会导致神经网络模型做预测时发生误判。这会导致模型难以处理长文本,鲁棒性、泛化性差。TrustAI提供了Select-Predict两阶段策略,在不需要人工介入的条件下,有效缓解文本冗余导致精度下降的问题。

具体来说,我们在答案抽取式MRC任务上提供了一个典型示例。任务输入给定一个文章,一个问题,要求机器根据问题从文章中输出一个连续的片段作为答案。

如下图所示,在如下3个数据集上,TrustAI的域内预测精度、泛化性、鲁棒性在EM指标上均取得明显提升。


图4 偏置修正后模型在鲁棒性数据集上的效果

应用示例见AI Studio - 解决文本冗余导致精度下降的问题

关于可信增强更多内容请阅读tutorials

安装

依赖

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提供可视化输出,即根据输入特征的支持度,以不同颜色深度展示结果。颜色越深表示支持度越大,越浅表示支持度越小。

 更多详情 - 特征级证据分析文档

实例级证据分析

 以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], 不支持当前预测的训练数据的支持度

 更多详情 - 实例级证据分析文档

关于接口使用的更多样例见examples目录

🚀应用案例

 自动识别脏数据,降低人力检查成本

   解决训练数据存在脏数据的问题

 标注尽量少的数据,提升模型效果

   解决训练数据覆盖不足的问题

 缓解数据偏置对模型训练的影响,提升模型鲁棒性

   解决训练数据分布偏置的问题 - 数据权重修正

   解决训练数据分布偏置的问题 - 数据分布修正

 缓解文本冗余对模型预测的影响,提升模型精度和鲁棒性

   解决文本冗余导致精度下降的问题


关于应用案例的更多说明,请参考tutorials目录

评测榜单

评测数据集下载:千言数据集-可解释性评测

 限时赛
 常规赛

相关文献

 可信分析方法参考论文
 可信增强方法参考论文
 进阶学习材料
 各赛事优秀方案分享

引用

要引用 TrustAI 进行研究,请使用以下格式进行引用。

@article{wang2022fine,
  title={A Fine-grained Interpretability Evaluation Benchmark for Neural NLP},
  author={Wang, Lijie and Shen, Yaozong and Peng, Shuyuan and Zhang, Shuai and Xiao, Xinyan and Liu, Hao and Tang, Hongxuan and Chen, Ying and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2205.11097},
  year={2022}
}

致谢

我们实现的可信分析方法参考和依赖了InterpretDL项目,在此向InterpretDL的作者表示感谢。

LICENSE

TrustAI遵循Apache-2.0开源协议