陳珉 彭鸞 李釗
摘要:近年來,自媒體發(fā)展速度非常迅猛,傳統(tǒng)媒體積極擁抱新媒體,加速媒體深度融合步伐。媒體生產(chǎn)數(shù)據(jù)、互聯(lián)網(wǎng)發(fā)布的數(shù)據(jù),每天有海量的數(shù)據(jù)需要分析處理,用于熱點(diǎn)新聞發(fā)現(xiàn)、新聞選題評(píng)價(jià)、傳播效果分析等應(yīng)用場景。傳統(tǒng)的數(shù)據(jù)分析框架已經(jīng)不能滿足用戶實(shí)時(shí)數(shù)據(jù)分析和查詢的需求。本文提出一種能夠適應(yīng)用戶連續(xù)處理分析海量文本數(shù)據(jù)的框架,具有低延時(shí)、可擴(kuò)展的特點(diǎn)。
關(guān)鍵詞:自然語言處理;流式計(jì)算;傳統(tǒng)媒體
一、背景
當(dāng)前,大數(shù)據(jù)產(chǎn)業(yè)深刻改變著人類的生產(chǎn)和生活。地方媒體詳細(xì)記錄了地區(qū)發(fā)展變遷的歷程,存有大量的文字、圖片、視頻等歷史資料。同時(shí),在互聯(lián)網(wǎng)上每天有海量的新聞產(chǎn)品發(fā)布。將這些沉睡的、分散的數(shù)據(jù)有效匯聚、管理、挖掘、應(yīng)用。在支撐媒體產(chǎn)品生產(chǎn)同時(shí),服務(wù)于媒體自身的精準(zhǔn)營銷,還可以高效便捷的為政府機(jī)構(gòu)、社會(huì)企業(yè)與民眾提供資料網(wǎng)絡(luò)查詢、城市資訊綜合服務(wù)等。逐步實(shí)現(xiàn)傳統(tǒng)媒體和新媒體的融合發(fā)展,變“內(nèi)容為王”為“信息服務(wù)為王”。
二、面向自然語言處理的流式計(jì)算框架設(shè)計(jì)
本文選用JStorm框架為流式計(jì)算平臺(tái)的基礎(chǔ),完整的面向自然語言處理的流式計(jì)算框架,包含數(shù)據(jù)源模塊、預(yù)處理模塊、實(shí)時(shí)計(jì)算模塊、存儲(chǔ)模塊以及反壓機(jī)制。
(1)數(shù)據(jù)源模塊
數(shù)據(jù)源模塊的作用是將數(shù)據(jù)不斷的送入JStorm中。本框架中采用的方法是接收用戶提交TXT、WORD、PDF、XML格式的文件,通過不同格式的文件解析器,解析文件中的內(nèi)容信息。之后,將大文本拆分為多個(gè)小文本以及進(jìn)行數(shù)據(jù)格式封裝。數(shù)據(jù)封裝是為了加入文本標(biāo)簽、文本歸屬、唯一標(biāo)識(shí)、調(diào)用的算法等信息,完成封裝后,進(jìn)入Redis緩存。
(2)預(yù)處理模塊
預(yù)處理模塊的作用是對(duì)需要處理的文本進(jìn)行預(yù)處理。預(yù)處理模塊在JStorm中是一個(gè)Bolt組件,包含了中文分詞、信息抽取等基礎(chǔ)算法。對(duì)待分析文本調(diào)用哪些基礎(chǔ)算法,根據(jù)數(shù)據(jù)源模塊中的封裝定義的。
(3)實(shí)時(shí)計(jì)算模塊
文本數(shù)據(jù)流通過實(shí)時(shí)計(jì)算模塊分別流入不同的具有高并行度的任務(wù)中,任務(wù)中運(yùn)行的是不同的算法,使用分布式鎖來保證數(shù)據(jù)的最終一致性。對(duì)任務(wù)的管理使用動(dòng)態(tài)平衡算法對(duì)任務(wù)分配規(guī)則加載,而不會(huì)影響正常的處理過程。這樣的機(jī)制具有很高的動(dòng)態(tài)穩(wěn)定性,無論是動(dòng)態(tài)增加計(jì)算能力,還是動(dòng)態(tài)管理算法配置,都不會(huì)影響正常的服務(wù)。開發(fā)人員需要實(shí)現(xiàn)框架針對(duì)應(yīng)用開發(fā)人員提供的API,對(duì)數(shù)據(jù)對(duì)象、計(jì)算邏輯進(jìn)行內(nèi)部封,也可以完成詞庫和算法模型的調(diào)用。
針對(duì)自然語言處理的使用場景,對(duì)JStorm的實(shí)時(shí)計(jì)算框架進(jìn)行了一些優(yōu)化處理。實(shí)時(shí)任務(wù)查詢功能,根據(jù)數(shù)據(jù)源模塊中封裝的唯一任務(wù)標(biāo)識(shí)進(jìn)行任務(wù)進(jìn)度查詢。圖形化任務(wù)發(fā)布功能,是在網(wǎng)頁上可以將算法任務(wù)發(fā)布成處理的任務(wù)。任務(wù)分配模塊,主要是優(yōu)化算法調(diào)用的順序,通過Redis通知來實(shí)現(xiàn)?;瑒?dòng)窗口管理,通過定時(shí)輸出采樣數(shù)據(jù),使用TOPN算法,輸出滑動(dòng)窗口內(nèi),系統(tǒng)的數(shù)據(jù)統(tǒng)計(jì)特征。
(4)存儲(chǔ)模塊
存儲(chǔ)模塊是將分析處理后的結(jié)果落地,用于可視化的展示使用。存儲(chǔ)模塊分兩類,一類NoSQL數(shù)據(jù)庫,一類是網(wǎng)絡(luò)文件系統(tǒng)NFS。在實(shí)時(shí)計(jì)算平臺(tái)最后一個(gè)Bolt節(jié)點(diǎn),使用Redis數(shù)據(jù)庫將計(jì)算結(jié)果緩存下來,并發(fā)送消息通知給可視化展示模塊??梢暬故灸K,在收到通知后,將最終的結(jié)果用JSON格式存儲(chǔ)在文件系統(tǒng)中。對(duì)于中間過程,可視化模塊通過展示Redis緩存數(shù)據(jù),可顯示中間過程。使用Redis作為緩存,保證了在計(jì)算節(jié)點(diǎn)宕機(jī)的情況,數(shù)據(jù)的恢復(fù)能力。
(5)反壓機(jī)制
由于Spout數(shù)據(jù)源的處理能力不均及承載算法Bolt節(jié)點(diǎn)的任務(wù)處理時(shí)長的差異性,導(dǎo)致Tuple數(shù)據(jù)流有時(shí)存在超時(shí)現(xiàn)象,影響系統(tǒng)整體的吞吐量及其性能。本系統(tǒng)是在Spout節(jié)點(diǎn)中使用基于隊(duì)列的數(shù)據(jù)流反壓機(jī)制來優(yōu)化上述問題。在Spout節(jié)點(diǎn)中訂閱Redis通知,在收到Redis推送的通知后,將消息ID和消息內(nèi)容壓入消息隊(duì)列,消息隊(duì)列使用LinkedTransferQueue和ConcurrentHashMap實(shí)現(xiàn)數(shù)據(jù)對(duì)象的臨時(shí)緩存。不斷調(diào)用的nextTuple函數(shù)會(huì)從消息隊(duì)列中拉取消息,并發(fā)射數(shù)據(jù)到Bolt算法節(jié)點(diǎn)中。
三、物理部署
流式計(jì)算系統(tǒng)部署主要分為五大塊,實(shí)時(shí)計(jì)算集群、離線計(jì)算集群、網(wǎng)絡(luò)應(yīng)用服務(wù)器、數(shù)據(jù)庫集群以及性能監(jiān)控預(yù)警;實(shí)時(shí)計(jì)算集群主要提供實(shí)時(shí)計(jì)算平臺(tái)用于實(shí)時(shí)數(shù)據(jù)分析服務(wù);離線計(jì)算集群提供的是離線計(jì)算平臺(tái),主要用于語料處理、詞庫訓(xùn)練以及語料存儲(chǔ)等功能;網(wǎng)絡(luò)應(yīng)用服務(wù)器用于向外提供基于Web的顯示服務(wù),數(shù)據(jù)庫集群部署關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù)庫,分別用于存儲(chǔ)業(yè)務(wù)數(shù)據(jù)和詞庫數(shù)據(jù)。各個(gè)分隔的模塊之間用消息服務(wù)連接。整個(gè)平臺(tái)使用性能監(jiān)控預(yù)警服務(wù)對(duì)平臺(tái)的運(yùn)行情況進(jìn)行全面的監(jiān)控管理。
四、結(jié)語
面向自然語言處理的流式計(jì)算系統(tǒng)符合目前主流的云平臺(tái)結(jié)構(gòu)設(shè)計(jì),確保實(shí)用性、開放性系統(tǒng)易維護(hù)的原則。系統(tǒng)以B/S結(jié)構(gòu)為主,系統(tǒng)提供的自然語言處理計(jì)算服務(wù),滿足傳統(tǒng)媒體對(duì)于熱點(diǎn)新聞發(fā)現(xiàn)、新聞選題評(píng)價(jià)、傳播效果分析等場景下的業(yè)務(wù)需求。
參考文獻(xiàn):
[1]蔣晨晨,季一木,孫雁飛,王汝傳.基于Storm的面向大數(shù)據(jù)實(shí)時(shí)流查詢系統(tǒng)設(shè)計(jì)研究.南京郵電大學(xué)學(xué)報(bào)2016.6
[2]李昊鵬.流式計(jì)算的研究與應(yīng)用.理論探索.2017.10
[3]熊安萍,朱恒偉,羅宇豪.Storm流式計(jì)算框架反壓機(jī)制研究.計(jì)算機(jī)工程與應(yīng)用.2018.54(1)