《2019年人工智能和大數據系統在電子競技數據處理平臺中的應用.pdf》由會員分享,可在線閱讀,更多相關《2019年人工智能和大數據系統在電子競技數據處理平臺中的應用.pdf(39頁珍藏版)》請在三個皮匠報告上搜索。
1、Agenda不再是小孩子的游戲-電子競技的發展和IT技術的助力電子競技和傳統競技體育的區別Distributed System for Esports-分布式數據處理Big Data for Esports-海量數據存儲AI for Esports-基于OCR與機器學習的數據識別和挖掘電競發展支撐數據與案例(參考)2015年:移動電競用戶(中國)1.96億2016年9月:LOL全球月活1億2016年LPL全年觀賽累計人次50億騰訊電競:2017年全球電競用戶3.35億2018年5月7日電競項目入選亞運會不再是小孩子的游戲電子競技的發展和IT技術的助力不再是小孩子的游戲電子競技的發展和IT技術的
2、助力2008 2016電競2.0直播平臺RTS-MOBA/FPS,職業化2017 現在電競3.0觀賞性專業性、數據驅動1998 2007電競1.0蠻荒對戰平臺,賽事,俱樂部不再是小孩子的游戲電子競技的發展和IT技術的助力賽前分析賽中局勢賽后總結選手能力篩選玩家狀態分析比賽復盤不再是小孩子的游戲電子競技的發展和IT技術的助力靈活相對于傳統體育,電子競技的數據可以有更快、更方便的獲取方式,減少了人工,能支持更多自動化。豐富電子競技是依托于游戲的,而游戲內的發生的各種事件,都是可以被詳細記錄,時間維度可以精確到秒。數據體量電競數據的量級與競技體育相比也不可同日而語。電子競技和傳統競技體育的區別電子競
3、技和傳統競技體育的區別電競數據的采集方式開發接口開發接口1.Steam 官方提供DOTA22.藍洞官方PUBG接口開發接口廠商對接1.游戲廠商自己選擇和第三方數據商做合作2.上報數據,第三方消費處理并提供公開接口OCR識別1.錄像/直播畫面的截取2.數據與事件識別逆向工程1.基于客戶端請求協議2.基于本地的元數據文件3.基于客戶端代碼電子競技和傳統競技體育的區別電競數據的量級每局游戲的數據都可以記錄與分析與傳統競技體育不同,游戲數據是通過游戲服務器產生的,天生存在數據收集的優勢,每局游戲的數據都可以被存儲、分析,當打游戲的人越來越多時,產生的數據量級是相當可觀的,在我們的實踐中,Dota2 每
4、天有接近100萬場左右,而自走棋每天也有接近50萬場左右的數據單局游戲數據的豐富性游戲中的每個細節都會被記錄,比如選手在游戲中的走位、操作、技能釋放等,我們可以解析出關心的各種數據點,來分析各個維度下選手及整個團隊的表現數據處理的量級和一般的數據處理的場景相比,電競游戲數據中的處理會需要處理多維數據,比如玩家維度、團隊維度、英雄維度、道具維度、陣容維度等,每個維度下需要統計傷害、團戰、走位、出裝、以及游戲策略等Distributed System for Esports 分布式數據處理01Big Data for Esports海量數據存儲02AI for Esports基于OCR與機器學習的
5、數據識別和挖掘03FunData大數據系統ETL層接口層(緩存層)數據處理層存儲層通用FunData大數據系統架構FunData大數據系統:ETL層FunData ETL范式FunData ETL(DOTA2)FunData大數據系統:ETL層全球鏈路高可用灰度基于Kubernetes的彈性API系統架構FunData大數據系統:接口層(緩存層)基于Serverless框架的數據處理和計算鏡像預熱:根據訪問量和節點負載擴容鏡像淘汰:LRU以及鏡像功能被刪除時資源隔離:基于Docker以及Docker所使用的cgroup節點調度:準實時負載以及再調度動態路由:動態生成RESTful APIFun
6、Data大數據系統:數據處理層新舊數據處理架構對比提高資源利用率:在線業務的訪問低谷期間的資源利用,臨時性資源的申請資源的虛擬化:使用者不必關心系統中的資源數量,只需要專注于功能邏輯的實現提供大量耗時的計算能力FunData大數據系統:數據處理層基于Serverless框架的數據處理和提取游戲數據量隨時間存在突刺,熱門時間(大賽/節假日)比賽數量激增,原來基于VM的方式處理數據會導致大量數據處理任務堆積,系統壓力飆升,部分處理任務超時,不得不人工接入進行擴容。改為Serverless架構,收到新的數據后,由Serverless調度器隨機分配一個Worker啟動對應的算法容器進行數據處理與提取H
7、adoop(數據批處理)vs Flink(數據流處理)時間成本數據維度數據及時性舉例:DOTA2單局比賽個人數據處理FunData大數據系統:數據處理層AI for Esports基于OCR與機器學習的數據識別和挖掘03Big Data for Esports海量數據存儲02Distributed System for Esports 分布式數據處理01FunData 海量數據存儲原始數據 vs 熱數據 vs 冷數據的不同存儲方案分析數據通過大數據處理之后得到的數據,也是用戶需要及時能訪問到的,一般也會使Bigtable/HBase 來存儲過期數據的處理游戲數據在經歷一段時間之后,老的數據基本
8、不會再被訪問,根據實際的業務需求,可以考慮將數據遷移到成本更低的存儲,比如將數據從基于SSD 的 Bigtable/HBase 遷移到機械硬盤的機器上,或者是直接只維護一定時間內的數據,過期的則直接刪除FunData數據場景-原始數據過濾與分層原始數據,跑批對賬基礎數據,量級小,訪問頻繁單局詳情數據,量級大,訪問低頻實際的數據量級PUBG 數據量:1T+Dota2 數據量:10T+DAC 自走棋數據量:10T+MySQL vs HBase vs BigTable vs Firestore vs MongoDB容量(最大能支持的容量)性能(讀、寫)擴容(是否能擴展、擴展操作是否簡單)價格必有一款
9、適合你舉例:Dota2 GCP 上直接 使用 PubSub,使用方便(各種SDK,且與GCP上服務集成的很好),前面提到的幾點也能滿足隊列的選型容量吞吐量價格穩定性FunData 海量數據存儲:消息隊列GoogleGCP 上使用 Apache Beam,對各種計算框架進行了封裝,抽象了計算過程,與 GCP 上DataFlow集成得很好,也能跑在 Flink/Spark 等計算框架上阿里云阿里云上使用 Apache Flink,Flink 屬于比較新穎的流式處理框架,能滿足以上提的需求,不使用 Apache Beam 的主要原因 阿里云 EMR 集群里的 Hadoop 組件較老,需要做兼容的地方
10、太多,太麻煩FunData 海量數據存儲:流處理框架流處理框架的選型使用方便滿足業務需要能跟上流處理的趨勢https:/ for Esports基于OCR與機器學習的數據識別和挖掘03Big Data for Esports海量數據存儲02Distributed System for Esports 分布式數據處理01基于OCR的電競數據挖掘DOTA2與LOL的直播圖像識別訓練數據半自動打標使用 K-means 將相似的樣本聚類到一個組,再由人工檢查、修復,批量打標,可以快速獲得準確性很高的樣本集基于OCR的電競數據挖掘:訓練數據的生成基于OCR的電競數據挖掘:訓練數據的預處理從直播畫面中獲取
11、的,同一個裝備的多個樣本,相似度太高,很容易導致訓練時過擬合在訓練前的預處理階段,對原樣本進行裁剪、斜切、轉換等圖片預處理,生成大量保留特征的差異化樣本,可以顯著地提升迭代次數和防止過擬合原樣本預處理樣本1預處理樣本2基于OCR的電競數據挖掘:截屏圖像反走樣Q:截取的圖片識別不出數據,肉眼看不出的走樣?A1:常用的是采用SSAAA2:我們采用的是MSAA基于機器學習的勝率預測舉例:基于機器學習的DOTA2勝率預測問題背景:基于雙方英雄選擇的結果預測,主要目的是基于雙方的英雄選擇,給出一個合理的雙方陣容勝率對比。預測模型的效果主要取決與兩方面:特征的選擇和處理以及模型的選擇。模型選擇還應考慮版本
12、變化對預測效果帶來的影響。深度學習的特點優點高效率處理大批量數據時速度快,不需要人工地去干涉,不依賴傳統分析手法中的feature design普適性做出深度學習的model很容易移動到另一個項目上缺點可塑性model有很多現成的building block不能直接學習知識,難以理解“黑盒問題”訓練成本需要非常多的訓練數據基于機器學習的勝率預測:特征提取特征提取基于機器學習的勝率預測:英雄ID的特征處理One-hot-encodingEmbedding獨熱編碼與Embedding層One-hot的基本思想:將離散型特征的每一種取值都看成一種狀態,若你的這一特征中有N個不相同的取值,那么我們就可
13、以將該特征抽象成N種不同的狀態,One-hot編碼保證了每一個取值只會使得一種狀態處于“激活態”,也就是說這N種狀態中只有一個狀態位值為1,其他狀態位都是0。嵌入層是將英雄轉化為一個一定維度的向量來表示,并且嵌入層內的數據可以隨著模型調整的。在我們的項目里,我們將每個英雄轉化為一隨機的125維的向量,并且該向量會隨著模型的訓練不斷的學習更新。作為一個玩家,我們平時是怎么判斷陣容的優勢?基于機器學習的勝率預測:加速訓練英雄之間的相性=比如:艾歐(精靈)與矮人直升機(飛機)英雄之間的克性比如:斧王克制黛澤、冰魂克制哈斯卡基于機器學習的勝率預測:英雄克制關系及匹配度英雄克制關系與匹配度匹配度comb
14、o=combo_rateh1h2-(k*(win_rateh1+win_rateh2)-b)克制關系against=k*(win_rateh1-win_rateh2)+b模型選擇基于機器學習的勝率預測:模型選擇With Advantage Layer vs W/O Advantage Layer0.5800.5630.5450.5280.5101.02.03.04.05.0w/o Hero Rating Trainw/o Hero Rating TestEpochAccuracyw/Hero Rating Trainw/Hero Rating Test基于機器學習的勝率預測:訓練結果(英雄克制
15、)With LSTM0.6100.5900.5700.5600.5501.02.03.04.05.0w/o LSTM trainw/o LSTM testEpochAccuracyLSTM trainLSTM test0.5800.600基于機器學習的勝率預測:訓練結果(LSTM)Accuracy vs Training Data Time Range with LSTM0.6100.5930.5750.5580.5401.02.03.04.06.0w/o LSTM trainw/o LSTM testWeeks of DataAccuracyLSTM trainLSTM test5.0基于機
16、器學習的勝率預測:訓練結果(LSTM)initializer=keras.initializers.glorot_normal()hero_1_=Input(shape=(1,),dtype=int32,name=hero_1)hero_2_=Input(shape=(1,),dtype=int32,name=hero_2)hero_3_=Input(shape=(1,),dtype=int32,name=hero_3)hero_4_=Input(shape=(1,),dtype=int32,name=hero_4)hero_5_=Input(shape=(1,),dtype=int32,na
17、me=hero_5)hero_6_=Input(shape=(1,),dtype=int32,name=hero_6)hero_7_=Input(shape=(1,),dtype=int32,name=hero_7)hero_8_=Input(shape=(1,),dtype=int32,name=hero_8)hero_9_=Input(shape=(1,),dtype=int32,name=hero_9)hero_10_=Input(shape=(1,),dtype=int32,name=hero_10)emb=Embedding(input_dim=125,output_dim=16,i
18、nput_length=1)emb_h1=emb(hero_1_)emb_h2=emb(hero_2_)emb_h3=emb(hero_3_)emb_h4=emb(hero_4_)emb_h5=emb(hero_5_)emb_h6=emb(hero_6_)emb_h7=emb(hero_7_)emb_h8=emb(hero_8_)emb_h9=emb(hero_9_)emb_h10=emb(hero_10_)lstm_heroes=LSTM(16,input_shape=(1,16)emb_lstm_1=lstm_heroes(emb_h1)emb_lstm_2=lstm_heroes(emb
19、_h2)emb_lstm_3=lstm_heroes(emb_h3)emb_lstm_4=lstm_heroes(emb_h4)emb_lstm_5=lstm_heroes(emb_h5)emb_lstm_6=lstm_heroes(emb_h6)emb_lstm_7=lstm_heroes(emb_h7)emb_lstm_8=lstm_heroes(emb_h8)emb_lstm_9=lstm_heroes(emb_h9)emb_lstm_10=lstm_heroes(emb_h10)team_1=Add()(emb_lstm_1,emb_lstm_2,emb_lstm_3,emb_lstm
20、_4,emb_lstm_5)team_1_ffnn=Dense(32,activation=tanh,kernel_initializer=initializer)(team_1)team_2=Add()(emb_lstm_6,emb_lstm_7,emb_lstm_8,emb_lstm_9,emb_lstm_10)team_2_ffnn=Dense(32,activation=tanh,kernel_initializer=initializer)(team_2)merged=Add()(team_1_ffnn,team_2_ffnn)layer_1=Dense(16,activation=
21、tanh,kernel_initializer=initializer)(merged)output=Dense(1,activation=sigmoid)(layer_1)Model_T=Model(inputs=hero_1_,hero_2_,hero_3_,hero_4_,hero_5_,hero_6_,hero_7_,hero_8_,hero_9_,hero_10_,outputs=output)batch_size=64Model_T.compile(loss=binary_crossentropy,optimizer=adam,metrics=accuracy)Model_Hist
22、ory=Model_T.fit(Hero_1_Tr,Hero_2_Tr,Hero_3_Tr,Hero_4_Tr,Hero_5_Tr,Hero_6_Tr,Hero_7_Tr,Hero_8_Tr,Hero_9_Tr,Hero_10_Tr,Train_L,epochs=5,verbose=1,batch_size=Batch_Size,validation_data=(Hero_1_Ts,Hero_2_Ts,Hero_3_Ts,Hero_4_Ts,Hero_5_Ts,Hero_6_Ts,Hero_7_Ts,Hero_8_Ts,Hero_9_Ts,Hero_10_Ts,Test_L)基于機器學習的勝率預測:代碼示例Thank you!杭州威佩網絡科技有限公司