文淑華,曹議丹,王瑞錦,房翊翔,盧學(xué)能,楊 珊,易 黎,張 翔
(電子科技大學(xué) 信息與軟件工程學(xué)院,四川 成都 610054)
電子科技大學(xué)信息與軟件工程學(xué)院的綜合課程設(shè)計III針對高年級學(xué)生開設(shè),要求學(xué)生在學(xué)習相關(guān)課程后參與一個具有一定難度的小型軟件工程項目,利用軟件工程的思想完成整個項目周期的所有階段,并能對結(jié)果進行預(yù)測和模擬。為了培養(yǎng)學(xué)生綜合設(shè)計能力和創(chuàng)新能力,將“直播平臺彈幕信息智能分析與識別系統(tǒng)”設(shè)計作為綜合課程設(shè)計III的課題,旨在培養(yǎng)學(xué)生使用軟件的工程思想。采用爬蟲算法、機器學(xué)習、自然語言處理和 Web應(yīng)用編程技術(shù),培養(yǎng)學(xué)生綜合設(shè)計和實現(xiàn)一個完整系統(tǒng)的能力,為學(xué)生的課題執(zhí)行提供指導(dǎo)。
直播平臺要想獲得長足發(fā)展,需不斷升級專業(yè)內(nèi)容制作能力,提高用戶體驗感,其中在彈幕不良信息識別中大有可為。直播平臺彈幕信息智能分析與識別系統(tǒng)面向直播平臺,直播平臺的管理人員可通過該系統(tǒng)獲得各大著名直播平臺的彈幕數(shù)據(jù),反饋這些彈幕信息中的不良信息(廣告、虛假信息、情色信息等)及彈幕發(fā)出者名單,幫助直播平臺改善直播體驗。
基于當今熱門的機器學(xué)習、LDA模型[1-3]等自然語言處理技術(shù)、基于Taf RPC協(xié)議與Websocket協(xié)議的爬蟲算法[4-5],并使用負載均衡策略的 B/S網(wǎng)絡(luò)架構(gòu)、基于 Web設(shè)計與實現(xiàn)直播彈幕不良信息識別系統(tǒng),全面培養(yǎng)學(xué)生根據(jù)軟件系統(tǒng)的應(yīng)用場景,選擇合適的開發(fā)環(huán)境、工具與技術(shù)標準進行軟件系統(tǒng)的設(shè)計和開發(fā),培養(yǎng)學(xué)生解決復(fù)雜軟件工程問題的能力和創(chuàng)新意識,符合綜合課程設(shè)計III的要求。
用戶登錄直播平臺彈幕信息智能分析系統(tǒng)后可以選擇對某個平臺的房間進行一定時間的彈幕的爬取及分析,通過在網(wǎng)頁中輸入房間號及彈幕來源(斗魚或虎牙)進行彈幕數(shù)據(jù)及分析。用戶提交輸入后,前端獲取數(shù)據(jù)值,根據(jù)選擇的彈幕來源將值通過ajax傳遞給后端,后端調(diào)用爬蟲算法對房間進行爬蟲后調(diào)用信息識別算法,前端將結(jié)果進行處理后進行呈現(xiàn),用戶可以在網(wǎng)頁上看到對應(yīng)房間里爬取的實時彈幕數(shù)據(jù),以及這些數(shù)據(jù)里的不良信息和不良信息對應(yīng)分類、經(jīng)常發(fā)送不良信息的 ID統(tǒng)計。另外,用戶還可以看到自己選擇爬蟲的歷史信息。系統(tǒng)的功能架構(gòu)見圖1。

圖1 直播平臺彈幕信息智能分析系統(tǒng)架構(gòu)框圖
直播平臺彈幕信息智能分析系統(tǒng)中主要功能模塊為直播彈幕爬蟲模塊、信息識別模塊等,主要技術(shù)為爬蟲算法、機器學(xué)習算法、自然語言處理算法技術(shù)。
直播平臺的彈幕數(shù)據(jù)是實時的,不像傳統(tǒng)的視頻網(wǎng)站(如B站)是將彈幕存在一個XML文件里面發(fā)送給客戶端,所以需要與彈幕服務(wù)器連接。使用Python Socket的連接方法,并且由于彈幕協(xié)議是建立在TCP長連接服務(wù)上的,為了管理這些長連接,保證及時銷毀無用的連接以及釋放資源服務(wù)于有需要的用戶,直播平臺后臺需要與客戶端保持心跳,每隔一段時間客戶端需要向服務(wù)端發(fā)送一條心跳信息以保證其對應(yīng)連接的后續(xù)可用性。心跳信息就是在客戶端或服務(wù)器間定時向通信的另一方發(fā)送自己當前狀態(tài)的一個自己定義的命令,以某個時間間隔發(fā)送,類似于心跳。
3.1.1 Wireshark結(jié)合虎牙前端源碼爬蟲的設(shè)計。
由于虎牙沒有提供API,對于虎牙的爬蟲可以先獲取直播狀態(tài),然后獲取彈幕服務(wù)器地址與房間信息,之后開啟Socket連接并認證,最后持續(xù)發(fā)送心跳包和接受彈幕信息。
(1)尋找WebSocket地址。使用Chrome瀏覽器查看網(wǎng)頁WebSocket連接,并通過二進制幀流初步猜測4條彈幕服務(wù)器地址,虎牙前端會選擇其中一條。因為是二進制幀,消息很有可能經(jīng)過加密或者編碼,然而彈幕并沒有加密的必要,而且計算速度較快的對稱加密技術(shù)也會增加服務(wù)器負擔和復(fù)雜度。于是猜測為某種RPC編碼協(xié)議,遂直接使用Websocket抓包查看幀結(jié)構(gòu)和數(shù)據(jù)。通過抓包分析結(jié)構(gòu),發(fā)現(xiàn)有意義的ASCII字符,說明這不是加密,而是某一種通信結(jié)構(gòu)體的編碼。
(2)分析源碼進行解析。通過開發(fā)者工具的Performance工具開始記錄前端事件并查看日志。得到數(shù)個關(guān)鍵函數(shù)調(diào)用的堆棧,通過不斷調(diào)試初步得出函數(shù)調(diào)用流程和彈幕獲取,以及解碼的流程,然后使用TAF對消息體進行解析。
3.1.2 斗魚爬蟲模塊設(shè)計
斗魚提供 API,可以根據(jù)其應(yīng)用層協(xié)議,構(gòu)造請求報文和數(shù)據(jù),進行登錄和連接,也可以根據(jù)其文檔協(xié)議解析響應(yīng)報文,較為方便。斗魚后臺協(xié)議頭見圖2。

圖2 斗魚后臺協(xié)議頭
3.2.1 彈幕信息數(shù)據(jù)處理
彈幕信息是中文文本。對文本進行有效識別,需要使用自然語言處理[6-7]中一些方法對文本數(shù)據(jù)進行相關(guān)處理,從中提取出有效信息,進行模型訓(xùn)練。
目前的分類算法要求特征都是相對獨立的,因此為了切斷上下文耦合,降低詞序的影響,實現(xiàn)特征的相對獨立性,對獲取的文本信息進行分詞。但是,從直播平臺獲取的數(shù)據(jù)信息中存在許多表情符號,會影響分詞的效果,在分詞前先進行分詞的粗處理。在結(jié)束分詞后,為保證特征提取有效性,對分詞后數(shù)據(jù)做去停用詞處理。
3.2.2 基于 SVM 和樸素貝葉斯算法的不良信息和良性信息分類算法設(shè)計
對于良性信息和不良信息分類時,首先嘗試直接對數(shù)據(jù)進行無監(jiān)督二分類后,發(fā)現(xiàn)效果并不明顯。為了進行不良信息識別、保證識別的準確,采用對獲取的彈幕信息進行監(jiān)督學(xué)習二分類,對于二分類得到的不良信息再使用分類方法進行分類。二分類常用算法有l(wèi)ogistics回歸、SVM[8-9]、樸素貝葉斯[10-11]。logistics回歸算法更依賴于特征的提取,需要特征量大。SVM可以解決小樣本下機器學(xué)習的問題、模型的泛化性能高。樸素貝葉斯算法常用于文本的二分類算法,在監(jiān)督式學(xué)習的樣本集中能獲得非常好的分類效果。綜合考慮,采用 SVM 和樸素貝葉斯進行分類,在比較兩種算法的精確度后選擇精確度高的算法。
3.2.3 基于 LDA模型和 LSI模型的不良信息多分類算法設(shè)計
本課題目標是實現(xiàn)不良信息包括廣告、虛假信息以及情色信息識別,是對文本的多分類。LDA模型是一種無監(jiān)督的貝葉斯模型,是一種主題模型,它可以將文檔集中每篇文檔的主題按照概率分布的形式給出。由于 LDA是一種無監(jiān)督學(xué)習算法,在訓(xùn)練時不需要手工標注的訓(xùn)練集,需要的僅僅是文檔集以及指定主題的數(shù)量即可,是一種典型的詞袋模型。LSI模型[12]是一種簡單實用的主題模型,基于奇異值分解(SVD)的方法來得到文本的主題。LSI的基本思想是文本中的詞與詞之間存在著某種語義關(guān)系,通過對樣本數(shù)據(jù)的統(tǒng)計分析,讓計算機發(fā)掘出這些潛在的語義關(guān)系,并把這些語義關(guān)系表示成計算機可用的模型。LSI可以消除詞匹配過程中的同義和多義現(xiàn)象,可以將傳統(tǒng)的 VSM 壓縮到一個低維的語義空間中,在該語義空間中計算文檔的相似度等。換句話說,LSI模型利用詞語間潛在的語義關(guān)系實現(xiàn)對 VSM 模型的降維,進而達到提高分類效果的目的。
通過WireShark來抓哪一個是申請包。通過彈幕流推送,開始網(wǎng)上找本機的發(fā)包,找到一條可疑的包,如圖3所示。

圖3 Wireshark抓包結(jié)果
根據(jù) Wireshark抓包結(jié)果分析虎牙彈幕源碼,發(fā)現(xiàn)sRegisterGroupReq結(jié)構(gòu)體就是彈幕數(shù)據(jù)信息所在,把該結(jié)構(gòu)體解析后重新封裝一下,關(guān)鍵代碼是:wsRegisterGroupReq.vGroupId這個數(shù)組里面的值,往里面添加"chat:" + presenterUid一個字符串即可。關(guān)鍵代碼如下:

斗魚平臺由官方提供給第三方、使用Socket而非WebSocket的彈幕平臺和協(xié)議,這樣不必要抓包以及分析,直接參照文檔構(gòu)建。發(fā)送指定的申請包和心跳包,即可收到彈幕,圖4為斗魚爬蟲流程圖。

圖4 斗魚爬蟲流程圖
使用訓(xùn)練數(shù)據(jù)進行 SVM模型訓(xùn)練,核函數(shù)選擇linear,對訓(xùn)練完的模型進行如下精確度計算:


LSI模型在訓(xùn)練前需要計算tf-idf。tf-idf是一種統(tǒng)計方法,用以評估一字/詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字/詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。根據(jù) tf-idf數(shù)據(jù)訓(xùn)練LSI模型如下:

實驗仿真和實際測試表明,本系統(tǒng)能成功實現(xiàn)賬號的注冊、登錄,并實現(xiàn)直播平臺彈幕信息智能分析與識別,通過依據(jù)彈幕流設(shè)計的爬蟲算法對各大著名直播平臺直播彈幕信息進行實時監(jiān)測,基于 SVM 模型以及 LDA模型等自然語言處理技術(shù)實現(xiàn)彈幕的全方面不良信息識別。圖5為管理員登錄該系統(tǒng)后對虎牙平臺主播 UZI直播房間彈幕爬蟲的結(jié)果,分別展示了彈幕信息,及爬取的不良信息。

圖5 直播平臺彈幕信息智能分析結(jié)果展示
該綜合設(shè)計課題能培養(yǎng)學(xué)生使用爬蟲技術(shù)、機器學(xué)習、自然語言處理等技術(shù)綜合設(shè)計與實現(xiàn)系統(tǒng)的能力,符合綜合課程設(shè)計III的畢業(yè)要求。