我试图了解rasa nlu(ver-0.12.3)输出的置信度得分实际是什么以及如何计算它们。
我一直在使用tensorflow嵌入进行意图分类任务。训练好模型并解析新数据/测试数据后,我将收到一个置信度得分以及每个可能的意图。但是我几乎不知道这个置信度分数实际上代表什么。
如文档中所述,它不代表概率。经过对结果的观察后,这似乎是一种多类型的评估,即对于单个文本输入,我可以获得具有高置信度得分的多个意图。
快速浏览code之后,我认为它是在“ embedding_intent_classifier.py”文件的“ _tf_sim”函数(以下相关代码段)中计算的
有人可以在此确认/澄清其工作原理或置信度得分的确切含义吗?
def _tf_sim(self, a, b):
"""Define similarity"""
if self.similarity_type == 'cosine':
a = tf.nn.l2_normalize(a, -1)
b = tf.nn.l2_normalize(b, -1)
if self.similarity_type == 'cosine' or self.similarity_type == 'inner':
sim = tf.reduce_sum(tf.expand_dims(a, 1) * b, -1)
# similarity between intent embeddings
sim_emb = tf.reduce_sum(b[:, 0:1, :] * b[:, 1:, :], -1)
return sim, sim_emb
else:
raise ValueError("Wrong similarity type {}, "
"should be 'cosine' or 'inner'"
"".format(self.similarity_type))
答案 0 :(得分:2)
意图分类器intent_classifier_tensorflow_embedding
(docs)是基于Facebook StarSpace paper的一种方法。
在这种方法中,意图示例及其标签都嵌入在同一多维空间中。因此,将意图特征向量和该句子的标签分别乘以权重矩阵,然后将权重矩阵映射到n维空间。在训练过程中,会调整这两个权重矩阵,以使映射的意图向量与其标签的映射向量相似,并且与其他标签尽可能不同。因此,使用cosine similarity测量相似度。如果向量指向同一方向(对于其他角度1
),则相似度为< 1
。