博客质量分计算——发布 version 5.0

news2024/11/24 13:23:29

目录

  • 1. 背景
  • 2. 质量分 version 5.0
    • 2.1 version 4 存在问题分析
    • 2.2 version 5.0 改进
    • 2.3 消融分析
      • 2.3.1 正向积极得分消融实验
      • 2.3.2 正向累积得分单变量实验
      • 2.3.3 非高分文章消融实验
    • 2.4 V4 和 V5.0 版本质量分分布对比
  • 3. 总结
  • 4. 参考

1. 背景

博客质量分顾名思义是用于衡量一篇博客的质量,其在 CSDN 的热榜、推荐、搜索等多个模块中发挥着关键性的作用。下图是质量分的工作机制:
在这里插入图片描述

图1 质量分的工作机制

先回顾一下,在第 4 版本 (后续称为 V4) 的质量分中,主要对得分进行了平滑,使得质量分结果分布更均匀,不会过度集中在头部 [80, 100] 和尾部 [0, 20),详见博客。

但是,在 V4 的质量分体系中无明显层次结构 (也可称为可解释性),即博主在博文中加入新的元素 (例如:图片、链接、代码等),质量分没有按阶梯式增高,在博文中加入一些影响阅读的元素之后 (例如:死链、虚假链接、代码混乱等) ,质量分也没有按阶梯式降低。

此外,虽然 V4 的质量分分布更加均匀,但还是不够,详见图 5,该图随机统计了 1 万篇博客质量分的分布情况,其中蓝色部分的柱状图是 V4 的质量分分布情况,可以看出得分主要分布在 [0, 20] 和 [50, 94] 两个区间段。

针对上述问题,第 5.0 版本 (后续称为 V5.0) 的质量进行了一系列的改进,在保证 V4 高质量博客数据保留约 90% 的情况下 (即 V4 中 80 分以上的博客在 V5.0 中有约 90% 仍在 80 分以上) ,得分分布更均匀,质量分体系层次结构也更清晰。

接下来,将对第 5.0 版本质量分的改进进行详细阐述。

2. 质量分 version 5.0

2.1 version 4 存在问题分析

下图是 V4 版本质量分计算流程:
在这里插入图片描述

图2 V4 版本质量分计算流程图

从图 2 可以看出,V4 版本质量分计算流程存在以下问题:

  • 正向积累得分中,目录标准目录 作为两个不同的项,存在冗余;
  • sigmoid 归一化中,sigmoid 函数将得分强制映射到了 (0.5, 0.938), 使得 0.5 和 0.938 以下的得分极少出现,此外 (此处得分为缩放前的得分,取值为[0, 1]);
  • sigmoid 归一化应该放在最后阶段,而不是中间阶段;
  • 文章是否有投票 可以直接放到正向累加得分中;
  • 计算逻辑中只有正向积累得分 (亦称加分项) 和惩罚项,而没有减分项。从得分系统设计逻辑的完备性来看,应该分为以下三个部分:
    • 加分项:从0到1,逐步加分;
    • 减分项:从1到0,逐步减分;
    • 强惩罚因子:严重违规的情况,直接乘以一个较低的惩罚因子,例如:0.1, 0.2。

此外,除了上述计算流程上的问题,V4 版本的质量分在多个得分项上面还存在以下问题:

  • 代码得分:可理解为代码量得分,英文为 lines of code,即代码的行数,而 V4 版本中的计算方式是代码中 token 的数量;
  • 各子得分项不够平滑:以 内容长度得分 为例,使用的是 Min–max normalization (代码如下所示),该归一化方法存在截断的情况,如果输入值大于最大值,则得分就不会发生变化了,并且也不够平滑,例如:
    • 内容长度得分,如果文章长度的最大值是 2000,文章 1 的长度为 2000,文章 2 的长度是 3000,则文章 1 和文章 2 的得分是一样的。

    • 目录得分,目录得分是基于正文中的多级子标题的数量进行计算的,标题数越多,则得分越高。V4 版本直接使用的是 Min–max normalization,其中 min = 0,max = 10。该归一化方法不够平滑,如果博文中只有 2 个子标题,则得分只有 0.2,但质量分的初衷是鼓励用户正确使用多级标题,有的文章确实不需要过多的多级标题,可能 2 个子标题就可以将文章结构划分得很清楚,即 2 个子标题应该得到 0.5 以上的得分。

      def min_max_normalization(value, max_value, min_value):
          if value > max_value:
              value = max_value
      
          if value < min_value:
              value = min_value
      
          if min_value > max_value:
              tmp_value = max_value
              max_value = min_value
              min_value = tmp_value
      
          norm_value = (value - min_value) / (max_value - min_value)
      
          return norm_value
      

2.2 version 5.0 改进

针对 V4 版本中存在的问题,V5.0 版本进行了相应的改进,改进后的计算流程如下图所示:
在这里插入图片描述

图3 V5 .0版本质量分计算流程图

从图 3 可以看出,V5.0 版本针对 V4 版本在计算流程方面进行了如下改进:

  • 目录标准目录 进行合并,统一为目录得分;
  • sigmoid 在进行平滑时候,放到了最后一个阶段,并且新的 sigmoid 函数映射的得分区间为 (0.017, 0.983),相比之前的 (0.5, 0.938),得分分布更加均匀,函数图像如下所示:
    在这里插入图片描述
图4 V4 和 V5.0 版本的得分平滑函数
  • 文章是否有投票 直接放到了加分项中;
  • 计算逻辑直接拆分成了三个部分:加分项、减分项和强惩罚项;
  • 新增 非 IT 技术文章 减分项
  • 文章结构太简单 从强惩罚因子变为减分项,因为文章结构简单已经在 文章内容长度得分 以及 标签多样性得分 等多个地方有所体现,故无需进行强惩罚;
  • 新增 图片得分
  • 优化各个子加分项权重,使得分呈阶梯式增高或降低;
  • 计算流程最后一步的得分取整 int(score * 100) 改为 round(score * 100) ,因为 python 中的 int() 默认是向下取整,round 是四舍五入。

此外,除了计算流程上的优化,V5.0 版本还对每个字得分项上的计算逻辑进行了优化,具体如下:

  • 代码得分 直接使用代码行数以及代码块个数进行衡量;
  • 针对多个子得分项不够平滑的问题,V5.0 中减少了 Min–max normalization 函数的使用,改为使用分段函数,或者其他更为平滑的曲线。V5.0 版本针对 内容长度得分目录得分代码得分内容长度得分链接得分图片得分 等多个子得分项进行了平滑以及计算逻辑微调,例如:
    • 对于 内容长度得分 中的截断问题,使用分段函数处理
      def __cal_content_length_score(self, content):
        """ 计算内容长度得分 v5.0
        """
        content_len_base = self.content_len_range["max"] / 2
        content_len_cut_off_point = sigmoid(self.content_len_range["max"] / content_len_base)
      
        content_len = len(content)
      
        # 分段函数,平滑内容长度较大时的得分
        if content_len <= self.content_len_range["max"]:
            score = min_max_normalization(
                content_len, self.content_len_range["max"], self.content_len_range["min"])
            score *= content_len_cut_off_point
        else:
            score = sigmoid(content_len / content_len_base)
      
        return score
      
    • 对于 目录得分 中不够平滑问题,使用幂函数进行平滑
      def __cal_heads_toc_score(self, sample):
        """ 计算目录得分 v5.0
        
        """
        # 1. 正文中的多级标题 (即 h1, h2, h3, h4) 得分
        heads_list = sample["catalog"]
        heads_num = len(heads_list)
      
        # 平滑,当 heads_num 较小时,得分变化不至于过小
        heads_score = min(math.pow(heads_num / self.heads_num_para["max"], 0.25), 1)
      
        # 2. toc 得分
        if "toc" in sample:
            toc_score = 1.0
        else:
            toc_score = 0.0
      
        # 3. 加权
        score = heads_score * self.heads_toc_weight["heads"] \
            + toc_score * self.heads_toc_weight["toc"]
      
        return score
      

2.3 消融分析

本文进行了部分消融实验,测试各个 V5.0 版本中各个因素的影响:

2.3.1 正向积极得分消融实验

通过逐步去掉影响质量分的某个要素,观察质量分的变化。

下表中,质量分-V5.0-sigmoid 表示 V5.0 版本最终的质量分,质量分-V5.0-base 表示 V5.0 版本 sigmoid 平滑前的质量分。由于 sigmoid 函数的特性 (函数图像见图 4),会平滑掉高分段和低分段分数的差异性,中分段的差异性会更加明显,这也符合一个常识性假设:“分数越高,就越难提升分数”。

因此,为了观察每个要素对质量分的影响,对比 质量分-V4质量分-V5.0-base 即可。从下表中标红的得分可知,V5.0 版本要优于 V4 版本,V5.0 版本更能体现随着要素的减少,质量分呈现阶梯式的降低。

博客质量分-V4质量分-V5.0-base质量分-V5.0-sigmoid长度标题图片链接目录标准目录代码投票元素多样性
测试博客1919798111111118
测试博客2919297111111108
测试博客3898695111111007
测试博客4838495111110006
测试博客5828193111100006
测试博客6797590111000004
测试博客7787084110000004
测试博客8766578100000004
测试博客97664770.7500000004
测试博客107662760.500000004
测试博客116846550.2500000004
测试博客1210232000000002

2.3.2 正向累积得分单变量实验

通过每次只去掉一个影响质量分的某个因素,观察质量分的变化。

理由同上,直接对比 质量分-V4质量分-V5.0-base,从下表中标红的得分可知,V5.0 版本要优于 V4 版本,每去掉一个要素,V5.0 版本的得分降低更加明显。

博客链接质量分-V4质量分-V5.0-base质量分-V5.0-sigmoid长度标题图片链接目录标准目录代码
测试博客19192971111111
测试博客28986951111110
测试博客38690971111101
测试博客49188961111011
测试博客59188961110111
测试博客69187961101111
测试博客79087961011111
测试博客89192970.75111111
测试博客99091970.5111111
测试博客108986950.25111111
测试博客111552580.1111111

2.3.3 非高分文章消融实验

上述两个对比实验使用的是高分文章,由于 sigmoid 在高分段平滑性强的影响,很难看出差异性。为了进一步证明 V5.0 版本的优势,下表是非高分文章的对比实验,可以看出,V5.0 版本的质量分变化更加平滑。最明显的例子就是第 1 行和第 2 行的数据,使用 V4 版本测试时,在第1 行的 12 分博客的基础上,逐字逐句地增加博客的长度, 质量分会从 12 分一下跳到 70 分,而 V5.0 版本的变化是均匀的。

博客质量分-V4质量分-V5.0
软件测试的案例分析 - 闰年11230
软件测试的案例分析 - 闰年27054
软件测试的案例分析 - 闰年36741
软件测试的案例分析 - 闰年47160
软件测试的案例分析 - 闰年4.17371
软件测试的案例分析 - 闰年4.28484
软件测试的案例分析 - 闰年4.2 (加投票)8589
软件测试的案例分析 - 闰年58395

2.4 V4 和 V5.0 版本质量分分布对比

随机抽取 10000 条博客数据,对比V4 和 V5.0 版本质量分分布情况,由下图可知,相比 V4 (蓝色部分) 版本,V5.0 版本 (红色部分) 的分布更加均匀,得分的覆盖范围也更广。
在这里插入图片描述

图5 V4 和 V5.0 版本质量分分布对比

3. 总结

质量分 V5.0 版本进行了较大的更新,由 2.3 节的对比实验可知,相比 V4 版本,随着文章内容的变化,V5.0 版本的得分变化更加均匀与合理。同时,由 2.4 节的分布对比可知,V5.0 版本的得分分布更加均匀,分布覆盖范围也更广。这些变化进一步带来的好处就是质量分变化的 可解释性 更强。

除了上述主动的优化,在修改代码的过程中,还发现了若干隐藏的 Bug,进一步确保了质量分计算的正确性。

此外,为了避免新版本 V5.0 对 V4 版本中高质量博客 (80 分以上) 的影响,通过函数变换,保证 V4 版本中约 90%的高质量博客仍在 80 分以上。

最后,希望各位用户多多提宝贵的建议,您的建议是我们后续持续优化的动力,感谢!

4. 参考

  • 博客质量分计算(三)——发布 version 4
  • 博客质量分计算(二)
  • 博客质量分计算(一)
  • CSDN-AI小组2023-半年-研发总结

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

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

相关文章

最新CMS指纹识别技术

点击星标&#xff0c;即时接收最新推文 本文部分节选于《web安全攻防渗透测试实战指南&#xff08;第二版&#xff09;》&#xff0c;即将上架&#xff0c;敬请期待。 指纹识别 1&#xff0e;CMS简介 CMS&#xff08;Content Management System&#xff0c;内容管理系统&#x…

微信小程序学习之数据绑定,事件绑定,事件传参与数据同步的学习记录

数据绑定&#xff0c;事件绑定&#xff0c;事件传参与数据同步 1. 数据绑定1.1. 在data中定义数据1.2. 在wxml中渲染数据 &#xff08;mustache语法&#xff09; 2. 事件绑定2.1. 事件2.2. 常用的事件2.3. 事件对象的属性列表2.4. target 和 currentTarget的区别 3. 事件传参与…

YOLOv5/v7 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28日最新发表》

包含 yolov5-AFPN.yaml 和yolov7-AFPN.yaml 论文地址:https://arxiv.org/pdf/2306.15988.pdf 代码地址:https://github.com/gyyang23/AFPN 多尺度特征在目标检测任务中对于编码具有尺度变化的对象非常重要。一种常见的多尺度特征提取策略是采用经典的自顶向下和自底向上的特…

53 # 反转二叉树

由于我学习的视频这一节跟上一节重复。没找到该节的学习资源&#xff0c;我自己参考网上实现的&#xff0c;有问题还请指出。 如图&#xff0c;下面实现反转 // 节点 class Node {constructor(element, parent) {this.element element; // 存的数据this.parent parent; // …

Stable Diffusion - ReV Animated v1.2.2 的 2.5D 模型与提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131655644 ReV Animated v1.2.2 模型能够创建类似 2.5D 的图像生成。该模型是 checkpoint 合并&#xff0c;是其他模型的产物&#xff0c;以创建源…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html&#xff0c;然后前台会解析成php 没测试最新版 比如编辑专题&#xff1a;/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文&#xff1a; 微擎后…

Unity经营类美食小摊小游戏

Unity经营类美食小摊小游戏 挺有意思的小游戏 关卡页面 游戏主页面 有顾客上门 需要给顾客搭配他们想要的美食 会不断地有顾客过来&#xff0c;这个时候就考验手速的时候了&#xff0c;真实模拟经营 服务到位立马有钱 项目地址&#xff1a; https://download.csdn.net/downl…

PHY芯片的使用(三)在U-boot下网络PHY的移植

1、概述 以太网 PHY 驱动移植&#xff0c;主要包括 Linux、 u-boot 及设备树等三个方面标准框架下的移植。本文以裕太8511PHY为例展开说明。一般国产芯片厂商会提供在uboot/linux下PHY的驱动。在uboot/linux的PHY框架是有区别的&#xff0c;这点要注意。 YT8511 PHY 驱动的移…

数学建模学习之发动机最优生产计划模型求解

问题重述 某工厂向用户提供发动机&#xff0c;按合同规定&#xff0c;其交货数量和日期是:第一季末交 40 台第二季末交 60 台&#xff0c;第三季末交 80 台。工厂的最大生产能力为每季 100 台&#xff0c;每季的生产费用是(元)&#xff0c;此处 为该季生产发动机的台数。若工…

(33)接收信号强度指示(RSSI)

文章目录 前言 33.1 在你的自动驾驶仪上设置RSSI 33.2 在MissionPlanner的HUD中显示RC接收器的RSSI值 33.3 连接实例 33.4 特殊用例 前言 本文介绍了如何获取自动驾驶仪的接收信号强度指示&#xff08;RSSI&#xff09;。 33.1 在你的自动驾驶仪上设置RSSI RSSI 可通过一…

录音转文字怎么操作?这几个好用的录音转文字的方法分享给你

小伙伴们&#xff0c;你们有没有遇到过这样的情况&#xff1a;想要记录一段重要的会议、讲座或者采访的内容&#xff0c;但是在网页上进行音频转文字的效果不好&#xff1f;别担心&#xff0c;随着科技的不断发展&#xff0c;音频转文字的软件可以很好的解决这些问题。这些神奇…

猿人学第二届第一题找修改位置(非答题)

第二届第一题 AES(魔改) Base64(魔改) MD5 第一题不难&#xff0c;想要得到结果直接扣代码就行&#xff0c;但是我想找找到底修改了哪个位置。 MD5( AES (now page) ) AES加密ECB-pksc7 的 key 标准是128位即 16*8(bit) &#xff0c;这里666yuanrenxue66 是15位不是标准k…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践应用

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行相…

java的默认字节序是big-endian

big-endian就是重要字节先出现&#xff0c;保存在低内存地址&#xff0c;而little-endian正好相反。 在Java中&#xff0c;默认是采用big-endian的。 Java官网虚拟机介绍章节&#xff0c;也明确进行了说明&#xff1a; https://docs.oracle.com/javase/specs/jvms/se20/html/jv…

10.2.7 【Linux】与文件系统及程序的限制关系:ulimit

单一 filesystem 能够支持的单一文件大小与 block 的大小有关。但是文件系统的限制容量都允许的太大了&#xff01;如果想要让使用者创建的文件不要太大时&#xff0c; 我们是可以考虑用 ulimit 来限制使用者可以创建的文件大小。 10.2.8 变量内容的删除、取代与替换 &#xf…

【SAP UI5 控件学习】DAY04 Input组Part IV 完结List组Part I

1.时间选择器Time Picker 和Data Picker类似&#xff0c;Time Picker允许用户选择相应的时间。 它有以下一些比较常用的属性。 value用于显示Input中的时间的值&#xff0c;这个属性只能接受字符串的值&#xff0c;如果是UI5.getInstance()获取到的时间&#xff0c;需要转化成…

零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 基…

LayUI 实现二级导航栏

目录 实现步骤&#xff1a; 1. 分析数据库 2. 构建数据源 2.1 编写实体类 2.2 编写节点实体类 2.3 构建BuildTree节点结构方法类 2.4 编写dao类 2.5 编写数据Acntion控制类 3. 前台准备 3.1 配置mvc.xml文件 3.2 页面编写 3.3 运行效果 实现步骤&#xff1a; 1. 分…

鼠标右击没有新建WORD、EXCEL、PPT选项卡解决方案

一、WinR打开运行窗口&#xff0c;输入regedit打开注册表 二、进入到相应位置&#xff0c;复制粘贴到路径处即可 ①word word&#xff1a;计算机\HKEY_CLASSES_ROOT\.docx 计算机\HKEY_CLASSES_ROOT\.doc 看你改哪个都行&#xff0c;我觉得修改第一个docx那个就行&#xff0c…

请求响应-路径参数的接收

目录 路径参数 单个路径参数地获取 多个路径参数地获取 路径参数 路径参数&#xff1a;通过URL直接传递参数&#xff0c;即参数是请求路径的一部分&#xff0c;Controller类中使用{参数名}来标识该路径参数&#xff0c;需要使用PathVarible获取路径参数 单个路径参数地获取…