抖音排序算法,抖音排序算法有哪些?

抖音排序算法,抖音排序算法有哪些?

抖音的热门推荐机制虽然与威尔逊得分排序算法有些相似,但其实其复杂程度远远超过了该算法。

大概就是:

机器审核与人工审核的双重结合。

在视频刚上传的阶段,平台会提供一定的初始曝光量。随着点赞数、评论数和分享数的变化,平台会评估视频的受欢迎程度。如果第一次评估结果显示视频受欢迎,那么它将被进一步推广。

一旦你获得了最佳反馈,系统将会为你提供更高的流量推荐。

相对而言,如果在首波或之后的第N波中反应不佳,就不会再进行推荐。失去了平台的曝光,你的视频想要获得热度的可能性就非常小,因为几乎没有流量能够接触到它。

要让你的视频走红,首先必须有人看到。如果第一步就没做好,那后面的发展就会受阻,只能依赖朋友们零星的点赞来维持。

实际上,抖音的推荐机制算法有着明显的逻辑思路:流量池的运用、重复推荐的叠加效应、热门内容的加权以及用户心理的追求。

接下来,让我们深入探讨一下威尔逊得分(Wilson Score)排序算法吧!

威尔逊得分排序算法(Wilson Score)用于评估产品或服务的质量,其计算方式综合了好评和差评的数据。该算法不仅关注好评率,还考虑了评论的总数量,得出的得分越高,表示质量越优秀。

抖音排序算法,抖音排序算法有哪些?

在这个模型中,u代表正面评价的数量(好评),v代表负面评价的数量(差评),而n则是所有评论的总和。p是指好评的百分比,z是正态分布中的分位数(一个参数),而S表示最终计算出的威尔逊得分。通常,z的数值取2,这对应于95%的置信水平。

正太分布的分位数表:

抖音排序算法,抖音排序算法有哪些?

算法性质:

性质:得分S的范围是[0,1),效果:已经归一化,适合排序性质:当正例数u为0时,p为0,得分S为0;效果:没有好评,分数最低;性质:当负例数v为0时,p为1,退化为1/(1 + z^2 / n),得分S永远小于1;效果:分数具有永久可比性;性质:当p不变时,n越大,分子减少速度小于分母减少速度,得分S越多,反之亦然;效果:好评率p相同,实例总数n越多,得分S越多;性质:当n趋于无穷大时,退化为p,得分S由p决定;效果:当评论总数n越多时,好评率p带给得分S的提升越明显;性质:当分位数z越大时,总数n越重要,好评率p越不重要,反之亦然;效果:z越大,评论总数n越重要,区分度低;z越小,好评率p越重要;

“`python
def calculate_wilson_score(positives, total_count, z_value=2.):
"""
威尔逊得分计算函数
参考链接:https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval
:param positives: 正例数量
:param total_count: 项目总数量
:param z_value: 正态分布的分位数
:return: 计算得到的威尔逊得分
"""
positive_ratio=positives / total_count # 正例的比例
score=(positive_ratio + (z_value ** 2 / (2 * total_count))
– ((z_value / (2 * total_count)) *
np.sqrt(4 * total_count * (1 – positive_ratio) * positive_ratio + z_value ** 2))) / \
(1 + z_value ** 2 / total_count)
return score
“`

PS:关于z参数,它是与正态分位数相关的。正态分位数会影响Wilson得分的分布,而z参数的取值主要取决于样本的数量。例如,如果有100个样本,其中90个是好评,则z参数取2或6会导致得分的显著差异,系统能够处理或区分的样本数量也会有所不同(以0.82分和90%好评率为例,z=2时需要100个样本,而z=6则需要1000个样本)。通常情况下,样本数量越大,z的取值也会越高。

“`python
print('score: %s' % wilson_score(90, 100, p_z=2.))
print('score: %s' % wilson_score(90, 100, p_z=6.))
print('score: %s' % wilson_score(900, 1000, p_z=6.))

# 结果如下:
# p_z=2 的情况得分: 0.823802352689
# p_z=6 的情况得分: 0.606942322627
# p_z=6 的情况得分: 0.828475631056
“`

威尔逊得分算法的分布图展示了该算法在不同情况下的表现。通过可视化这些分布,我们能够更清晰地了解算法对输入数据的处理方式及其评分结果的波动性。这种图表为我们提供了重要的见解,帮助我们在实际应用中更有效地利用威尔逊得分算法。

抖音排序算法,抖音排序算法有哪些?

假设一个医生A收获了100条评价,其中包含1条差评和99条好评;而医生B则只有2条评价,都是好评。在这种情况下,应该如何进行排名呢?当置信度设定为95%,即z=2时,医生A的得分为0.9440,而医生B的得分为0.3333,因此最终结果是医生A在排名中位于前列。

例如:一段幽默视频在10次播放中,有6次获得了好评,而4次不被认可;而一段运动视频在1000次播放中,有550次表示喜欢,450次则表示不喜欢。

问题:喜剧视频和体育视频哪种更受欢迎?

第一种计分方式是:得分=赞成票数 – 反对票数;显然,这种方式表明运动类视频更受欢迎。

第二种评分方式是将赞成数量与总数相除,得出的得分明显表明,喜剧类视频的受欢迎程度更高。

当样本量很大时,使用点赞率作为评分标准的方法二是比较有效的。然而,当样本量较小时,例如在两次观看中都得到了喜欢,这样的点赞率达到了100%,但由于样本量太小,这样的结果并不足以代表真实情况,其可信度存疑。

因此,我们可以使用威尔逊置信区间方法,具体设定如下:

每次视频的观看都被视为一个独立事件。

视频反馈可以归为两类:受欢迎和不受欢迎。

视频的总观看次数为n,其中包含k次点赞。点赞的比例p可以通过公式p=k/n来计算。

显而易见,这是一种统计模型,即二项分布:假定在n次独立实验中,每次实验成功的概率为p,那么所有成功的次数K就可以视为一个符合参数n和p的二项随机变量。

通常来说,p值越高,意味着该类型视频的好评率越高,因此应该优先展示。但是,p值的可信程度依赖于观看总数的多少,如果样本量过小,p值的可靠性就会受到影响。这就像是一次实验成功后就认为它是完美的一样,实际上可能是偶然的结果。为了验证实验的成功率,我们需要多次重复实验,以提高结果的可信度。我们知道p值表示某个特定事件在二项分布中的发生概率,我们也可以计算出p值的置信区间。

在统计学中,置信区间是对某个总体参数的区间估计,基于一个概率样本。它展示了这个参数的真实值在测量结果周围的某个概率范围内,从而反映了测量值的可靠性,提供了被测参数的可信度。简而言之,置信区间能够指示一个概率,即该参数在该范围内的可能性。

例如,某个喜剧类型视频的点赞率为60%。然而,这个数据并不绝对,依据统计学原理,我们可以认为有95%的概率(即置信水平为0.05)该点赞率实际上在55%到65%之间。因此,置信区间为[55%, 65%]。样本量的大小对置信区间的宽度会产生影响:在置信水平固定的前提下,样本量增加时,置信区间会变得更加狭窄。值得一提的是,如果样本量保持不变,那么提高置信水平会导致置信区间扩大。

置信区间与样本总量之间的关系能够对概率p的可信度进行调整,从而缓解样本量过小或样本总量差异过大的问题。

当样本数量相对较少时,概率p的可靠性可能不足,这时需要对其进行调整。此时的置信区间通常较为宽广,其下限值往往会偏低。

当样本量较大时,结果的可信度提高,通常不需要进行显著的调整,相应的置信区间会相对狭窄,同时其下限值通常也会偏高。

接下来,我们将对不同类型的视频进行排名算法的比较,结果将更加明了:

第一步:计算每种类型视频的点赞比例;

第二步:对每个点赞率进行置信区间的计算;

第三步:计算置信区间的下限值(使用Wilson-S方法),并进行排序。下限值越高,排名相应越靠前。

置信区间的下限不能低于0,而上限则不能超过1。

1927年,美国数学家Edwin Bidwell Wilson提出了一种修正公式,这一公式被称为"威尔逊区间",有效地解决了小样本数据的准确性问题。

请注意:在上述公式中,样本的“赞成票比例”用来表示样本中赞成意见的比率,而n则代表样本的总数。所提到的z统计量与特定的置信水平相关,这是一个固定的数值,可以通过查阅统计表或使用统计软件获得。在常见的情况下,95%的置信水平对应的z统计量通常取值为1.96。

可以很明显地推导出威尔逊置信区间的均值,其计算公式为:(上限值 + 下限值)/ 2。

当n的值增大到一定程度时,可以观察到这个下限值会逐渐稳定下来。但是当n的值较小的时候,这个下限值会明显偏高。实际上,这有效地降低了“赞成票比例”,导致此类视频的评分降低,排名也因此下降。在具体的实例中,确实体现了这种情况。

这种排序算法能够减轻样本数量差异带来的影响,因此非常适合用于分析用户的兴趣爱好排序,从而实现更为个性化的推荐。

几种语言的实现示例。

Java实现

“`java
package com.lzhpo.wsdemo1.test1;

/**
* 威尔逊得分(Wilson Score)排序算法
*
* @author lzhpo
*/
public class WilsonScoreDemo1 {

/**
* 计算威尔逊得分
* <p>
* zP通常设为2,代表95%的置信水平。
* </p>
*
* @param u 正面评价数
* @param n 总评价数
* @param zP 正态分布分位数
* @return s 威尔逊得分
*/
public static double computeWilsonScore(double u, double n, double zP) {
// 正面评价比例
double p=u / n;
System.out.println("正面评价比例为:" + p);

// 计算威尔逊得分
double s=(p + (Math.pow(zP, 2) / (2. * n)) –
((zP / (2. * n)) * Math.sqrt(4. * n * (1. – p) * p + Math.pow(zP, 2)))) /
(1. + Math.pow(zP, 2) / n);

System.out.println("计算得出的威尔逊得分为:" + s);
return s;
}

public static void main(String[] args) {
// 输出结果:0.46844027984510983
System.out.println(computeWilsonScore(500, 1000, 2));
}
}
“`

Python实现

“`python
import numpy as np

def wilson_score(positive_reviews, total_reviews, z_score=2.):
"""
威尔逊得分(Wilson Score)算法,用于计算评分得分。

:param positive_reviews: 好评数
:param total_reviews: 评论总数
:param z_score: 正态分布的分位数(通常取值为2,代表95%的置信度)
:return: 计算得到的威尔逊得分
"""
positive_rate=positive_reviews / total_reviews
score=(positive_rate + (np.square(z_score) / (2. * total_reviews))
– ((z_score / (2. * total_reviews)) * np.sqrt(4. * total_reviews * (1. – positive_rate) * positive_rate + np.square(z_score)))) / (1. + np.square(z_score) / total_reviews)
return score

# 结果示例:0.46844027984510983
print(wilson_score(500, 1000, 2))
“`

Go实现

“`go
package main

import (
"fmt"
"math"
)

// 威尔逊得分(Wilson Score)算法实现
func main() {
// 输入参数:好评数,评价总数,正态分布的分位数
// 计算结果:0.46844027984510983
wilsonScore(500, 1000, 2)
}

// 计算威尔逊得分
// u:好评数量 n:总评价数量 zP:正态分布的分位数 (一般取值2,表示95%的置信度)
func wilsonScore(u float64, n float64, zP float64) float64 {
p :=u / n // 计算好评率
fmt.Println("好评率为:", p)

// 计算威尔逊得分
s :=(p + (math.Pow(zP, 2) / (2. * n)) – ((zP / (2. * n)) *
math.Sqrt(4.*n*(1.-p)*p + math.Pow(zP, 2)))) /
(1. + math.Pow(zP, 2) / n)

fmt.Println("威尔逊得分为:", s)
return s
}
“`

此代码展示了威尔逊得分的计算方法,该得分用于衡量评价的可靠性。输入包括好评数量、总评价数量和正态分布的分位数。通过程序可以输出好评率及其对应的威尔逊得分。

PHP实现

“`php
<?php
function calculateWilsonScore($successful, $totalAttempts, $zValue) {
$successRate=$successful / $totalAttempts;
$adjustmentTerm1=(1 / (2 * $successful)) * (pow($zValue, 2));
$adjustmentTerm2=$zValue * sqrt(($successRate * (1 – $successRate) / $successful) + (pow($zValue, 2) / (4 * (pow($successful, 2)))));
$adjustmentTerm3=1 + (1 / $successful) * (pow($zValue, 2));

$numerator=$successRate + $adjustmentTerm1 – $adjustmentTerm2;
$finalScore=$numerator / $adjustmentTerm3;
return $finalScore;
}

echo calculateWilsonScore(290, 300, 2);
?>
“`

引用资料:

抱歉,我无法访问该链接的内容。不过,如果你能告诉我网页的主题或想讨论的内容,我会很乐意帮你重新创作或总结!

抱歉,我无法打开链接。不过,如果您提供一些具体内容或者主题,我会很乐意帮助您进行改写或重新创作。请告诉我您想要的具体方向或重点!

抱歉,我无法访问外部链接。不过你可以告诉我关于该链接的主题或者需要帮助的内容,我将会根据提供的信息进行重新创作。

抱歉,我无法访问链接内容。如果您提供一些具体信息或文本,我很乐意帮助您进行创作或改写。请告诉我您需要的内容!

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.vsaren.com/165524.html