客户案例
customercase-icon
客户案例
实在智能凭借流畅稳定的产品和落地有效的方案,已为电商、通信、金融、政府及公共服务等1500+企业提供数字化产品和服务
客户之声
实在生态
产品咨询热线400-139-9089市场合作contact@i-i.ai
百万开发者交流群
关于我们
产品咨询热线400-139-9089市场合作contact@i-i.ai
百万开发者交流群
媒体报道
关注实在智能最新动态,把握行业前沿
媒体报道>实在智能RPA学院|LIME应用及其时间复杂度初探
实在智能RPA学院|LIME应用及其时间复杂度初探
2020-04-21 02:08:24
问题背景:机器学习或深度学习模型在赋能2B的实际业务场景时,模型的可解释性一直是影响模型快速落地的瓶颈之一。为非AI相关专业背景的客户或合作伙伴解释模型(尤其是黑盒模型)的训练和预测过程,以及某个预测结果背后蕴含的推理,往往是一件很有必要但很棘手的事情。对于我们目前从事的智能司法场景尤其如此:案件的判决往往在一定的司法框架内进行推理,每一个步骤都必须有法可依;那么智能司法产品的结果同样需要基于对应的法律法规给出令人信服的解释,否则模型尽管在验证集上效果很好,也并不能得到用户的信任。为此,我们希望我们构建的模型创建一个相对通用的解释器(explainer)模块。该模块能够给出模型预测行为的一种相对直观的表征形式,以便我们清晰地知道这个“AI律师”是否足够有经验;同时也希望该解释器具有一定的模型无关性(Model-Agnostic),这样我们可以扩展更多得模型。LIME(Local Interpretable Model-Agnostic Explanations)的出现为我们提供了一种解决的思路。目前司法场景下的数据大致可以分为文本形式(Text)和结构化形式(Tabular),本次我们的探索主要集中在对结构化特征的应用上。LIME简介:LIME在2016年的KDD上提出,其论文《“Why Should I Trust You?” Explaining the Predictions of Any Classifier》提出了一种用预测值附近的局部线性模型来解释整体复杂模型的思想,其中包括的主要技术有:◎ 预测值附近的样本点选择◎ 评估模型整体需要的预测值集合筛选◎ 解释器好坏评估的实验后两点在实际场景中应用的不多,因此我们只关注如何选择预测值附近的样本点及构建对应的线性模型,以及如何用该线性模型来解释模型。样本点选择:对结构化特征的分类模型,LIME样本点选择主要在lime_tabular.py中LimeTabularExplainer类的__data_inverse函数实现。正如注释所提到,对于非categorical类型的特征,LIME在预测点附近用一个正态分布Norm(0,1)来产生指定个数(num_samples)的样本:1. data = self.random_state.normal(2. 0, 1, num_samples * data_row.shape[0]).reshape(3. num_samples, data_row.shape[0])并根据指定的尺度做变换:1. if self.sample_around_instance:2. data = data * self.scaler.scale_ + data_row3. else:4. data = data * self.scaler.scale_ + self.scaler.mean_而对于categorical类型的特征,则根据训练集的分布进行频率采样,并且当某一样本的categorical特征和预测值对应特征相等时置1。最终采样过程将生成一个num_sample * K的矩阵,其中K表示待解释的特征维度,后续的线性模型则在此基础上建模:1. nverse_column = self.random_state.choice(values, size=num_samples, replace=True, p=freqs)2. binary_column = np.array([1 if x == first_row[column]3. else 0 for x in inverse_column])线性模型构建:局部线性拟合的实现在lime_base.py的explain_instance_with_data中,回归方法的选择上应用了有偏的岭回归模型,这种回归方法通过对回归系数增加惩罚项来控制模型的复杂度,和ML/DL模型中在损失函数中加正则项是同样的道理通过惩罚项的引入,就使得模型的特征存在一定的共线性情况时,也能得到相比于一般的线性回归更加鲁棒的回归结果,同时用线性回归簇也充分考虑了回归函数的复杂度问题。另外,在用sklearn的岭回归模型拟合样本点过程中,对样本点也进行了加权,具体的权重是和样本点到预测点的距离有关,这种做法的出发点在于给和预测点更相似的样本赋予更大的权重,进一步规避随机采样过程中带来的解释偏差问题1、def kernel(d):2、 np.sqrt(np.exp(-(d ** 2) / kernel_width ** 2))通过岭回归拟合得到的各特征及其权重即可作为模型在该预测点的解释。不过,在模型的特征比较多的时候,LIME也提供了对特征重要性的评估和筛选过程,包括三种模式的筛选:forward_selection、highest_weights、lasso_path,具体内容感兴趣的同学可以对其进行深入探索。LIME的实际应用就我们的智能司法场景来说,每个预测点代表了一次案例的结果推理,其中结构化的特征是从对应的诉求表述、法规法条和证据文本中加工得到,因此LIME在利用局部线性拟合获得预测点附近的特征权重后,就可以反向映射到原始的文本数据中,进而可视化的展示出模型在该预测点的原理表征:考虑了哪些特征,不同特征在不同分类上的权重分配是怎么样。LIME在结构化特征上的应用实际主要就是调用以下两个方法的过程:3.1 explainer = lime.lime_tabular.LimeTabularExplaine()传入的参数包括:X:训练样本,从原始的文本数据通过分词、关键词提取、向量化等方式获得,例如可以根据在诉求文本中是否出现了关键证据模式(1.出现,0.未出现)来将文本特征转化为结构化特征,这里我们通过一个.npy文件导入训练样本;feature_names: 特征名称list,是各个特征具象化的表征;class_names:分类名称list,如果是两类,可设置为[“0”,“1”],代表支持或不支持诉求;sample_around_instance:True,表示在预测点附近采样,选择False则会在训练样本的质心点附近生成样本集进行拟合。LimeTabularExplaine构造了一个解释器的类,并完成一些初始化的工作,真正的解释器实现,包括局部线性模型的拟合都会调用到其中的explain_instance方法。3.2 exp = explainer.explain_instance()传入的参数包括:np.array(feature_list):是实际预测数据的结构化特征表示,例如我们的预测数据假设为一段诉求文本,则根据生成训练样本X的方法转化为一个K维的向量,K表示特征维度;clf.predict_proba:clf是通过sklearn的joblib导入的已训练好的模型文件,对于分类问题来说,需要以概率的形式给出属于各个类的可能性;num_features:希望在解释器中展示的特征的个数;top_labels:对于多分类问题来说,选取预测概率最高的若干个类;num_samples:采样点的个数,预测值附近采样点的个数。根据司法场景的实际情况处理好相应的参数,并将参数输入到LIME的解释器模块,最终得到了一个Explainer对象,该对象可以通过as_list或as_map方法转换为<特征,权重>对,并经过一定的特征映射和可视化,最终作为模型的局部解释进行输出。LIME的性能问题实际应用以及对LIME的原理探索的过程中,我们发现应用LIME对某个预测点进行解释的时间复杂度,和以下这些参数有比较强的关系:feature_selection(特征选择方式)、discretize_continuous(是否针对连续数据做离散化)、num_samples(预测值附近的采样个数)等。而对于一个交付线上应用的智能司法产品来说,解释模块如果时间复杂度太高,对于用户而言体验会很差,同样也是不可用的,反而会给用户对AI模型的信任度有副作用。一个实际使用的解释器需要充分考虑解释准确性和时间复杂度的trade off,为此我们基于上述参数对LIME的时间复杂度进行了简单对比:从上述对比结果来看:特征的选择方式对LIME的时间复杂度的影响最大,如果采用forward_selection的方式选择特征,固然能获得更好的拟合效果(R2-Score最大),但是整体的时间消耗是线上应用不能接受的;是否对非categorical特征进行离散化也是影响时间复杂度的重要因素,基于训练样本的离散化过程同样需要消耗比较多的时间;采样点的个数和时间基本是正向相关的关系,同样地,更细致的采样虽然使得局部的拟合效果更好,但也是以更多的时间消耗为代价。针对LIME的性能和效果的折衷问题,理论上可以通过以下两种方案解决:1、基于已知的训练数据集,把LIME的特征选择过程、特征离散化过程等放到线下作为预处理的一部分,在线上直接使用预处理的结果;以特征的离散化为例,不论是按照四分位数还是按照十分位数进行离散化,都可以把X预处理后,再以.npy的方式加载到模型中;2、更一般性的,在线下训练一个训练集中样本点到各特征权重向量的映射,再根据实际预测点和训练样本点的距离度量求得预测点处的特征权重向量。其他的Model Explainer:其实,对于ML/DL模型解释性的探索并非在LIME提出后才开始:简单的线性模型,包括更广义的LR其解释性都是非常直观的,每个特征的权重对于最终结果的影响蕴含在模型本身之中,LIME其实也是通过局部的线性拟合来做局部点的解释;更复杂的如随机森林模型的解释,在2014年7月由Gilles Louppe给出了一种衡量特征重要性的工具,目前该工具已集成在scikit-learn的随机森林Estimator中。但是和LIME相比,这个工具更关注的是整个模型特征重要性的评估,并未给出某个具体预测点的预测过程解释,同时也只是支持了树型的分类器。于是在2015年8月,一个可对具体预测点进行解释的treeinterpreter出现,该工具能够将具体预测点的预测概率,转换为各个特征贡献程度的求和,因此在单个点上进行了模型的解释;但是同样的,目前只支持决策树及其衍生相关算法。2015年10月,Airbnb的研究团队同样展示了在随机森林上对决策阈值分布的研究。直到2016年LIME提出,其意义不仅在于给出了一种相对来说模型无关的Explainer解决方案,同时还对模型解释的好坏给出了一系列的衡量指标并通过实验进行了验证。当然,在LIME之后的2016年6月,论文《The Mythos of Model Interpretability》相对系统性地阐述了Machine Learning Model Transparency这件事。在模型解释性领域,目前state-of-the-art的结果来源于一个称为SHAP的项目。SHAP(SHapley Additive exPlanations)也能对各种类型的机器学习模型给出一个相对统一的解释结果,SHAP最重要的是整合了包括LIME在内的一系列Model-Explain方法,进而给出了基于预测的特征贡献值的衡量和可视化。从Model Transparency的发展来看,对于单个预测点的解释无论从理论还是可视化结构上看都有了比较好的探索和结果,包括LIME和SHAP等工具;然而对于一个模型整体“解释度”等指标的定义,虽然LIME等也做过一定程度的定义和研究,但目前业界仍然没有一个统一的标准,不同的应用场景对于模型的解释性要求也不一样,因此确实很难统一。我们在智能司法场景上目前虽然基于LIME做了一些尝试,后续也会持续follow包括SHAP在内的Model Explainer的进展,但是更多的也是基于当前业务场景的应用,对于科学性地研究模型可解释性,还是期待学术界有更多结果输出。图1. 结构化特征上的SHAP解释结果,来源:https://github.com/slundberg/shap图2. 图像分类模型的SHAP解释结果,来源:https://github.com/slundberg/shap
分享:
上一篇文章
实在智能RPA学院|“猜心思”的Hard模式:问答系统在智能法律场景的实践与优化
下一篇文章
实在智能RPA学院|切切切词!算法TopWORDS的原理及实现
相关新闻
实在智能RPA学院智|法律人工智能的认知、现状和未来之认知篇
2020-04-21 10:46:21
36氪专访实在智能,解密RPA+AI技术解决方案
2020-04-21 11:08:02
实在智能RPA学院|少年,看你骨骼清奇,送你一份AI武林秘籍:知识图谱
2020-04-20 21:50:38
查看更多行业新闻>>
免费领取更多行业解决方案
立即咨询
大家都在用的智能软件机器人
获取专业的解决方案、智能的产品帮您实现业务爆发式的增长
免费试用
渠道合作
资料领取
预约演示
扫码咨询
领取行业自动化解决方案
1V1服务,社群答疑
扫码咨询,免费领取解决方案
热线电话:400-139-9089