当前位置:首页 » 操作系统 » 算法评分机制

算法评分机制

发布时间: 2023-05-05 01:44:06

A. 从豆瓣电影评分算法说起

在PingWest看到一篇《豆瓣电影打分规则竟如此简单粗暴…》,作者写这篇文章是因为豆瓣创始人阿北最近写了一篇博文《豆瓣电影评分八问》,阿北博文是为了回应一些外界对豆瓣电影评分的质疑,然后作者看到这篇博文后,觉得豆瓣电影的评分算法有点low,就写了这样一篇吐槽文章。

那么这个很low的算法究竟是什么样子的呢?此处引用阿北原文。

简单说就是计算每部电影评论的算数平均值,并按此值来排名。

对这个算法持怀疑态度,因为如果按照这神手个算法的话,假设一部小众文艺片有10个用户给了全五星,和一部经典老片比如《十二怒汉》相比,小众文艺片排名比《十二怒汉》还要高,不过这在豆瓣电影TOP250里面不太可能。阿北可能只是为了文章写作方便或是保密起见,把算法故意说简单了,因为假如豆瓣公布了详细的算法,那电影发行方的水军们十分有可能针对这个算法制定出有效的刷分策略的。可怜我还真信了。

下面是阿北当年在知乎上的 回答 。

顺着PingWest这篇文章给的链接,我又去阮一峰博客看了他在2012年写的《基于用户投票的排名算法》系列文章,以及这些文章里的参考文章,发现排名算法很好玩很有趣,非常有收获,推荐阅读。

看完这些文章,我就想知道知乎的评论排名算法是怎么样的,于是去知乎找到他们产品经理 @黄涛的回答 ,知乎在2014年底更新的算法使用的正是Reddit在2009年引入的评论排名算法,也就是阮一峰老师在系列文章第5篇中介绍的“威尔逊区间”算法。在用这个算法之前,知乎用的是直接利用好评减去差评的结果来给评论排序,这种算法的缺点我就不介绍了,可以查看参考资料[1]。

“威尔悉磨逊区间”算法的数学基础是数学家Edwin B. Wilson在1927年提出的威尔逊区间修正公式,后来芝加哥工程师Evan Miller在2009年写了一篇 博客 ,认为该修正公式睁瞎斗可以用来做排名。

这个算法的核心思想是这样的:

因为常见的置信区间计算公式“正态区间”不能很好的照顾小样本数量的准确性,而威尔逊提出的修正公式能很好地修正小样本数量的准确性问题,所以大家采用“威尔逊区间”算法较多,像Reddit、Yelp、Digg,还有知乎。

不过这种算法也有缺点,缺点就是对于那些得票少的新评论很难获得出头之日,因为得票少,置信区间就会宽,排名位置就会低,得到的关注也就会更少。

前面阿北的回答里面提到了IMDB,IMDB是亚马逊旗下的一个类似豆瓣的电影排名网站,他们在处理TOP250电影排名问题时采用了“贝叶斯平均”算法来解决,这个算法的核心思想是既然新兴产品的评分数量很少,那我就为你人工补偿一定的投票。关于这种算法在阮一峰老师系列文章第6篇中有介绍。

更多参考资料:

B. 层次分析法的打分机制

如果写这篇文章仅仅是介绍层次分析法的理论,显得完全没有必要。层次分析法作为最早接触到的一批算法,登山、旅游的决策案例听过太多遍了。

本文想讲一讲层次分析法在打分机制上的应用。

详细内容查看 AHP层次分析法的步骤和方法

层次分析法绕不开的第一步就是确定层次结构.(需要特征在三个及三个以上,否则无法满足一致性检验)

建立对比矩阵C,判断准则层三个特征对项目而言的重要程度。
使用专家评分的方式,评定对于项目而言各个特征的比较分值。
例如下图第一行技术风险A2比环境风险A1重要很多,非技术风险A3比环境风险A1重要一点。

矩阵C按列归一化处理,新矩阵B按行求和/n得到每个特征的权重:0.64794686, 0.12218196, 0.22987118
该矩阵满足一致性检验,CR=0.003

此方法适用方案层有三个及以上的参与者。理由是RI在n=1,2时,值为0,会导致一致性检验不满足要求。

A1条件下
整体环境风险A1下,三个候选人D1、D2、D3的比较。

满足一致性检验,CR = 0.056740233073197095
三个项目在A1条件下,各自的权重为:0.193, 0.083, 0.723。

A2条件下
技术风险A2下,三个候选人D1、D2、D3的比较

满足一致性检验,CR = 0.015807980379472106
三个项目在A1条件下,各自的权重为:0.137, 0.623, 0.239

A3条件下
非技术风险A3下,三个候选人D1、D2、D3的比较

满足一致性检验,CR = 0.056475713035283585
三个项目在A1条件下,各自的权重为:0.283, 0.643, 0.074

三个项目评分
项目甲D1在环境风险A1、技术风险A2、非技术风险A3下的分值分别为0.193、0.137、0.283。所以项目D1的总得分为=分值 * 特征权重。
SCORE = 0.193 * 0.64794686 + 0.137 * 0.12218196 + 0.283 * 0.22987118 = 0.20696492
同理计算出项目乙得分0.27802246,项目丙得分0.51501263。所以丙是最合适的选择。

项目甲D1在环境风险A1、技术风险A2、非技术风险A3三个方面的得分分别为72, 78, 88;
项目甲D2在环境风险A1、技术风险A2、非技术风险A3三个方面的得分分别为68, 90, 94;
项目甲D3在环境风险A1、技术风险A2、非技术风险A3三个方面的得分分别为98, 80, 78;
项目总得分为=分值 * 特征权重。
甲乙丙三个项目得分分别为:77.49、79.93、86.43,丙为最优选择。

已经根据层次分析计算出每个特征的权重。
方法一是采用方案层在每个特征下的比较;方案二是直接对每个项目打分;但这类打分人工随意性比较大。还可以采用模糊评价法,设置评价集V={很好,好,一般,差},找20个人来打分,数值为打这些分的人数。

对矩阵归一化后为M,得分 = 权重 * M,再归一化 。
D1 = [0.23, 0.23, 0.17, 0.37]
同理计算出项目乙D2,项目丙D3的模糊得分
D2 = [0.17, 0.31, 0.40, 0.12]
D3 = [0.46, 0.18, 0.24, 0.12]
说明项目甲23%程度为很好,23%程度为好,17%程度为一般,37%程度为差;
说明项目乙17%程度为很好,31%程度为好,40%程度为一般,12%程度为差;
说明项目丙46%程度为很好,18%程度为好,24%程度为一般,12%程度为差;
要求很好、好的概率在60%以上,因此项目丙是最优选择。

觉得三个特征还能继续深入。扩展准则层。

第一步 :建立A1,A2,A3三个大特征的对比矩阵,计算三个特征的权重W1、W2、W3。
第二步 :特征A1下有B1、B2、B3、B4四个特征,建立B1、B2、B3、B4的对比矩阵,计算特征的权重w11,w12,w13,w14;
特征A2下有B5、B6、B7三个特征,建立B5、B6、B7的对比矩阵,计算特征的权重w21,w22,w23;
特征A3下有B8、B9、B10三个特征,建立B8、B9、B10的对比矩阵,计算特征的权重w31,w32,w33。
B1、B2、B3、B4,...,B10的特征权重为w11 W1,w12 W1,w13 W1,...,w33 W3

第三步 :分值计算。
先设置项目在B系列特征的得分a1,a2,...,a10,项目总得分为sum(权重*得分)。

(1)以上专家评分是在满足逻辑的前提下,一堆乱打的分值。所以层次分析法的打分质量的好坏影响判断,专家打分人为因素太强,解释性不够。
(2)准则层涉及的特征不宜过多,特征太多人工写分数很麻烦。

层次分析法在项目风险分析中的应用
绝对打分方法

C. 豆瓣评分是怎么计算出来的

众所周知,在中国的电影观看者心中,豆瓣电影的评分是很强大的一个参考标准。一些有文艺情怀的青年可以在此闲话国际新浪潮,批判一些超现实主义,而迷妹们可以为自己心中的偶像所,参演的影片点赞,支持……更多的人,可能根本对电影没有太多研究,甚至只凭喜好或者“听别人说”而去观影的同时也会选择在买票之前参考一下豆瓣电影的评分。

可以说,豆瓣电影的评分一度成为大家评价电影质量的标杆,甚至可以影响一部电影的票房高低,那么豆瓣电影的评分标准到底是怎样的呢?

上诉图片是2015 年的时候豆瓣总经理阿北发表的一篇长文中所说的,意思很明确,豆瓣电影的评分就是基于用户打分:把豆瓣用户的打分(一到五星换算为零到十分)加起来,再除以用户数。就是豆瓣电影的评分,这个分数完全来自程序的计算,中间没有编辑审核,每隔几分钟就自动更新一下,以便快速的展现出及时的评分。

可以说,这是一个“简单粗暴”的评分机制。观众的评价将以非常直接的方式反映在电影的分数上,心情好时打的“五星”和心情不好时的“一星”都将被加入到简单的计算公式中,最终变成其他人的参考标准。

但同时,阿北也说到,豆瓣也是有“非正常打分”规避机制的。作为一个拥有一亿多用户的“大众评审团”,每个用户都是“一人一票”制,而且随着打分人数的增加,单人评分对整体评分走向的影响其实是在不断被稀释。因此,评分计算方法很简单,但“刷分”基本上是不可能的。



所以,总体来说,豆瓣的电影评分是参与评分人群的意见“平均值”,虽然有很多的规避以及防范措施,但总体上受评分人个人喜好的影响较大。但我们都知道,豆瓣的用户,更多的是在全国一二线城市,而且受众群体大多数都是人们口中所谓的文艺青年们,所以,对于拥有相对“高端”用户群体的豆瓣,其评分还是偏“小众”的

D. 英国高考采用算法打分,这是一种什么样的打分方式

近期因为疫情,英国高考采用了一种算法打分方式,简要来说就是,老师先根据学生平时的学习表现预估出各科目的“原始分”,然后再将原始分输入进电脑,通过算法程序得出各科目的“最终分”——然后学生的高考成绩单就出来了。

二、这是一种不公正的打分方式

虽然美其名为“算法打分制”,但明眼人一眼就看出,这种打分机制的关键决定权,其实是掌握在老师的手里。

而所谓的“算法”反而更像一块“黑盒子”——或者说“遮羞布”?

当分数主要由老闷明师的主观喜好决定的时候,“不公正”与“暗箱操作”自然也就无可避免了,这是正常人都一清二楚的事情。

由于我国古代沿袭了上千年的科举制,我国人民对于高考的态度那是相当严肃,正因如此,当英国政府表现出对于高考如此儿戏的态度时,着实是惊掉了一蚂洞告大群人的下巴。

E. 《王者荣耀》对局评分算法是什么

战绩(KDA):死亡次数越少、击杀数量越多、助攻数量越多,KDA评分就会越高。

参团率:个人单局击杀和助攻的总数占我方全队人头数的比例,多参与团战参团率自然就高。

金币/分钟:单局个人每分钟获得的经济,经济主要依靠击杀敌方英雄、小兵、野怪以及摧毁对方防御塔来获得。

英雄伤害/分钟:单局个人每分钟对敌方英雄输出的伤害,adc和apc的输出一般比较高。

承受伤害/局:单局个人承受的伤害,坦克和肉辅通常是作为前排吸收伤害。

建筑伤害/局:单局个人对敌方建筑造成的伤害。

伤害转化比

在《王者荣耀》新赛季手游中,游戏对局中的伤害转化比指的是在本局中,伤害占比/经济占比=伤害转化比,数值越大说明玩家经济吃的不多但是输出非常可观,而接近于1则表明持平。伤害转换比可以理解为伤害转换率,伤害占比/经济占比*100%=伤害转换率;比如:

1、伤害占比30%,经济占比19% ,伤害转化比就是1.6。

2、伤害占比24%,经济占比23%,伤害转化比就是1.0。

F. 王者荣耀评分是怎样计算的 王者荣耀MVP计算方法

王者荣耀MVP计算公式:MVP=(击杀+助攻)/死亡

在王者荣耀5v5竞技中想要获得MVP,就得格外注意K、D、A,也就是击杀、死亡、助攻,本场最佳英雄公式为MVP=(K+A)/D,按照这个公式来说MVP不一定是击杀最多的人,想要获得MVP除了击杀之外就是助攻了,击杀助攻越多死亡越少那么获得MVP的机会也就越大。我们自己来计算的时候就是击杀加上助攻除以死亡,得出来的数字最高的人就是本场的MVP,当然本场战斗的胜利也是决定拿胜方MVP和败方MVP的重要因素。

G. Elasticsearch——评分机制详解

一个搜索引擎使用的时候必定需要排序这个模块,如果在不选择按照某一字段排序的情况下,都是按照打分的高低进行一个默认排序的,所以如果正式使用的话,必须对默认排序的打分策略有一个详细的了解才可以,否则被问起来为什么这个在前面,那个在后面?

将查询作为输入,将每一个因素最后通过公式综合起来,返回该文档的最终得分。这个综合考量的过程,就是将相关的文档被优先返回的考量过程。

Elasticsearch是基于Lucene的,所以它的评分机制也是基于Lucene的。在Lucene中把这种相关性称为得分(score),确定文档和查询有多大相关性的过程被称为打分(scoring)。

ES最常用的评分模型是 TF/IDF和BM25,TF-IDF属于向量空间模型,而BM25属于概率模型,但是他们的评分公式差别并不大,都使用IDF方法和TF方法的某种乘积来定义单个词项的权重,然后把和查询匹配的词项的权重相加作为整篇文档的分数。

在ES 5.0版本之前使用了TF/IDF算法实现,而在5.0之后默认使用BM25方法实现。

relevance score相关性算分:简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度。

通过倒排索引可以获取与查询语句相匹配的文档列表,那么如何将最符合用户查询需求的文档放到前列呢?

本质是一个排序问题,排序的依据是相关性算分。

Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法。TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)

相关性算分的几个重要概念如下:

ES目前主要有两个相关性算分模型,如下:

BM25中的IDF公式为:

原版BM25的log中是没有加1的,Lucene为了防止产生负值,做了一点小优化。虽然对公式进行了更改,但其实和原来的公式没有实质性的差异,下面是新旧函数曲线对比:

BM25中TF的公式为:

其中tf是传统的词频值。先来看下改良前后的函数曲线对比(下图中k=1.2):

可以看到,传统的tf计算公式中,词频越高,tf值就越大,没有上限。但BM中的tf,随着词频的增长,tf值会无限逼近(k+1),相当于是有上限的。这就是二者的区别。一般 k取 1.2,Lucene中也使用1.2作为 k 的默认值。

在传统的计算公式中,还有一个norm。BM25将这个因素加到了TF的计算公式中,结合了norm因素的BM25中的TF计算公式为:

和之前相比,就是给分母上面的 k 加了一个乘数 (1.0−b+b∗L)(1.0−b+b∗L)。 其中的 L 的计算公式为:

其中,|d|是当前文档的长度,avgDl 是语料库中所有文档的平均长度。

b 是一个常数,用来控制 L 对最总评分影响的大小,一般取0~1之间的数(取0则代表完全忽略 L )。Lucene中 b 的默认值为 0.75。

通过这些细节上的改良,BM25在很多实际场景中的表现都优于传统的TF-IDF,所以从Lucene 6.0.0版本开始,上位成为默认的相似度评分算法。

上例是通过similarity属性来指定打分模型,用到了以下三个参数:

如果我们要使用某种特定的打分模型,并且希望应用到全局,那么就在elasticsearch.yml配置文件中加入:

通过boosting可以人为控制某个字段的在评分过程中的比重,有两种类型:

通过在mapping中设置boost参数,可以在索引期间改变字段的评分权重:

需要注意的是:在索引期间修改的文档boosting是存储在索引中的,要想修改boosting必须重新索引该篇文档。

一旦映射建立完成,那么所有name字段都会自动拥有一个boost值,并且是以降低精度的数值存储在Lucene内部的索引结构中。只有一个字节用于存储浮点型数值(存不下就损失精度了),计算文档的最终得分时可能会损失精度。

另外,boost是应用与词条的。因此,再被boost的字段中如果匹配上了多个词条,就意味着计算多次的boost,这将会进一步增加字段的权重,可能会影响最终的文档得分。

查询期间的boosting可以避免上述问题。

几乎所有的查询类型都支持boost,例如:

就对于最终得分而言,加了boost的name查询更有影响力。也只有在bool查询中,boost更有意义。

boost也可以用于multi_match查询。

除此之外,我们还可以使用特殊的语法,只为特定的字段指定一个boost。通过在字段名称后添加一个^符号和boost的值。告诉ES只需对那个字段进行boost:

上例中,title字段被boost了3倍。

需要注意的是:在使用boost的时候,无论是字段或者词条,都是按照相对值来boost的,而不是乘以乘数。如果对于所有的待搜索词条boost了同样的值,那么就好像没有boost一样。因为Lucene会标准化boost的值。如果boost一个字段4倍,不是意味着该字段的得分就是乘以4的结果。

ES背后的评分过程比我们想象的要复杂,有时候某个查询结果可能跟我们的预期不太一样,这时候可以通过explain让ES解释一下评分细节。

由于结果太长,我们这里对结果进行了过滤("size": 1返回一篇文档),只查看指定的字段("_source": "name"只返回name字段)。

在新增的_explanation字段中,可以看到value值是0.9331132,那么是怎么算出来的呢?

分词spring在描述字段(name)出现了1次,所以TF的综合得分经过"description" : "tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:"计算,得分是0.43243244。

那么逆文档词频呢?根据"description" : "idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:"计算得分是0.98082924。

需要注意的是,explain的特性会给ES带来额外的性能开销,一般只在调试时使用。

搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values。

在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用。

doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上。

DocValues默认是启用的,可以在创建索引的时候关闭,如果后面要开启DocValues,需要做reindex操作。

参考:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/scoring-theory.html

https://blog.csdn.net/qq_29860591/article/details/109574595

https://www.jianshu.com/p/2624f61f1d02

http://www.dtmao.cc/news_show_378736.shtml

https://blog.csdn.net/molong1208/article/details/50623948

https://www.cnblogs.com/Neeo/articles/10721071.html

https://www.cnblogs.com/jpfss/p/10775376.html

https://zhuanlan.hu.com/p/27951938

H. 5. 简答题 算法的评价标准有哪些如何评价

评价算法的四个标准:

1.正确性

能正确地实现预定的功能,满足具体问题的需要。处理数据使用的算法是否得当,能不能得到预想的结果。

2.易读性

易于阅读、理解和交流,便于调试、修改和扩充。写出的算法,能不能让别人看明白,能不能让别人明白算法的逻辑?如果通俗易懂,在系统调试和修改或者功能扩充的时候,使系统维护更为便捷。

3.健壮性

输入非法数据,算法也能适当地做出反应后进行处理,不会产生预料不到的运行结果。数据的形式多种多样,算法可能面临着接受各种各样的数据,当算法接收到不适合算法处理的数据,算法本身该如何处理呢?如果算法能够处理异常数据,处理能力越强,健壮性越好。

4.时空性

算法的时空性是该算法的时间性能和空间性能。主要是说算法在执行过程中的时间长短和空间占用多少问题。

算法处理数据过程中,不同的算法耗费的时间和内存空间是不同的。

(8)算法评分机制扩展阅读:

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。此外,一个算法还具有下列5个重要的特性。

(1)、有穷性

一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。

(2)、确定性

算法中每一条指令必须有明确的含义,读者理解时不会产生二义性。即对于相同的输入只能得到相同的输出。

(3)、可行性

一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

(4)、输入

一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。

(5)、输出

一个算法有一个或多个的输出,这些输出是同输入有着某种特定关系的量。

I. 王者荣耀的评分机制是怎样的

王者荣耀在1月12日开启了新模式荣耀战区,部分区目前还处于尚未开放阶段,不过也有部分玩家率先体验到了这个新模式,那么荣耀战区也是积分天梯制,本篇就为大家带来荣耀战区评分机制说明以及玩法规则介绍以供大家参考。

荣耀战区规则:

系统根据召唤师上赛季英雄排位赛历史数据继承,继承模型由各段位该英雄胜场数、各段位该英液雀雄胜率、该英雄周期内使用频率等维度搭建,并最终得出召唤师英雄初始战力。上赛季排位赛未使用的英雄的初始战力为100。

增减分规则:

该英雄参与排位赛才可增减分,增减模型由该召唤师使用此英雄的历史评分所计算而得的预期表现与此次对局评分对比、对手战力评分、此英雄当前段位与其他玩家的平均表现等维度搭建。胜利,结算评分越高,得分越高;即使失败,只要召唤师的评分高,也能实现加少量分;失败且评分低,则扣分。该英雄参与排位赛对局的段位越高,荣耀战力则加成越高,获得分数越多。

FAQ:

1、现在看到输了也会加分,但不清楚什么时候会加?

官方答复:如果玩家当场表现的mvp分非常好,并且全队就只有其一个人表现的非常好时,则会视该玩家使用该英雄的战力值与对手队伍的平均战力值的差值情况,进行少量的加分。

2、低段位是不是比高段位战斗力增长会更快?看起来场次因素不小,那高段位使用同一英雄的频率肯定比低段位高

官方答复:每个段位下的成绩都是单独记录的,但高段位向下宽悔覆盖低段位,每个段位的分都会大于0,所以段位越高,历史战绩部分一定是收益越大的;对于历史表现部分,将会根据玩家每场的表现情况与预期表现的差值进行队伍内的排名,排名越高则胜利加分越高,失败扣分越少,具体分支和段位及对手的平均战力情况而定。

3、初始战力评定不清楚:有的英雄打完一局从几千开始变化,有的英雄打完从几百开始变化

官方答复:版本刚更新时,会根据大家上赛季的战绩情况进行部分历史战绩的继承,所以导致大家登陆后的分数不同。

4、战力增加的多少是否和每局结算的评分有关联——表现不好但是赢了会不会扣分

官方答复:躺赢不会扣分,只是加的会比较少。

5、1000分和2000分的时候表现差不多,战力加成是否会不一样

官方答复:不一样,分数越高时,系统会预期你打的更好,所以分数越高加的会越少,输了扣的会越多

6、对不同类型的英雄是否有不同的算法——类如辅助和输出的算法是否一样

官方答复:对每个英雄都是分别计算的,会根据该英雄在相同段位下的平均mvp分计算出玩家应该打到的mvp分。

7、使用同一个英雄连胜会不会有加成闹巧早

官方答复:连胜不会有额外的加成

热点内容
吃鸡低配置手机如何开极致画质 发布:2025-05-16 18:15:20 浏览:191
空密码访问 发布:2025-05-16 18:08:51 浏览:892
腾讯云服务器安全规则设置 发布:2025-05-16 17:51:33 浏览:650
k3服务器不可用怎么办 发布:2025-05-16 17:51:30 浏览:537
编辑html源码 发布:2025-05-16 17:45:45 浏览:65
边的存储方法 发布:2025-05-16 17:33:16 浏览:927
海量服务器怎么拆 发布:2025-05-16 17:31:07 浏览:211
运行与编译的区别 发布:2025-05-16 17:25:02 浏览:824
c语言for中continue 发布:2025-05-16 17:20:14 浏览:648
ftp储存 发布:2025-05-16 17:04:08 浏览:506