從工程師的角度探索TikTok推薦系統(tǒng)架構(gòu)。
TikTok是一款視頻共享應(yīng)用程序,可讓用戶創(chuàng)建和共享短視頻。它以個(gè)性化的“just for you”的推薦給用戶留下了深刻的印象。它在Z世代中非常受歡迎,容易讓人上癮。在它的背后,它是由人工智能技術(shù)驅(qū)動(dòng)的。
TikTok架構(gòu)
TikTok推薦系統(tǒng)的架構(gòu)包括三個(gè)組件:大數(shù)據(jù)框架、機(jī)器學(xué)習(xí)和微服務(wù)架構(gòu)。
- 大數(shù)據(jù)框架是系統(tǒng)的起點(diǎn)。它提供實(shí)時(shí)數(shù)據(jù)流處理,數(shù)據(jù)計(jì)算和數(shù)據(jù)存儲(chǔ);
- 機(jī)器學(xué)習(xí)是推薦系統(tǒng)的大腦。使用一系列機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法與技術(shù)用于構(gòu)建模型并生成適用于個(gè)人偏好的建議;
- 微服務(wù)架構(gòu)是底層的基礎(chǔ)設(shè)施,使整個(gè)系統(tǒng)快速高效地提供服務(wù)。
大數(shù)據(jù)框架
沒有數(shù)據(jù),就沒有情報(bào)。
分析的大多數(shù)數(shù)據(jù)來自用戶的智能手機(jī)。這包括操作系統(tǒng)和已安裝的應(yīng)用程序等。更重要的是,TikTok特別關(guān)注用戶的活動(dòng)日志,例如觀看時(shí)間,滑動(dòng),喜歡,分享和評(píng)論。
日志數(shù)據(jù)通過flume和scribe收集和匯總。它們通過管道進(jìn)入Kafka 隊(duì)列。然后,Apache Storm使用Apache Hadoop生態(tài)系統(tǒng)中的其他組件實(shí)時(shí)處理數(shù)據(jù)流。
Apache Hadoop生態(tài)系統(tǒng)是一個(gè)用于數(shù)據(jù)處理和存儲(chǔ)的分布式系統(tǒng),這包括第一代分布式數(shù)據(jù)處理系統(tǒng)MapReduce。它與批處理并行處理數(shù)據(jù)。YARN 是用于作業(yè)調(diào)度和群集資源管理的框架。HDFS 是一個(gè)分布式文件系統(tǒng)。HBase 是一個(gè)可擴(kuò)展的分布式數(shù)據(jù)庫,支持大型表的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。Hive 是提供數(shù)據(jù)匯總和查詢的數(shù)據(jù)倉庫基礎(chǔ)結(jié)構(gòu)。 Zookeeper是一項(xiàng)高性能的協(xié)調(diào)服務(wù)。
隨著數(shù)據(jù)量的快速增長,實(shí)時(shí)數(shù)據(jù)處理框架也隨之出現(xiàn)。Apache Spark是第三代框架,有助于對(duì)大數(shù)據(jù)工作負(fù)載進(jìn)行近乎實(shí)時(shí)的分布式處理。Spark通過在內(nèi)存中處理來增強(qiáng)MapReduce的性能。在過去的幾年里,TikTok應(yīng)用了第四代框架Flink。它旨在本機(jī)執(zhí)行實(shí)時(shí)流式處理。
數(shù)據(jù)庫系統(tǒng)包括MySQL,MongoDB和許多其他系統(tǒng)。
機(jī)器學(xué)習(xí)
這是TikTok如何贏得個(gè)性化,且令人上癮的算法家喻戶曉的名字的中心。
在大量數(shù)據(jù)集涌入后,接下來是內(nèi)容分析、用戶分析和上下文分析。神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)框架(如TensorFlow)用于執(zhí)行計(jì)算機(jī)視覺和本地語言處理(NLP)。計(jì)算機(jī)視覺將使用照片和視頻解釋圖像。NLP包括分類、標(biāo)記和評(píng)估。
使用經(jīng)典的機(jī)器學(xué)習(xí)算法,包括邏輯回歸(LR),卷積神經(jīng)網(wǎng)絡(luò)(CNN),遞歸神經(jīng)網(wǎng)絡(luò)(RNN)和梯度提升決策樹(GBDT)。它應(yīng)用了常見的推薦方法,例如基于內(nèi)容的過濾 (CBF)、協(xié)同過濾 (CF) 和更高級(jí)的矩陣分解 (MF)。
TikTok用來讀你心思的秘密武器是:
1.算法實(shí)驗(yàn)平臺(tái):工程師對(duì)LR和DNN等多種機(jī)器學(xué)習(xí)算法的混合進(jìn)行實(shí)驗(yàn),然后運(yùn)行測試(A / B測試)并進(jìn)行調(diào)整。
2.廣泛的分類和標(biāo)簽:這些模型基于用戶的參與度,例如觀看時(shí)間,滑動(dòng)以及常用的喜歡或分享(你潛意識(shí)反映所做的事比你所說的更能說明你)。用戶特征、向量和類別的數(shù)量超過了世界上大多數(shù)推薦系統(tǒng),而且它們還在不斷增加。
3. 用戶反饋引擎:在多次迭代中檢索用戶反饋后,更新模型。體驗(yàn)管理平臺(tái)基于此引擎構(gòu)建,最終改進(jìn)了條件和建議。
為了解決建議中的冷啟動(dòng)問題,使用了召回策略。它是從數(shù)千萬個(gè)已被證明受歡迎且高質(zhì)量的視頻中選擇數(shù)千名候選人。
與此同時(shí),一些人工智能工作已經(jīng)轉(zhuǎn)移到客戶端,以實(shí)現(xiàn)超快速的響應(yīng)。這包括在設(shè)備上完成的實(shí)時(shí)訓(xùn)練、建模和推理。TensorFlow Lite或ByteNN等機(jī)器學(xué)習(xí)框架用于客戶端。
微服務(wù)架構(gòu)
TikTok已經(jīng)運(yùn)用了云原生基礎(chǔ)設(shè)施。推薦組件(如用戶分析、預(yù)測、冷啟動(dòng)、召回和用戶反饋引擎)用作 API。這些服務(wù)托管在Amazon AWS和Microsoft Azure等云中。作為系統(tǒng)的結(jié)果,視頻策展將通過云推送給用戶。
TikTok采用基于Kubernetes的容器化技術(shù)。Kubernetes 被稱為容器編排器。它是自動(dòng)化應(yīng)用程序生命周期的工具集。Kubeflow致力于在Kubernetes上部署機(jī)器學(xué)習(xí)工作流。
作為云原生堆棧的一部分,Service mesh 是另一個(gè)處理服務(wù)到服務(wù)通信的工具。它控制應(yīng)用程序的不同部分如何相互共享數(shù)據(jù)。它在平臺(tái)層插入功能或服務(wù),而不是在應(yīng)用程序?qū)硬迦搿?/p>
由于高并發(fā)性的要求,服務(wù)是使用 Go 語言和 gRPC 構(gòu)建的。在TikTok中,Go因其良好的內(nèi)置網(wǎng)絡(luò)和并發(fā)支持而成為服務(wù)開發(fā)中的主導(dǎo)語言。gRPC 是一個(gè)遠(yuǎn)程過程控制框架,用于有效地構(gòu)建和連接服務(wù)。
Tiktok的成功在于,它將加倍努力提供最佳的用戶體驗(yàn)。他們構(gòu)建內(nèi)部工具,以最大限度地提高低級(jí)別(系統(tǒng)級(jí)別)的性能。例如,ByteMesh是Service Mesh的改進(jìn)版本,KiteX是高性能的Golang gRPC框架,Sonic是增強(qiáng)的Golang JSON庫。其他內(nèi)部工具或系統(tǒng)包括參數(shù)服務(wù)器、ByteNN 和 abase等。
正如TikTok機(jī)器學(xué)習(xí)負(fù)責(zé)人Xiang Liang所說,有時(shí)下面的基礎(chǔ)設(shè)施比上面的(機(jī)器學(xué)習(xí))算法更重要。
譯者介紹
朱鋼,51CTO社區(qū)編輯,2021年IT影響力專家博主,阿里云專家博主,2019年CSDN博客之星20強(qiáng),2020年騰訊云+社區(qū)優(yōu)秀作者,11年一線開發(fā)經(jīng)驗(yàn),曾參與獵頭服務(wù)網(wǎng)站架構(gòu)設(shè)計(jì),企業(yè)智能客服以及大型電子政務(wù)系統(tǒng)開發(fā),主導(dǎo)某大型央企內(nèi)部防泄密和電子文檔安全監(jiān)控系統(tǒng)的建設(shè),目前在北京圖伽健康從事醫(yī)療軟件研發(fā)工作。
原文標(biāo)題:??How the AI Behind TikTok Works??,作者:Vivien H.