抖音排序算法,抖音排序算法有哪些?
抖音排序算法,抖音排序算法有哪些?
抖音的熱門推薦機(jī)制雖然與威爾遜得分排序算法有些相似,但其實(shí)其復(fù)雜程度遠(yuǎn)遠(yuǎn)超過了該算法。
大概就是:
機(jī)器審核與人工審核的雙重結(jié)合。
在視頻剛上傳的階段,平臺會(huì)提供一定的初始曝光量。隨著點(diǎn)贊數(shù)、評論數(shù)和分享數(shù)的變化,平臺會(huì)評估視頻的受歡迎程度。如果第一次評估結(jié)果顯示視頻受歡迎,那么它將被進(jìn)一步推廣。
一旦你獲得了最佳反饋,系統(tǒng)將會(huì)為你提供更高的流量推薦。
相對而言,如果在首波或之后的第N波中反應(yīng)不佳,就不會(huì)再進(jìn)行推薦。失去了平臺的曝光,你的視頻想要獲得熱度的可能性就非常小,因?yàn)閹缀鯖]有流量能夠接觸到它。
要讓你的視頻走紅,首先必須有人看到。如果第一步就沒做好,那后面的發(fā)展就會(huì)受阻,只能依賴朋友們零星的點(diǎn)贊來維持。
實(shí)際上,抖音的推薦機(jī)制算法有著明顯的邏輯思路:流量池的運(yùn)用、重復(fù)推薦的疊加效應(yīng)、熱門內(nèi)容的加權(quán)以及用戶心理的追求。
接下來,讓我們深入探討一下威爾遜得分(Wilson Score)排序算法吧!
威爾遜得分排序算法(Wilson Score)用于評估產(chǎn)品或服務(wù)的質(zhì)量,其計(jì)算方式綜合了好評和差評的數(shù)據(jù)。該算法不僅關(guān)注好評率,還考慮了評論的總數(shù)量,得出的得分越高,表示質(zhì)量越優(yōu)秀。
在這個(gè)模型中,u代表正面評價(jià)的數(shù)量(好評),v代表負(fù)面評價(jià)的數(shù)量(差評),而n則是所有評論的總和。p是指好評的百分比,z是正態(tài)分布中的分位數(shù)(一個(gè)參數(shù)),而S表示最終計(jì)算出的威爾遜得分。通常,z的數(shù)值取2,這對應(yīng)于95%的置信水平。
正太分布的分位數(shù)表:
算法性質(zhì):
性質(zhì):得分S的范圍是[0,1),效果:已經(jīng)歸一化,適合排序性質(zhì):當(dāng)正例數(shù)u為0時(shí),p為0,得分S為0;效果:沒有好評,分?jǐn)?shù)最低;性質(zhì):當(dāng)負(fù)例數(shù)v為0時(shí),p為1,退化為1/(1 + z^2 / n),得分S永遠(yuǎn)小于1;效果:分?jǐn)?shù)具有永久可比性;性質(zhì):當(dāng)p不變時(shí),n越大,分子減少速度小于分母減少速度,得分S越多,反之亦然;效果:好評率p相同,實(shí)例總數(shù)n越多,得分S越多;性質(zhì):當(dāng)n趨于無窮大時(shí),退化為p,得分S由p決定;效果:當(dāng)評論總數(shù)n越多時(shí),好評率p帶給得分S的提升越明顯;性質(zhì):當(dāng)分位數(shù)z越大時(shí),總數(shù)n越重要,好評率p越不重要,反之亦然;效果:z越大,評論總數(shù)n越重要,區(qū)分度低;z越小,好評率p越重要;
“`python
def calculate_wilson_score(positives, total_count, z_value=2.):
"""
威爾遜得分計(jì)算函數(shù)
參考鏈接:https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval
:param positives: 正例數(shù)量
:param total_count: 項(xiàng)目總數(shù)量
:param z_value: 正態(tài)分布的分位數(shù)
:return: 計(jì)算得到的威爾遜得分
"""
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:關(guān)于z參數(shù),它是與正態(tài)分位數(shù)相關(guān)的。正態(tài)分位數(shù)會(huì)影響Wilson得分的分布,而z參數(shù)的取值主要取決于樣本的數(shù)量。例如,如果有100個(gè)樣本,其中90個(gè)是好評,則z參數(shù)取2或6會(huì)導(dǎo)致得分的顯著差異,系統(tǒng)能夠處理或區(qū)分的樣本數(shù)量也會(huì)有所不同(以0.82分和90%好評率為例,z=2時(shí)需要100個(gè)樣本,而z=6則需要1000個(gè)樣本)。通常情況下,樣本數(shù)量越大,z的取值也會(huì)越高。
“`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.))
# 結(jié)果如下:
# p_z=2 的情況得分: 0.823802352689
# p_z=6 的情況得分: 0.606942322627
# p_z=6 的情況得分: 0.828475631056
“`
威爾遜得分算法的分布圖展示了該算法在不同情況下的表現(xiàn)。通過可視化這些分布,我們能夠更清晰地了解算法對輸入數(shù)據(jù)的處理方式及其評分結(jié)果的波動(dòng)性。這種圖表為我們提供了重要的見解,幫助我們在實(shí)際應(yīng)用中更有效地利用威爾遜得分算法。
假設(shè)一個(gè)醫(yī)生A收獲了100條評價(jià),其中包含1條差評和99條好評;而醫(yī)生B則只有2條評價(jià),都是好評。在這種情況下,應(yīng)該如何進(jìn)行排名呢?當(dāng)置信度設(shè)定為95%,即z=2時(shí),醫(yī)生A的得分為0.9440,而醫(yī)生B的得分為0.3333,因此最終結(jié)果是醫(yī)生A在排名中位于前列。
例如:一段幽默視頻在10次播放中,有6次獲得了好評,而4次不被認(rèn)可;而一段運(yùn)動(dòng)視頻在1000次播放中,有550次表示喜歡,450次則表示不喜歡。
問題:喜劇視頻和體育視頻哪種更受歡迎?
第一種計(jì)分方式是:得分=贊成票數(shù) – 反對票數(shù);顯然,這種方式表明運(yùn)動(dòng)類視頻更受歡迎。
第二種評分方式是將贊成數(shù)量與總數(shù)相除,得出的得分明顯表明,喜劇類視頻的受歡迎程度更高。
當(dāng)樣本量很大時(shí),使用點(diǎn)贊率作為評分標(biāo)準(zhǔn)的方法二是比較有效的。然而,當(dāng)樣本量較小時(shí),例如在兩次觀看中都得到了喜歡,這樣的點(diǎn)贊率達(dá)到了100%,但由于樣本量太小,這樣的結(jié)果并不足以代表真實(shí)情況,其可信度存疑。
因此,我們可以使用威爾遜置信區(qū)間方法,具體設(shè)定如下:
每次視頻的觀看都被視為一個(gè)獨(dú)立事件。
視頻反饋可以歸為兩類:受歡迎和不受歡迎。
視頻的總觀看次數(shù)為n,其中包含k次點(diǎn)贊。點(diǎn)贊的比例p可以通過公式p=k/n來計(jì)算。
顯而易見,這是一種統(tǒng)計(jì)模型,即二項(xiàng)分布:假定在n次獨(dú)立實(shí)驗(yàn)中,每次實(shí)驗(yàn)成功的概率為p,那么所有成功的次數(shù)K就可以視為一個(gè)符合參數(shù)n和p的二項(xiàng)隨機(jī)變量。
通常來說,p值越高,意味著該類型視頻的好評率越高,因此應(yīng)該優(yōu)先展示。但是,p值的可信程度依賴于觀看總數(shù)的多少,如果樣本量過小,p值的可靠性就會(huì)受到影響。這就像是一次實(shí)驗(yàn)成功后就認(rèn)為它是完美的一樣,實(shí)際上可能是偶然的結(jié)果。為了驗(yàn)證實(shí)驗(yàn)的成功率,我們需要多次重復(fù)實(shí)驗(yàn),以提高結(jié)果的可信度。我們知道p值表示某個(gè)特定事件在二項(xiàng)分布中的發(fā)生概率,我們也可以計(jì)算出p值的置信區(qū)間。
在統(tǒng)計(jì)學(xué)中,置信區(qū)間是對某個(gè)總體參數(shù)的區(qū)間估計(jì),基于一個(gè)概率樣本。它展示了這個(gè)參數(shù)的真實(shí)值在測量結(jié)果周圍的某個(gè)概率范圍內(nèi),從而反映了測量值的可靠性,提供了被測參數(shù)的可信度。簡而言之,置信區(qū)間能夠指示一個(gè)概率,即該參數(shù)在該范圍內(nèi)的可能性。
例如,某個(gè)喜劇類型視頻的點(diǎn)贊率為60%。然而,這個(gè)數(shù)據(jù)并不絕對,依據(jù)統(tǒng)計(jì)學(xué)原理,我們可以認(rèn)為有95%的概率(即置信水平為0.05)該點(diǎn)贊率實(shí)際上在55%到65%之間。因此,置信區(qū)間為[55%, 65%]。樣本量的大小對置信區(qū)間的寬度會(huì)產(chǎn)生影響:在置信水平固定的前提下,樣本量增加時(shí),置信區(qū)間會(huì)變得更加狹窄。值得一提的是,如果樣本量保持不變,那么提高置信水平會(huì)導(dǎo)致置信區(qū)間擴(kuò)大。
置信區(qū)間與樣本總量之間的關(guān)系能夠?qū)Ω怕蕄的可信度進(jìn)行調(diào)整,從而緩解樣本量過小或樣本總量差異過大的問題。
當(dāng)樣本數(shù)量相對較少時(shí),概率p的可靠性可能不足,這時(shí)需要對其進(jìn)行調(diào)整。此時(shí)的置信區(qū)間通常較為寬廣,其下限值往往會(huì)偏低。
當(dāng)樣本量較大時(shí),結(jié)果的可信度提高,通常不需要進(jìn)行顯著的調(diào)整,相應(yīng)的置信區(qū)間會(huì)相對狹窄,同時(shí)其下限值通常也會(huì)偏高。
接下來,我們將對不同類型的視頻進(jìn)行排名算法的比較,結(jié)果將更加明了:
第一步:計(jì)算每種類型視頻的點(diǎn)贊比例;
第二步:對每個(gè)點(diǎn)贊率進(jìn)行置信區(qū)間的計(jì)算;
第三步:計(jì)算置信區(qū)間的下限值(使用Wilson-S方法),并進(jìn)行排序。下限值越高,排名相應(yīng)越靠前。
置信區(qū)間的下限不能低于0,而上限則不能超過1。
1927年,美國數(shù)學(xué)家Edwin Bidwell Wilson提出了一種修正公式,這一公式被稱為"威爾遜區(qū)間",有效地解決了小樣本數(shù)據(jù)的準(zhǔn)確性問題。
請注意:在上述公式中,樣本的“贊成票比例”用來表示樣本中贊成意見的比率,而n則代表樣本的總數(shù)。所提到的z統(tǒng)計(jì)量與特定的置信水平相關(guān),這是一個(gè)固定的數(shù)值,可以通過查閱統(tǒng)計(jì)表或使用統(tǒng)計(jì)軟件獲得。在常見的情況下,95%的置信水平對應(yīng)的z統(tǒng)計(jì)量通常取值為1.96。
可以很明顯地推導(dǎo)出威爾遜置信區(qū)間的均值,其計(jì)算公式為:(上限值 + 下限值)/ 2。
當(dāng)n的值增大到一定程度時(shí),可以觀察到這個(gè)下限值會(huì)逐漸穩(wěn)定下來。但是當(dāng)n的值較小的時(shí)候,這個(gè)下限值會(huì)明顯偏高。實(shí)際上,這有效地降低了“贊成票比例”,導(dǎo)致此類視頻的評分降低,排名也因此下降。在具體的實(shí)例中,確實(shí)體現(xiàn)了這種情況。
這種排序算法能夠減輕樣本數(shù)量差異帶來的影響,因此非常適合用于分析用戶的興趣愛好排序,從而實(shí)現(xiàn)更為個(gè)性化的推薦。
幾種語言的實(shí)現(xiàn)示例。
Java實(shí)現(xiàn)
“`java
package com.lzhpo.wsdemo1.test1;
/**
* 威爾遜得分(Wilson Score)排序算法
*
* @author lzhpo
*/
public class WilsonScoreDemo1 {
/**
* 計(jì)算威爾遜得分
* <p>
* zP通常設(shè)為2,代表95%的置信水平。
* </p>
*
* @param u 正面評價(jià)數(shù)
* @param n 總評價(jià)數(shù)
* @param zP 正態(tài)分布分位數(shù)
* @return s 威爾遜得分
*/
public static double computeWilsonScore(double u, double n, double zP) {
// 正面評價(jià)比例
double p=u / n;
System.out.println("正面評價(jià)比例為:" + p);
// 計(jì)算威爾遜得分
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("計(jì)算得出的威爾遜得分為:" + s);
return s;
}
public static void main(String[] args) {
// 輸出結(jié)果:0.46844027984510983
System.out.println(computeWilsonScore(500, 1000, 2));
}
}
“`
Python實(shí)現(xiàn)
“`python
import numpy as np
def wilson_score(positive_reviews, total_reviews, z_score=2.):
"""
威爾遜得分(Wilson Score)算法,用于計(jì)算評分得分。
:param positive_reviews: 好評數(shù)
:param total_reviews: 評論總數(shù)
:param z_score: 正態(tài)分布的分位數(shù)(通常取值為2,代表95%的置信度)
:return: 計(jì)算得到的威爾遜得分
"""
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
# 結(jié)果示例:0.46844027984510983
print(wilson_score(500, 1000, 2))
“`
Go實(shí)現(xiàn)
“`go
package main
import (
"fmt"
"math"
)
// 威爾遜得分(Wilson Score)算法實(shí)現(xiàn)
func main() {
// 輸入?yún)?shù):好評數(shù),評價(jià)總數(shù),正態(tài)分布的分位數(shù)
// 計(jì)算結(jié)果:0.46844027984510983
wilsonScore(500, 1000, 2)
}
// 計(jì)算威爾遜得分
// u:好評數(shù)量 n:總評價(jià)數(shù)量 zP:正態(tài)分布的分位數(shù) (一般取值2,表示95%的置信度)
func wilsonScore(u float64, n float64, zP float64) float64 {
p :=u / n // 計(jì)算好評率
fmt.Println("好評率為:", p)
// 計(jì)算威爾遜得分
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
}
“`
此代碼展示了威爾遜得分的計(jì)算方法,該得分用于衡量評價(jià)的可靠性。輸入包括好評數(shù)量、總評價(jià)數(shù)量和正態(tài)分布的分位數(shù)。通過程序可以輸出好評率及其對應(yīng)的威爾遜得分。
PHP實(shí)現(xiàn)
“`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);
?>
“`
引用資料:
抱歉,我無法訪問該鏈接的內(nèi)容。不過,如果你能告訴我網(wǎng)頁的主題或想討論的內(nèi)容,我會(huì)很樂意幫你重新創(chuàng)作或總結(jié)!
抱歉,我無法打開鏈接。不過,如果您提供一些具體內(nèi)容或者主題,我會(huì)很樂意幫助您進(jìn)行改寫或重新創(chuàng)作。請告訴我您想要的具體方向或重點(diǎn)!
抱歉,我無法訪問外部鏈接。不過你可以告訴我關(guān)于該鏈接的主題或者需要幫助的內(nèi)容,我將會(huì)根據(jù)提供的信息進(jìn)行重新創(chuàng)作。
抱歉,我無法訪問鏈接內(nèi)容。如果您提供一些具體信息或文本,我很樂意幫助您進(jìn)行創(chuàng)作或改寫。請告訴我您需要的內(nèi)容!

如若轉(zhuǎn)載,請注明出處:http://www.qjsdgw.cn/165524.html