使用LSTM构建聊天机器人,无论输入是什么,就算输入完全不符合语法,模型都会给出一个输出,显然,这个输出不是我们想要的,如何识别模型输出是不是我们想要的?我们需要一种评估指标,评估模型输出的置信度。那么使用loss值做为评价指标是否可行呢?具体的想法是输入一句话(string)进LSTM模型,得到预测句子,把预测句子做为标签(label),即(string,label)做为一条对话,输入到LSTM训练模型,计算出loss值loss_val,loss_val除以模型训练时loss平均值做为LSTM模型的置信度指标。这个想法是否可行,写代码测试看看。从下图测试结果来看,训练loss值:最小0.0,最大0.000322,平均2.495e-6;语料集之内的对话测试3次loss值:6.557e-7,0.0,0.219;语料集之外的对话测试3次loss值:2.187e-5,0.0,0.0886,语料集之内与之外的loss值并没与明显的边界,因此不能做为LSTM模型的置信度指标。
import sys
import pickle
import time
import numpy as np
import tensorflow as tf
from flask import Flask,request
import re
import relavance
from sequence_to_sequence import SequenceToSequence
from data_utils import batch_flow
def test(params):
x_data, _ = pickle.load(open('pkl/chatbot.pkl', 'rb'))
ws_encode = pickle.load(open('pkl/ws_encode.pkl', 'rb'))
ws_decode = pickle.load(open('pkl/ws_decode.pkl', 'rb'))
relv = pickle.load(open('pkl/relevance.pkl','r