精华内容
下载资源
问答
  • 一种评估LSTM模型置信度方法

    千次阅读 2019-06-27 11:37:30
    一种评估聊天机器人输出置信度的方法为什么需要评估聊天机器人输出置信度算法计算LSTM模型置信度python代码测试结果 为什么需要评估聊天机器人输出置信度 使用LSTM构建聊天机器人,无论输入是什么,就算输入完全不...

    为什么需要评估聊天机器人输出置信度

    使用LSTM构建聊天机器人,无论输入是什么,就算输入完全不符合语法,模型都会给出一个输出,显然,这个输出不是我们想要的,如何识别模型输出是不是我们想要的?因此我们需要一种评估指标,评估模型输出的置信度。评估LSTM模型的置信度本质上是判断输入与模型输出是否属于训练语料集之内,因为LSTM模型是在语料集的输入与标签之间建立了映射关系,对于训练语料集之外的输入,LSTM模型输出是随机的。因此,可以通过判断输入与LSTM模型的输出是否属于训练语料集之内来评估LSTM模型的置信度。

    算法

    把训练语料集的提问分词:key1,key2,…keyn,做为字典的关键字,对应的应答列表为字典的值:[answer1,answer2,… answerk],相同的关键字加入同一应答列表,如下表:

    在这里插入图片描述
    调用LSTM模型做预测时,把输入做分词,得到:key1,key2,…keyn,分别查找关系字典,得到对应的应答列表,对比应答列表的answer与LSTM模型输出,如果命中则计数器count加1。如果应答列表为空则为不命中。置信度confidence用下式计算:
    Confidence = count / key size

    计算LSTM模型置信度python代码

    import jieba
    import pickle
    class RelevanceChat():
        def __init__(self,topk=5):
                self.topk = topk
                self.fited = False
        def fit(self,x_data,y_data,ws_decode):
                self.dict = {}
                high_fw_max = int(len(x_data) * 0.6)
                for ask, answer in zip(x_data, y_data):
                     ask_str = ''.join(ask)
                     if len(ask_str) == 0:
                          continue
                     top_key = jieba.lcut(ask_str)
                	   #print("top key:", top_key)
                	   y_code = ws_decode.transform(answer)[0]
                	   key_set = set(top_key)
                	   for key in key_set:
                	       rel_list = []        
                	            if key in self.dict:                 
                	               rel_list = self.dict[key]                    
                	               if rel_list[0]==0:                        
                                       continue                    
                	               elif len(rel_list)>=high_fw_max:                  
                	                   print("key list over:", key,"ask:", 
                	                   		ask_str)                        
                	                   	self.dict[key] = [0]                        
                	                   	continue
                    		 rel_list.append(y_code)                
                    		 self.dict[key] = rel_list
            	dict_items = self.dict.items()        
            	print("size:",len(self.dict))        
            	#print("dict:", dict_items)
            	self.fited = True
            	
        def relevance(self,ask,answer):
            assert self.fited, "RelevanceChat 尚未进行 fit 操作"
            top_key = jieba.lcut(''.join(ask))
            #print("top key:", top_key)                
            key_set = set(top_key)
            key_size = len(key_set)        
            if key_size == 0:            
            	return 0.0
            rel_num = 0        
            high_fw = 0        
            for key in key_set:            
            	rel_list = self.dict.get(key)
             	if rel_list is not None:                
             		if rel_list[0] == 0:                    
             			high_fw += 1                
             		elif answer in rel_list:                    
             			rel_num += 1
               
           if rel_num == 0:            
           	  relv_val = float(high_fw)/key_size        
           else:            
           	  relv_val = float(rel_num)/(key_size - high_fw)
           return relv_val
                        
    def test():    
    	x_data, y_data = pickle.load(open('pkl/chatbot.pkl', 'rb'))    
    	ws_decode = pickle.load(open('pkl/ws_decode.pkl', 'rb'))
    	relv = RelevanceChat(5)    
    	relv.fit(x_data,y_data,ws_decode)
    	count = 0    
    	for ask,answer in zip(x_data,y_data):        
    	decode = ws_decode.transform(answer)[0]        
    	relv_val = relv.relevance(ask,decode)
    	if relv_val<0.7:            
    		print("rel:", relv_val)            
    		print("ask:",''.join(ask))            
    		print("answer:", ''.join(answer),end='\n\n')            
    		count += 1
    		
    	print("same dialogue Confidence<0.7 count:", count)
    	
    	count = 0    
    	for i,answer in enumerate(y_data):        
    		decode = ws_decode.transform(answer)[0]
    		for j,ask in enumerate(x_data):            
    			if i==j:                
    				continue
    		relv_val = relv.relevance(ask,decode)            
    		if relv_val>0.7:                
    			#print("rel:", relv_val)                
    			#print("ask:",''.join(ask))                
    			#print("answer:", ''.join(answer),end='\n\n')                
    			count += 1                
    	print("different dialogue Confidence<0.7 count:",count)
    	
    if __name__ == '__main__':    
    	test()

    测试结果

    使用129条对话的语料集进行测试,结果见下图。语料集内对话置信度小于0.7的条数为0,不同对话间置信度大于0.7的有61,误报率:61/(129*128)=0.37%

    在这里插入图片描述
    知识共享许可协议
    本作品采用知识共享署名 4.0 国际许可协议进行许可。

    展开全文
  • 融合多模型与高置信度词典的事件线索检测
  • 今天,我带大家来看一看,我们应该如何根治这个问题——提高模型置信度。当我们训练模型训练精度大幅提升,执行度明显提高时,即使设置的阈值很高,也一定可以生成锚框。 样本容量 说到提高训练的准确率,很多人....

    在这里插入图片描述

    前言

    在之前的文章中我说过,如果你的Yolov3模型没有锚框出现,最直接的解决发方案是降低阈值(产生框的门槛),但是这个方法治标不治本。(Yolov3训练模型没有框(理论上一定有用的解决方案)

    今天,我带大家来看一看,我们应该如何根治这个问题——提高模型的置信度。当我们训练模型训练精度大幅提升,执行度明显提高时,即使设置的阈值很高,也一定可以生成锚框。

    在这里插入图片描述

    样本容量

    说到提高训练的准确率,很多人的第一反应就是增加样本的数量。但是今天我想告诉大家的是,这其实是大家的一个误区,模型对事物的检测能力和准确性在一定程度上,其实是两个概念。

    我们给计算机提供大量数据的时候,目的是让计算机见识到更多的情况,就像是大家读书的时候在刷题,你要题海战术,这样才能见到更多的题型,以后考试的时候见到各种各样的题型就不慌了,你知道该怎么去应付这种场景。

    但是,大量地刷题只能表示你见过这种题型,这并不代表你对这种题型已经完全掌握了。现在我们遇到的就是这种情况,计算机做过这个题型,但是它并没有掌握,所以在考试的时候,它给出的答案得分非常低,以至于低于你给定的显示标准,所以锚框不会显示。

    在这样的情况下,你喂给它再多的数据,锚框都不会出现的。

    在这里插入图片描述

    给定恰当的数据

    你假如考试的时候想得高分,那么你在平时刷题的时候就要选择恰当的题目进行练习。

    我举个例子,假如你今天想要做人车识别,你就要先假设好场景,你究竟是要做城市里面密密麻麻的人车,还是车展上目标很明显的人车。

    都市人车:

    在这里插入图片描述

    车展人车:

    在这里插入图片描述
    从图像中,大家应该可以非常明显地感受到,虽然都是人和车,但是这两种情景下人车的外在特征区别是很大的,你在给样本的时候,如果把这两种混在一起交给计算机训练,不是说不可以,但确实是给计算机的学习带来了很大的麻烦。特别是在你的样本容量比较小的情况下,识别的效果肯定不会好。

    再比方说,你给的汽车的样式中,是完整的汽车和半个汽车,这对于人来说,人知道这都叫汽车,但计算机眼中,半个车和一个车长得区别很大哎。

    比如大家对比一下上一张图和下一张图片:

    在这里插入图片描述

    调节 Batch_size

    如果你给的样本是ok的,但是训练结果的置信度还是很低,那么你需要去调整的就是batch_size的大小。

    大家要明白batch_size到底的是干什么的,这个很重要!

    我知道在很多人眼中,batch_size就是一次性取多少张图片,但是你这样的理解方式实在是太入门级别了。

    我们调整参数,设置合适的训练集的目的是为了让梯度朝着更加合理的方向下降,这才是根本!

    在这里插入图片描述
    假如我们今天把batch_size调得很大,好处是,计算机可以一口气了解这一组图片的特征,朝着一个大的方向进行梯度下降,这种做法可以使得迭代每一个世代的时间简短,且loss值不容易被困在局部最小值出不来。

    但是缺点也很明显,第一是你的显存够不够大,第二是由于太注重整体效果,对每一张图片的训练不够仔细。这就像是你用很短的时间,一口气做了很多张卷子,你心里很清楚大概题型是怎么样的,但是你对于每一种题型的处理并没有很好的理解。

    在这样的情况下,就很容易出现模型给出的置信度很低,以至于出不了锚框的现象。

    在这样的情况下,你应该减小batch_size的值,目的是每次训练少一点的图片,但是每一张图片要训练得更加仔细一些,这样训练出来的模型效果会有非常明显地提升。但是缺点是训练时间会比大batch_size明显长很多。

    在这里插入图片描述

    总结

    1、请先检查一下你给出的样本是否合适;

    2、关注你生成锚框的阈值;

    3、调节适当的Batch_size;

    不同的电脑,不同的GPU,不同版本的CUDA、学习框架对Batch_size的适应程度是不一样的,也许在别人的电脑上,这些参数的效果很好,而在你的电脑上就一塌糊涂。这些参数要靠大家一点一点去尝试的。

    祝大家学习愉快!
    在这里插入图片描述

    展开全文
  • 计算深度学习模型预测置信度

    千次阅读 2019-03-26 15:57:21
    proba为模型预测后的ndarray或list等。 np.argsort()建立从小到大的索引 [::-1]逆序,变成从大到小 [:2]取两个 ‘{:.2f}%’.format(proba[i]*100)保留两位输出 import numpy as np proba = [0.9,0.01,0.05,...

    np.argsort(proba)[::-1][:2]
    proba为模型预测后的ndarray或list等。
    np.argsort()建立从小到大的索引
    [::-1]逆序,变成从大到小
    [:2]取两个
    ‘{:.2f}%’.format(proba[i]*100)保留两位输出

    import numpy as np
    proba = [0.9,0.01,0.05,0.04]
    
    print(np.argsort(proba))#建立从小到大的索引[1 3 2 0]
    
    for i in np.argsort(proba):
        print(proba[i],end=' ')#0.01 0.04 0.05 0.9
    print()
    
    print(np.argsort(proba)[::-1])#逆序,变成从大到小[0 2 3 1]
    
    for i in np.argsort(proba)[::-1][:2]:
        print('{:.2f}%'.format(proba[i]*100))#取置信度最大前两个,保留两位输出
    
    [1 3 2 0]
    0.01 0.04 0.05 0.9 
    [0 2 3 1]
    90.00%
    5.00%
    





    具体可参考:
    Keras实现预训练网络VGG16迁移学习——102flowers分类【100行代码训练&预测】 - lly1122334的博客 - CSDN博客 https://blog.csdn.net/lly1122334/article/details/88784742

    展开全文
  • 具有小置信度的远程意见模型的共识分析
  • 通过学习模型置信度来解决故障预测 ( ,( ,( ,( ,( 神经信息处理系统(NeurIPS),2019年 如果您发现此代码对您的研究有用,请引用我们的论文: @incollection{NIPS2019_8556, title = {Addressing ...
  • 在验证阶段直接调小score_threshold,可以将mAP快速提升,但是实际上你的模型预测的结果,置信度还是很低。 2.调小batch_size 将原本的batch_size调小,同时增大learning_rate,batch_size可以尝试慢慢调小,因为...

    首先引用https://blog.csdn.net/Nire_Yeyu/article/details/105403220

    1.调小score_threshold

    这种方法属于见效快,但是治标不治本。在验证阶段直接调小score_threshold,可以将mAP快速提升,但是实际上你的模型预测的结果,置信度还是很低。

    2.调小batch_size

    将原本的batch_size调小,同时增大learning_rate,batch_size可以尝试慢慢调小,因为batch_size小,训练速度会变慢,batch_size大训练速度会相对快一些。
    原理是假设你正在看一本书,书的总页数是固定的(相当于数据集的大小)batch_size越大,相当于你每次同时看batch_size页的书,虽然learning_rate较低,即每次看的较慢,但是最终花费的时间短,理解的东西会比较片面,导致阅读质量下降,即预测结果置信度很低,即评估只能通过设置很小的score_threshold,来提升mAP。
    所以解决方法是,调小的batch_size,同时增大learning_rate。即每次看较少数量的内容,但是提高阅读速度,总花费时间较长,但理解的东西比较深刻,即最终模型训练的结果也会较好,评估阶段置信度较高。

    3.如果是YOLOV3训练

    1. 我遇到的问题是,前期precision很低,recall相对较高,查看结果是预测结果太多了,我的解决方法是提高nms阶段的score_threshold,原本0.01我调整到0.1又调到0.05,最终发现0.05效果较好。
    2. 加更,nms阶段的score_threshold可以继续增加,也可以提升一部分的mAP
    3. 更换优化器,即optimizer_name,可尝试替换其他优化器,查看效果

    总结

    上述是我将kmeans应用到YOLOV3中,更换自己的anchors时,mAP一直很低,自己多次调整之后,总结的经验。加油自己!离成功又近了一步~

    展开全文
  • 置信度

    千次阅读 2019-05-28 22:22:50
    置信度越高,说明模型对输出的结果越肯定。 比如置信度阀值为0.7是指,你进行计算后得到一个置信度的值,如果这个值超过0.7那么就认真实验成功或者说计算的结果有效可用. ...
  • 学习机器学习算法时,经常会碰到数理统计中置信区间、置信度,虽然学习过相关课程,但是每次遇到它总是懵懵懂懂,似懂非懂。为了对这两个概念有深入的了解,这里做了相关的介绍。为了不老是纠缠于数理统计理论,或者...
  • 通过引入置信度模型对构件的可信度进行评价,给出一个构件可信的度量模型。在度量模型中采用三角模糊数层次分析法确定运行状态对置信度的影响权重。仿真结果表明,该模型能够有效地度量构件的可信度。
  • 在优化置信度判别式训练准则的前提下,通过参数估计求解判别式转换矩阵,提取出具有判别性、低维度的图像特征,确保观察样本能正确地分配到其对应的模型状态,以提高所训练出的EHMM模型的正确识别率。理论分析证明了...
  • 基于置信度的规则集并考虑属性可靠性的故障隐患预测模型
  • 关于置信度

    2021-01-11 20:45:49
    行人双眼的置信度应该较低。但是在实际情况下,在行人距离摄像头较近的情况下,任然有行人背向车辆但是双目置信度较高的结果。有什么方法能改善这种情况呢?可以通过更改训练alphapose模型的样本...
  • 混合压缩相符预测器采用两阶段压缩过程:先将部分序列样本压缩成模型以知识的形式保存;再将知识传递给后续样本用于置信预测。混合压缩相符预测器不仅能提高计算效率,还提供巧妙的邻近性度量,从而极大地提高了第二...
  • 【火炉炼AI】机器学习016-如何知道SVM模型输出类别的置信度 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 一般的,对于未知样本,我们通过模型预测出来属于某种...
  • 提出一种基于高置信度模型更新策略的多相关滤波器协同跟踪算法。利用卷积网络结构VGG-Net-19提取目标周围区域的多层卷积特征,构造深度滤波器,以自适应的特征融合策略实现目标初定位;建立尺度滤波器以检测目标的尺寸...
  • 敏感分析是指对一个模型输出中的不确定性进行研究,并进一步判断不确定性的来源,也就是研究哪个输入参数的改变造成的输出变化的程度大小. 所以灵敏分析是进行数学建模过程中一个必不可少的常规步骤。 详细解释 ...
  • 网上看了一堆都是图片转lmdb格式,然后测试总的准确率,我想测试每张图片的top1,top2以及对应置信度是多少,摸索了一下午+一晚上终于搞定,期间遇到不少坑!!!同时感谢实验室博士师兄一块帮我找bug说明:数据集是...
  • 因此,提出了一种基于置信度的并行相关滤波跟踪算法。首先,使用一种新的置信度评价方法判断目标是否被遮挡或存在异常情况。其次,在置信度的基础上,用组合权重融合两种不同的跟踪器,构建并行相关滤波跟踪算法,以提高...
  • 信任或不信任分类器 这不是官方支持的Google产品 用于训练分类器的模型置信度的信号,该信号基于标记的训练示例以及分类器对这些示例的严格预测而计算得出。 参见
  • 以文档图像文件为输入的深度学习模型,通过标签和置信度来定位段落、线条、图像等的位置。 架构选择 -来自博客的灵感 - Yolov3、FasterRCNN 和 SSD 是用于对象检测的前三大模型架构。 因此,对于这项任务,对这 3 ...
  • 口语对话系统中,集外词的存在会引起很多识别错误,为了有效地发现并拒绝集外词,提高系统性能,研究利用置信度打分进行语音确认的方法,发现...基于置信度打分的语音确认策略在拒识性能上优于系统已有的在线垃圾模型
  • 算法通过置信度函数将用户隐性反馈映射为置信概率,并将该函数集成到隐性反馈推荐模型(IFRM)框架中,形成了隐性反馈置信度加权推荐模型(CWIFRM);在此基础上,针对CWIFRM基于随机梯度下降提出了异构置信度优化...
  • 意图识别置信度问题

    2020-12-05 21:36:14
    发现意图识别的置信度不高,感觉是和"音乐.继续"混淆了,是什么原因,怎么提高置信度? "intent_ranking": [ { "name": "音乐.播放音乐", "...
  • 该方法在MLP模型框架下直接将其输出的每帧语音类别的后验概率使用关键字置信度的计算,克服了HMM建模时假设每帧语音的声学特征相互独立以及以及关键词检出和置信度确认使用两套不同的模型结构,是两个完全独立的过程...
  • 针对命令词语音识别系统,传统的基于Filler模型置信度方法由于自身模型结构的限制,性能相对有限,尤其是对集外词的检测效果不好。为此,使用了一种基于音节循环的置信度判决方法,并对该方法的解码网络进行精简,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 968
精华内容 387
关键字:

模型置信度