完成网站集约化建设,wordpress 注册功能,织梦dede模板自带的网站地图优化指南,漳州网站建设优化推广引言
本文是七月在线《NLP中的对话机器人》的视频笔记#xff0c;主要介绍FAQ问答型聊天机器人的实现。
模型的评估
我们如何评估模型的好坏#xff1f;由于我们的数据集没有提供测试数据#xff0c;所以我们很难评估模型的好 坏。如果我们要做非常严谨的评估#xff0c…引言
本文是七月在线《NLP中的对话机器人》的视频笔记主要介绍FAQ问答型聊天机器人的实现。
模型的评估
我们如何评估模型的好坏由于我们的数据集没有提供测试数据所以我们很难评估模型的好 坏。如果我们要做非常严谨的评估最好是能够制作一个验证数据集包括训练数据中不存在的 新问题与该问题最相近的已知问题以及问题的答案。
虽然我们实现的是FAQ问答机器人但实际上解决的是搜索问题比如给定问题查找最相似问题的答案。
MRR
评估指标可以采用Mean Reciprocal Rank(MRR) 这是一个推荐系统的评价指标也就是正确答案在推荐答案中的排名的倒数平均。
MRR的原理如下 MRR1∣Q∣∑i1∣Q∣1ranki\text{MRR} \frac{1}{|Q|} \sum_{i1}^{|Q|} \frac{1}{\text{rank}_i} MRR∣Q∣1i1∑∣Q∣ranki1
假设给定一个问题你知道它的正确答案是什么。模型会在整个数据集上进行搜索它会给数据集中的每个问题打一个分数我们就知道正确答案被模型排到哪个位置。 正确答案排名越高表示系统越好MRR表示的是最佳答案排名的倒数。最佳答案排名是1到样本总数n那么倒数是就是0到1之间的数值。然后对所有问题样本计算的该数值求平均得到的还是0到1之间的数值。分数越接近1表示模型越好。
其代码实现如下 def mean_reciprocal_rank(rs):Score is reciprocal of the rank of the first relevant itemFirst element is rank 1. Relevance is binary (nonzero is relevant).Example from http://en.wikipedia.org/wiki/Mean_reciprocal_rank rs [[0, 0, 1], [0, 1, 0], [1, 0, 0]] mean_reciprocal_rank(rs)0.61111111111111105 rs np.array([[0, 0, 0], [0, 1, 0], [1, 0, 0]]) mean_reciprocal_rank(rs)0.5 rs [[0, 0, 0, 1], [1, 0, 0], [1, 0, 0]] mean_reciprocal_rank(rs)0.75Args:rs: Iterator of relevance scores (list or numpy) in rank order(first element is the first item)Returns:Mean reciprocal rankrs [np.asarray(r).nonzero()[0] for r in rs]return np.mean([1. / (r[0] 1) if r.size else 0. for r in rs])从注释中可知rs [[0, 0, 1], [0, 1, 0], [1, 0, 0]]表示正确答案的位置比如第一个问题正确答案在位置3第二个问题正确答案在位置2第三个问题正确答案在位置1。
np.nonzero()返回非零元素的位置可能有多个因此返回的是数组。但这里实际上只有一个nonzero()[0]得到它的位置。
rs [[0, 0, 1], [0, 1, 0], [1, 0, 0]]
rs [np.asarray(r).nonzero()[0] for r in rs]
rs[array([2]), array([1]), array([0])]这里表示我们只关注模型返回的前3个最相似问题其中正确答案分别在位置3位置2和位置1。
np.mean([1. / (r[0] 1) if r.size else 0. for r in rs])0.611111111111111如果某个结果中一个正确答案都没有那么它的大小(size)就是0得分就是0。否则得分为位置的倒数(索引才0开始加1变成了位置)。
参考
https://gist.github.com/bwhite/3726239