一种评估聊天机器人输出置信度的方法
为什么需要评估聊天机器人输出置信度
使用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