Skip to content

Latest commit

 

History

History
118 lines (93 loc) · 13.3 KB

File metadata and controls

118 lines (93 loc) · 13.3 KB

实例级证据分析

功能介绍

针对给定的模型(含训练数据)和测试输入,实例级证据分析方法对每一训练样本赋值一个分数,用其表示该样本对预测文本的影响度。然后,对当前预测文本影响大的若干训练样本作为模型预测依赖证据,解释模型对预测。

TrustAI提供了3种实例级证据分析方法,分别是:

  • 基于梯度的方法:基于训练样本的梯度计算其对模型的影响度a, 通过影响度a、训练样本i的表示、测试样本t的表示来计算训练样本i对测试样本t的影响度。该方法计算得到的影响分数受a影响较大,即给出的证据是对模型影响大的样本,这样的样本可能是困难数据或脏数据,所以使用者可以根据这种方法识别脏数据。
  • 基于表示相似度方法:计算训练样本i和测试样本t的表示的相似度,该相似度作为训练样本i对测试样本t的影响度。该相似度可通过cosine、KL散度、欧氏距离等多种方法实现。
  • 基于梯度相似度方法:计算训练样本i和测试样本t的梯度的相似度,该相似度作为训练样本i对测试样本t的影响度。该相似度可通过cosine等方法实现。

使用示例

TrustAI为所有实例级证据分析方法提供统一的使用接口。

  • 接口输入:训练数据、训练好的模型、和测试数据;
  • 接口输出:测试数据的实例级证据,含支持当前测试数据的证据(正影响)和不支持测试数据的证据(负影响)。

基于梯度的方法

调用代码:

from trustai.interpretation import RepresenterPointModel
# initialization
# 开发者需要传入模型及对应的训练数据,以及模型输出层中最后一层的layer name
representer_model = RepresenterPointModel(model, train_data_loader, classifier_layer_name="classifier")
# res为模型返回的结构化的结果,类型为list。list中的每一个元素对应一个测试实例的返回结果,该结果包括预测标签,正影响数据的索引,负影响数据的索引,正影响数据的分值和负影响数据的分值。
res = []
for batch in test_dataloader:
    res += representer_model(batch, sample_num=3)

注:返回证据数量由sample_num指定,若sample_num为-1则返回按影响度排序的所有训练数据。

输出结果:

测试文本(来自情感分析任务): 本来不想评价了,但为了携程的携粉们,还是说一下,这称不上是九点,细说就真没必要了,就一个字:差
预测结果: 0(表示负向情感)

支持当前测试文本的训练样本(正影响样本):
text: 感觉非常奇怪,这套书我明明都写了两次评论了,可我的当当始终提醒我对这套书写评论!晕啊!这是套很好的书,也不用我写几次评论吧!    gold label: 1    score: 0.03509485349059105
text: 1)背面少个螺丝钉,说是thinkpad都少,靠 2)键盘周围的壳不平整,按下去发现有:“滋啦滋啦”声音,我才意识到,那是个双面胶,按下去就不上来了,过会儿还是回弹上来,很明显仅靠双面胶是 粘不住的,你还不如拿502呢,起码这样粘得严实还能让我心里舒服(但是这样只是弥补质量问题),何必还弄个滋啦兹啦的声音,多闹心啊,(还有一地方用了双面胶,我换内存的时候发现键盘下部盖子左侧打不开,一直不敢用力    gold label: 1    score: 0.03008783608675003
text: 用了6年的THINKPAD,一直认为是笔记本中最好的! 现在这台新的让我......哎!!    gold label: 0    score: 0.029884012416005135

不支持当前测试文本的训练样本(负影响样本):
text: 是LINUX系统 相当及其恶心 不知道这狗 日 的是什么想法 要强行逼我们使用啊 买了两台电脑 一个事VISTA系统 一个 是 LINUX 就没见一个XP的 网上销售这东西 最重要的是打架尽量不要涉及到售后服务这块 尽量是都搞好了相安无事 其实网上的售后服务比没有售后服务还差劲 我的THINKPAD SL400就是因为换货期间以为是键盘小问题就懒得换了    gold label: 1    score: -0.07112707197666168
text: 盼了2周终于拿到本了,一开机就屏不亮,本人自己跑回总部退机,现在还在等着检测,说要等上15个工作日,呵呵,买个电脑容易吗?时间浪费的起吗?请问?    gold label: 0    score: -0.07233154773712158
text: 价格确实比较高,而且还没有早餐提供。 携程拿到的价格不好?还是自己保留起来不愿意让利给我们这些客户呢? 到前台搞价格,430就可以了。    gold label: 1    score: -0.08243595063686371

基于表示相似度的方法

调用代码:

from trustai.interpretation import FeatureSimilarityModel
# initialization
# 开发者需要传入模型及对应的训练数据,以及模型输出层中最后一层的layer name
feature_sim_model = FeatureSimilarityModel(model, train_data_loader, classifier_layer_name="classifier")
# 开发者可以通过sim_fn参数指定相似度计算方式,目前支持cos、dot、euc(分别是余弦距离,点积距离和欧式距离)
#res为模型返回的结构化的结果,类型为list。list中的每一个元素对应一个测试实例的返回结果,该结果包括预测标签,正影响数据的索引,负影响数据的索引,正影响数据的分值和负影响数据的分值。
res = []
for batch in test_dataloader:
    res += feature_sim_model(batch, sample_num=3, sim_fn='cos')

注:返回证据数量由sample_num指定,若sample_num为-1则返回按影响度排序的所有训练数据。

输出结果:

测试文本(来自情感分析任务): 没有光驱,重装Windows需要外接光驱,对于电脑新手会很麻烦(没什么人会用Linux吧)    
预测结果: 0(负向情感)

支持当前测试文本的训练样本(正影响样本):
text: Linux系统不太好用,平时习惯用Windows xp 系统,一下子用这个系统感觉很不习惯,建议开发或预装Windows xp系统.    gold label: 0    score: 0.9393996000289917
text: 1、机器较沉 2、VISTA用起来不习惯,且占系统较多 3、音频插口、右前侧的二个USB口在用鼠标时感觉手靠得太近了    gold label: 0    score: 0.9354583621025085
text: vista系统下也没有无线网卡驱动,用驱动精灵可解决。 机器稍有点重。 散热有待改进。    gold label: 0    score: 0.9348428249359131

不支持当前测试文本的训练样本(负影响样本):
text: “任务型教学”在我国外语教学界备受关注。国家教育部新《英语课程标准》将“倡导‘任务型’的教学途径,培养学生综合语言运用能力”写入教学建议。任务型教学被视为改革我国传统外语教学的良方。本书立足我国外语教学现状,全面分析了“任务型教学”的理论和实践基础、以实例说明“任务型教学”的具体操作步骤。为广大一线英语教师提供了教学和研究参考。    gold label: 1    score: -0.12422356754541397
text: 当美国发生次贷危机乃至影响全世界以后,对于应对危机,我们国内的绝大多数专家对此都异口同声,观点基本雷同,而且又莫衷一是,人云亦云,本书的作者以其独特的视觉和丰富的知识,在书中告诉我们这次危机的来龙去脉,我们国家应该以怎样的方式去直面这次危机,如何转危为安,化危为机;作为普通读者也能从书中领会到一些对自己有益的知识。读完这本书以后,你更能体会到一种不一样的思维,非常值得一读。    gold label: 1    score: -0.128561332821846
text: 我从06年开始几乎每月都有一次出差,山西很多酒店都住过了,印象最深的就是三晋国际,其他还有龙城国际,华苑宾馆,黄河京都,还有一个叫什么交通大厦的,下面我对这些酒店做个最真实、准确地点评: 三晋国际——这是我认为最让太原市骄傲的酒店,我们衡量一个酒店的最直接的就是你能够得到什么服务,在这家酒店里,我感觉到了家一般的照顾,第一次来这里,感冒了,嘴里冷不丁说了一句,服务生就听到了,然后熬了一碗姜汤到我房间,当然也是免费的,很感动;洗澡时,一不小心摔倒了,副总经理、总监等等都慰问了我,其实这也不完全是酒店的错,但是从那以后,我发现每个房间浴室都放置了防滑垫和塑料拖鞋;有一次我把袜子之类的放在洗手间了,谁知道我回来后竟然发现服务员帮我免费清洗了,还把我不小心掰断的心爱的梳子还用胶给我粘好了,还留了言给我,真的很让我意外也有点不敢相信!对一个出差特别频繁,时间特别紧张的人来说,办理入住和退房就是一个最让人烦躁的时间,但是我算过了,三晋国际前台办理退房、入住的时间没有超过一分钟!!!在北京都很难有这样的待遇!其他的,比如前台接待、门厅服务之类的就不用说了,真的很好; 当然我也有建议:1、酒店的被子能否换厚一点的,冬天冷啊;2、一些房间的电话没有免提,不是很方便;3、外面的电话打不进来,可能是酒店为了安全考虑吧,但还是希望能够有外线拨入的功能。 龙城国际——不知道五星级是谁给的评价?!酒店一般,还不如华苑宾馆,无法容忍的是,前台接待服务态度太差了!唯一的优点是,早餐挺好吃。 华苑宾馆——06、07年都挺好的,今天偶尔又住了一下,发现时间长了,枕头、被子不是很干净,其他倒是挺好的,服务态度、环境都还不错,早餐有点单一。 黄河京都——地方太偏了!看起来挺好,住进去不咋地,无法容忍的是,也给大家提个醒,我退房的时间整整用了29分钟,快半个钟头了,我差点晕倒!结帐的服务员只顾打电话,不理我。 交通大厦——噩梦般的酒店,我再也不会住了!!隔音效果太差,还不幸地让我听到了隔壁小两口的闺房密语,哈哈,让我坐噩梦的是,半夜不知道什么单位来查房,从好多房间带走了好多女孩子,好怕怕地说……还有就是前台一个戴眼镜的,白白的女孩子,态度可真差啊,郁闷! 太原还有好多酒店,可能我不会一一住到,但还是希望所有的酒店都能够像三晋国际一样,给山西人长脸!    gold label: 1    score: -0.17390453815460205

基于梯度的相似度方法示例

调用代码:

from trustai.interpretation import GradientSimilarityModel
# initialization
# 开发者需要传入模型及对应的训练数据,以及模型输出层中最后一层的layer name
# 注意因为需要计算每一条数据对于模型参数的梯度,所以train_dataloader的batch_size需要设置为1,测试数据对应的dataloader的batch_size也需为1
grad_sim_model = GradientSimilarityModel(model, train_data_loader, classifier_layer_name="classifier")
# 开发者可以通过sim_fn参数指定相似度计算方式,目前支持cos、dot(分别是余弦距离,点积距离)
# res为模型返回的结构化的结果,类型为list。list中的每一个元素对应一个测试实例的返回结果,该结果包括预测标签,正影响数据的索引,负影响数据的索引,正影响数据的分值和负影响数据的分值。
res = []
for batch in test_dataloader:
    res += grad_sim_model(batch, sample_num=3, sim_fn='cos')

注:返回证据数量由sample_num指定,若sample_num为-1则返回按影响度排序的所有训练数据。

输出结果:

测试文本(来自情感分析任务): 没有光驱,重装Windows需要外接光驱,对于电脑新手会很麻烦(没什么人会用Linux吧)    
预测结果: 0(负向情感)

支持当前测试文本的训练样本(正影响样本):
text: Linux系统不太好用,平时习惯用Windows xp 系统,一下子用这个系统感觉很不习惯,建议开发或预装Windows xp系统.    gold label: 0    score: 0.9395108222961426
text: 1、机器较沉 2、VISTA用起来不习惯,且占系统较多 3、音频插口、右前侧的二个USB口在用鼠标时感觉手靠得太近了    gold label: 0    score: 0.9355786442756653
text: vista系统下也没有无线网卡驱动,用驱动精灵可解决。 机器稍有点重。 散热有待改进。    gold label: 0    score: 0.9349631071090698

不支持当前测试文本的训练样本(负影响样本):
text: 价格确实比较高,而且还没有早餐提供。 携程拿到的价格不好?还是自己保留起来不愿意让利给我们这些客户呢? 到前台搞价格,430就可以了。    gold label: 1    score: -0.49774348735809326
text: 买机器送的移动硬盘2.5寸250G的,没开封,想卖出,感兴趣短息联系,北京13901019711    gold label: 1    score: -0.5244823694229126
text: 买机器送的移动硬盘2.5寸250G的,没开封,想卖出,感兴趣短息联系,北京13901019711    gold label: 0    score: -0.5244823694229126

详细示例见examples