语义相关性评估指标:召回率、准确率、Roc曲线、AUC;Spearman相关系数、NDCG、mAP。代码及计算示例。

常规的语义相关性评价可以从检索、排序两个方面进行。这里只贴代码。详细可见知乎https://zhuanlan.zhihu.com/p/682853171

检索

精确率

def pre(true_labels=[],pre_labels=[]):""":param true_labels: 正样本索引:param pre_labels: 召回样本索引:return: 精确率"""Predict_Pos = len(pre_labels)TP = len( set(true_labels) & set(pre_labels) )return TP / Predict_Pos 

计算示例:略。

召回率

def rec(true_labels=[],pre_labels=[]):""":param true_labels: 正样本索引:param pre_labels: 召回样本索引:return: 召回率"""TP = len( set(true_labels) & set(pre_labels) )All_Pos = len(true_labels)return TP / All_Pos

计算示例:略。

ROC曲线和AUC

def roc_curve(rec_list=[], pre_list=[]):""":param rec_list: 召回率列表:param pre_list: 精确率列表:return: AUC"""assert len(rec_list) == len(pre_list)# 召回、准确临界情况rec_list += [1, 0]pre_list += [0, 1]# 同一条横/纵轴有多个点的情况: 相同recall值下取precision的均值。rec_dict = {} # recall:[多个precisions]for i in range(len(rec_list)):if rec_list[i] not in rec_dict:rec_dict[rec_list[i]] = [pre_list[i]]else:rec_dict[rec_list[i]].append(pre_list[i])rec_list = []pre_list = []for key in rec_dict:rec_list.append(key)pre_list.append(sum(rec_dict[key])/len(rec_dict[key]))# 重排序rec_list_sorted = sorted(rec_list)pre_list_sorted = [pre_list[idx] for idx, _ in sorted(enumerate(rec_list), key=lambda x: x[1])]print(f"recall:{rec_list_sorted}. precision:{pre_list_sorted}.")# ROC曲线plt.plot(rec_list_sorted, pre_list_sorted)  # 画折线图plt.xlabel("Recalls")plt.ylabel("Precisions")plt.show()  # 显示图形# 曲线下面积计算auc = simps(pre_list_sorted, x=rec_list_sorted)return auc

计算示例:略。

排序

Supearman相关系数

def spearman(true_labels, predict_labels):""":param true_labels: 真实样本标签。:param predict_labels: 对应索引的预测样本标签。:return: Spearman系数。"""return spearmanr(true_labels, predict_labels)

计算示例:
true_labels = [0.9, 0.6 ,0.3]
predict_labels = [0.6, 0.4, 0.5]
真实标签的排序等级顺序为:[1, 2 ,3] ;预测标签排序等级为:[1, 3, 2]。
根据简化公式:
在这里插入图片描述
di表示第i项的位序等级差,即d = [0, 1, 1]。
Spearman计算为:1-62/3(9-1)=0.5。

NDCG

def getDCG(scores):""":param scores: 排序结果的真实相关性分数。真实相关性分数靠前的样本,增益(Gain)更高。当前scores中取值为 3、2、1。:return: DCG。"""# DCG。考虑顺序,使排名靠前的增益更高。scores = np.array(scores)return np.sum(np.divide( scores, np.log2(np.arange(scores.shape[0], dtype=np.float32)+2) ),dtype=np.float32)def getNDCG(true_labels, predict_labels):""":param true_labels: 真实标签。:param predict_labels: 预测标签。:return: NDCG。"""# 计算IDCGidcg = getDCG(sorted(true_labels,reverse=True))# 获得当前预测标签下的样本排序。suppport_for_relevance = [(true_label,predict_label) for true_label,predict_label in zip(true_labels,predict_labels)]suppport_for_relevance = sorted(suppport_for_relevance, key=lambda x: x[1], reverse=True)# 计算当前预测排序结果下的DCG。sort_relevance = [i[0] for i in suppport_for_relevance]dcg = getDCG(sort_relevance)return dcg/idcg

计算示例:
true_labels = [0.9, 0.6 ,0.3]
predict_labels = [0.6, 0.4, 0.5]
预测标签下的索引排序为[1, 3, 2],对应的相关性得分为[0.9, 0.3, 0.6]。
DCG = 0.9/log2(2)+0.3/log2(3)+0.6/log2(4) = 1.3892
IDCG = 0.9/log2(2)+0.6/log2(3)+0.3/log2(4) = 1.4286
NDCG = DCG/IDCG = 0.9725

mAP

def AP(true_labels, predict_labels):""":param true_labels: 真实样本标签。:param predict_labels: 对应索引的预测样本标签。:return: Average Precision。"""R = len(true_labels)sorted_indexes = sorted(range(len(predict_labels)), key=lambda x: predict_labels[x], reverse=True)TP = 0P = 0 # @N的N。average_precision = 0for i in sorted_indexes:P += 1# 相关性3(pos样本)定义为正样本if true_labels[i]==3:TP += 1average_precision += TP/P*(true_labels[i]-1)/2average_precision/=Rreturn average_precision

计算示例:
true_labels = [3, 2, 1]
根据公式将true_label归一化到了[1, 0.5, 0],作为相关性得分。
predict_labels = [0.6, 0.4, 0.5],根据预测标签排序后的真实标签相关性得分为[1, 0, 0.5]
将标签3视为正样本,则对应索引的正负样本为[1, 0, 0]。
预测标签下的索引排序为[1, 3, 2],对应的precision@1/2/3为[1, 0.5, 1/3]。
AP = 1/3 * (11 + 00.5 + 0.5* 1/3) = 0.3889

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首都博物京韵展,监测系统实现文物科技保护

​ 一、首都博物馆讲述京韵古都故事 2024年2月18日,首都博物馆重新亮相的“华夏文明的有力见证——北京通史展”震撼登场。展览面积4900平方米,汇聚1100多件(套)历史文物,不仅包含了传统历史瑰宝,还增加了…

【算法】基础算法002之滑动窗口(二)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 5.水果成篮&#xff…

【Java EE初阶十八】网络原理(三)

3. 网络层 网络层要做的事情主要是两方面: 1)、地址管理:制定一系列的规则,通过地址,描述出网络上一个设备的位置; 2)、路由选择:网络环境是比较复杂的,从一个节点到另一个节点之间,存在很…

达梦数据库——数据迁移sqlserver-dm报错问题_未完待续

记录SQL server到达梦数据迁移过程中遇到的问题,持续更新中... 报错情况一:Sql server迁移达梦连接报错’驱动程序无法通过使用安全套接字Q层(SSL)加密与SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted b…

每日一题 (不用加减乘除做加法,找到数组中消失的数字)

不用加减乘除做加法_牛客题霸_牛客网 (nowcoder.com) 可以使用位运算符实现两个整数的加法: 在二进制加法中,我们通常使用“逐位相加”的方法来模拟常规加法的过程。当两个数字进行加法运算时,从最低位(通常是右侧)开…

软考学习--计算机组成原理与体系结构

计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 :数字的二进制表示反码 : 正数的反码等于原码,负数的反码等于原码取反补码: 正数的补码等…

【算法】C语言使用qsort对字符串字符进行排序(解决字符串长度不统一的问题)

核心思想是 当a的长度>b时&#xff0c;a一定比b大当a,b长度相等时&#xff0c;通过strcmp比较哪个字典序大&#xff0c;也就是实际的数哪个大当a的长度&#xff1c;b是&#xff0c;b一定比a大 这时候就不得不感慨C的string是多么好用的&#xff0c;哎 #include<stdio.h…

⭐北邮复试刷题LCR 034. 验证外星语词典__哈希思想 (力扣119经典题变种挑战)

LCR 034. 验证外星语词典 某种外星语也使用英文小写字母&#xff0c;但可能顺序 order 不同。字母表的顺序&#xff08;order&#xff09;是一些小写字母的排列。 给定一组用外星语书写的单词 words&#xff0c;以及其字母表的顺序 order&#xff0c;只有当给定的单词在这种外…

软考30-上午题-数据结构-小结

一、杂题汇总 真题1&#xff1a; 有向图——AOV 带权有向图——AOE 真题2&#xff1a; 二叉排序树&#xff1a;左子树< 根节点 < 右子树。 二叉排序树中序遍历&#xff0c;节点关键字有序&#xff08;递增&#xff09;&#xff1b; 关键字初始序列有序&#xff0c;二叉树…

ubuntu 之 zeitgeist-fts 占用内存

座右铭&#xff1a;怎么简单怎么来&#xff0c;以实现功能为主。 欢迎大家关注公众号与我交流 sudo chmod -x /usr/bin/zeitgeist-daemonsudo chmod -x /usr/bin/zeitgeist-datahublocate zeitgeist-ftssudo chmod -x /usr/lib/x86_64-linux-gnu/zeitgeist-fts # 使用 locate z…

数据可视化利器:五款必备工具推荐

在数据可视化的世界里&#xff0c;工具的选择往往决定了工作的效率和效果。作为一名资深的数据可视化用户&#xff0c;我尝试并使用了众多的数据可视化工具。今天&#xff0c;我想向大家推荐五款我认为最好用、最实用的数据可视化工具。 1. 山海鲸可视化 山海鲸可视化以其强大…

计数排序和归并排序

计数排序 计数排序是一种非比较排序。 原理&#xff1a; 代码&#xff1a; void CountSort(int* nums, int numsSize) {int max nums[0], min nums[0];for (int i 0; i < numsSize; i) {if (nums[i] > max) {max nums[i];}if (nums[i] < min) {min nums[i];}}…

黑马程序员-瑞吉外卖day9

菜品分类下拉列表 CategoryController里面写 /*** 根据条件查询分类数据** param category* return*/GetMapping("/list")ApiOperation("菜品分类目录")public R<List<Category>> list(Category category) {List<Category> list cate…

后端扫盲系列 - vue入门指南

vue特点 组件化&#xff1a;用户界面分解为可重用的组件&#xff0c;这些组件可以使开发的页面更加模块化和可维护双向数据绑定&#xff1a;vue提供了一种轻松绑定数据和DOM元素之间的机制&#xff0c;意味着数据发送变化时&#xff0c;视图会自动更新&#xff0c;反之亦然虚拟…

GptSoVits音频教程

这个号称5秒克隆&#xff0c;或者用1分钟音频训练10分钟就能达到原声效果。 5秒的号称&#xff0c;只要是&#xff0c;什么几秒的&#xff0c;大家可以完全不要想了&#xff0c;什么知更鸟&#xff0c;什么火山&#xff0c;包括本次的GptSoVits的效果肯定是不行的&#xff0c;…

数据结构通讲

目录 集合源码详解 一、常见数据结构讲解 1. 线性数据结构 1.1 数组 1.2 队列 1.3 链表 1.3.1 单向链表 1.3.2 双向链表 1.4 栈 2. 非线性数据结构 2.1 树 2.2 二叉树 2.2.1 概念介绍 2.2.2 遍历操作 2.2.3 删除节点 2.2.4 查找局限性 2.2.5 AVL&#xff08; …

【C深剖】typedef关键字

简介&#xff1a;本系列博客为C深度解剖系列内容&#xff0c;以某个点为中心进行相关详细拓展 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

智能高压森林应急消防泵特点及优势

随着科技的发展&#xff0c;消防设备也在不断地升级改进。智能高压森林应急消防泵作为一种新型的消防设备&#xff0c;其特点和优势日益凸显&#xff0c;为森林火灾的扑救提供了有力的支持。本文将从以下几个方面对智能高压森林应急消防泵的特点和优势进行阐述。 一、高强度耐腐…

Ubuntu本地安装code-server结合内网穿透实现安卓平板远程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

机器学习第二十八周周报 PINNs2

文章目录 week28 PINNs2摘要Abstract一、Lipschitz条件二、文献阅读1. 题目数据驱动的偏微分方程2. 连续时间模型3. 离散时间模型4.结论 三、CLSTM1. 任务要求2. 实验结果3. 实验代码3.1模型构建3.2训练过程代码 小结参考文献 week28 PINNs2 摘要 本文主要讨论PINN。本文简要…