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

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