为什么softmax值不适合用于评估LSTM聊天机器人输出置信度

        使用LSTM构建聊天机器人,无论输入是什么,就算输入完全不符合语法,模型都会给出一个输出,显然,这个输出不是我们想要的,如何识别模型输出是不是我们想要的?我们需要一种评估指标,评估模型输出的置信度。那能不能使用模型最后一层softmax值做为置信度指标?分析 LSTM网络模型图,可以知道,LSTM模型的本质是通过训练给定的语料集,找到合适的权重值,建立了一种映射关系,把输入映射到输出。对于语料集中列出的对话,模型建立了合适的权重值,输入能正确的映射到输出,对于语料集中没有的对话,模型没有得到训练,自然没有建立合适的权重值,模型的输出是随机的,最后一层softmax值自然也是随机的,所以最后一层softmax值不能做为LSTM模型的置信度指标。

       下面对“最后一层softmax值不能做为LSTM模型的置信度指标”进行实测验证,选取129条对话的小语料集训练LSTM模型,进行了150轮训练,精准度达到了1.0。从下面的测试结果图可以看到,使用训练集中的对话测试的softmax值分别是:0.999,1.0,0.992,非训练集中的对话结果是:0.769,0.999,1.0,结果符合之前的判断,是随机的,最后一层softmax值不能做为LSTM模型的置信度指标。

##模型计算softmax值代码:
        decode_pred = sess.run(self.decoder_outputs_decode, input_feed)
        pred = decode_pred.sample_id

        if self.time_major:
            pred = tf.transpose(pred, (1, 0))

        pred = sess.run(pred)
        decode_rnn_output = decode_pred.rnn_output
        if self.time_major:
            decode_rnn_output = tf.transpose(decode_rnn_output,(1, 0, 2))

        decode_softmax = tf.nn.softmax(decode_rnn_output,axis=2)
        decode_softmax_val = sess.run(decode_softmax)
        code_id = int(pred[0][0])

        print("confidence:", decode_softmax_val[0][0][code_id])

测试结果:

使用训练语料集之内的对话进行测试:

使用训练语料集之外的对话进行测试:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值