汪貽杰 沙夢釩 趙 鵬 周建平
(1.安徽工業(yè)大學計算機科學與技術(shù)學院;2.中鋼集團馬鞍山礦山研究總院股份有限公司)
礦業(yè)類期刊文獻不僅凝練了重要的行業(yè)知識,更是礦山知識類網(wǎng)站的一個重要組成部分。在期刊文獻內(nèi),一篇論文包含很多專業(yè)信息,如論文的標題、摘要、關(guān)鍵詞、正文和作者等,如何根據(jù)這些專業(yè)信息實現(xiàn)高效快速的論文推薦是目前礦山知識類網(wǎng)站面臨的一個重要課題[1]。
對于文本推薦和數(shù)據(jù)倉庫技術(shù)在知識類相關(guān)領(lǐng)域的應(yīng)用,在行業(yè)內(nèi)有著廣泛關(guān)注與研究。在基于論文數(shù)據(jù)分析的專家推薦方法、裝置、設(shè)備及存儲介質(zhì)中,孫圣力等[2]提出了基于文本相似度、貢獻率及復(fù)合影響因子算出的各論文作者的推薦分數(shù)并進行推薦,但未考慮到在大規(guī)模論文數(shù)據(jù)下的專家推薦方法計算時間長且新的推薦存在的冷啟動問題。在基于Spark的電影推薦系統(tǒng)中,朱本瑞[3]實現(xiàn)了對電影數(shù)據(jù)的Spark離線推薦和Spark Streaming的實時推薦,并將結(jié)果存儲到Redis、Elasticsearch、MongoDB中,但未考慮將中間臨時計算結(jié)果保存到Hive中,以節(jié)省中間臨時計算時間。
通過深入系統(tǒng)的研究,提出了基于數(shù)據(jù)倉庫實現(xiàn)的離線計算論文推薦方法。首先由維度建模搭建一個數(shù)據(jù)倉庫,設(shè)立論文推薦主題庫;然后,將論文特征數(shù)據(jù)集分詞預(yù)處理后加載到HDFS中,在HDFS中使用Hive計算推薦結(jié)果,將結(jié)果保存在論文推薦主題庫中;最后,在前端礦山知識類網(wǎng)站中實現(xiàn)可視化展示。
在設(shè)計中,數(shù)據(jù)倉庫體系主要分成原始數(shù)據(jù)層、明細數(shù)據(jù)層、數(shù)據(jù)匯總層、應(yīng)用數(shù)據(jù)層4層。在分層體系中,原始數(shù)據(jù)層用于存儲預(yù)處理的數(shù)據(jù)集;明細數(shù)據(jù)層用于將原始數(shù)據(jù)層的結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換并清洗維度缺項,轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù);數(shù)據(jù)匯總層用于對明細數(shù)據(jù)層提取特征構(gòu)造維度-權(quán)重矩陣;應(yīng)用數(shù)據(jù)層用于聚合維度權(quán)重矩陣在主題表中,并用于指標統(tǒng)計、計算及數(shù)據(jù)挖掘等。該數(shù)據(jù)倉庫分層體系結(jié)構(gòu)的目的在于將數(shù)據(jù)量巨大的原始論文,通過數(shù)據(jù)倉庫分層架構(gòu)思想,將數(shù)據(jù)存儲在不同分層中,將結(jié)果數(shù)據(jù)與中間數(shù)據(jù)分開,減少跨層調(diào)用。同時,將計算過程中產(chǎn)生的中間臨時計算保存在數(shù)據(jù)倉庫中,極大地減少了重復(fù)計算。
數(shù)據(jù)倉庫模型設(shè)計是面向主題的,因此在設(shè)計數(shù)據(jù)倉庫維度模型前要先確定分析主題[4]。分析主題的選擇是根據(jù)業(yè)務(wù)的實際需求分析而定的,且根據(jù)主題相關(guān)的分析結(jié)果可為相關(guān)人員或用戶提供決策支持[5]。在此選擇其中的論文為主題進行分析介紹。一篇論文主要包含標題、摘要、關(guān)鍵詞、正文、作者等,本文主要圍繞論文特征維度對論文進行數(shù)據(jù)分析,設(shè)計構(gòu)建數(shù)據(jù)倉庫論文推薦主題庫。
維度表是描述分析主題的角度,選擇分析的維度要能從數(shù)據(jù)源中直接得到,且有利于對所選主題的分析。采用星型模型設(shè)計的維度表主要由事實表和維度表組成,每個維度表都有一個維度值作為主鍵,所有這些維度表的主鍵結(jié)合成事實表的主鍵。在維度表的建立過程中,維度值必須唯一,且每個維度代表對一個分析主題不同角度的描述[6]。根據(jù)分析主題、論文推薦主題庫的設(shè)計,這里建立了標題、摘要、關(guān)鍵詞3個維度。
這些維度表中的數(shù)據(jù)是由原始數(shù)據(jù)層和明細數(shù)據(jù)層加載到匯總數(shù)據(jù)層,并在DWS中存儲。在DWS層中,通過對加載數(shù)據(jù)中標題、摘要、關(guān)鍵詞等特征元素提取,并分別構(gòu)造維度-權(quán)重矩陣得到分析主題的3個維度。以標題-論文權(quán)重矩陣t_p為例,對于t_p矩陣的每個元素f pt表示標題標簽t在論文p中的權(quán)重,計算公式為
式中,N?pt為論文p中包含標題標簽t的個數(shù),N pt為論文p中的標題標簽數(shù);N為總的論文數(shù);而Nt是包含標題t的論文數(shù)量。
通過構(gòu)造出的標題維度-權(quán)重矩陣、關(guān)鍵詞維度-權(quán)重矩陣、摘要維度-權(quán)重矩陣,對論文主題進行3個不同角度的分析,對論文主題進行更精確的描述。
通過論文主題下的多個特征維度的聚合和匯總,完成對主題下的指標計算。這里計算的指標是論文推薦主題庫下論文數(shù)據(jù)之間的相似度,通過計算不同論文對象標簽間的相似度,并對不同文本部分的標簽進行加權(quán)后得到總的論文對象間的相似度。主題庫主題中所有論文數(shù)據(jù)對象都進行相似度計算,匯總得到相似度推薦指標。計算中,特征維度間的相似度采用的是余弦相似度,計算公式如式(2)。pi、p j表示不同的向量元素,p()i、p(j)表示向量pi、pj的分量。p()i、p(j)2個向量分量的點積除以pi、pj2個向量的模長,得到了pi、pj2個向量的余弦相似度sin(pi、pj),余弦相似度值越大,則表示2個向量的相似度越高。
期刊論文數(shù)據(jù)倉庫流程設(shè)計見圖1,步驟如下。
(1)數(shù)據(jù)預(yù)處理。從MySQL數(shù)據(jù)庫的數(shù)據(jù)源中獲取數(shù)據(jù)表中的數(shù)據(jù),對獲取的數(shù)據(jù)進行分詞預(yù)處理,將分完詞的數(shù)據(jù)發(fā)送到Kafka集群中的Paper主題中。
(2)數(shù)據(jù)存儲。使用Flume的Sink配置Kafka_File_HDFS的腳本配置文件,將Kafka的Paper主題中的數(shù)據(jù)采集到HDFS中存儲,存儲過程中按照采集的日期進行分區(qū)。
(3)數(shù)據(jù)處理和計算。對存儲在HDFS中的預(yù)處理論文特征數(shù)據(jù)采用ETL加載到數(shù)據(jù)倉庫的論文推薦主題庫中,按照數(shù)據(jù)倉庫論文推薦主題庫結(jié)構(gòu)設(shè)計進行分層處理,在ODS層存儲論文分詞特征數(shù)據(jù)集,將ODS層中按行拆分格式化并將關(guān)鍵詞為空的數(shù)據(jù)清洗過濾掉后,轉(zhuǎn)換成標題元素、摘要元素、關(guān)鍵詞元素3張?zhí)卣鲾?shù)據(jù)表存入DWD層,并在DWD層將元素轉(zhuǎn)換為(單詞,詞頻),為構(gòu)造維度表做準備。在數(shù)據(jù)服務(wù)層DWS中加載DWD表中特征數(shù)據(jù)表,構(gòu)造為3張維度表。在ADS應(yīng)用層將DWS層不同維度-權(quán)重矩陣表進行聚合,得到論文特征主題表。采用Spark對應(yīng)用層論文特征主題表中的數(shù)據(jù)計算相似度指標,并將指標結(jié)果存入論文推薦主題庫應(yīng)用層推薦表中。
(4)數(shù)據(jù)展示。將應(yīng)用層的推薦結(jié)果采用Spark讀取Hive寫入MySQL的方式把推薦結(jié)果寫入到MySQL數(shù)據(jù)庫中,在礦山知識服務(wù)平臺的前端網(wǎng)站采用Web API服務(wù)的形式調(diào)用數(shù)據(jù)庫中數(shù)據(jù)。當用戶在線搜索論文時,數(shù)據(jù)庫中相關(guān)推薦論文將會推薦給用戶。
對于推薦指標計算,傳統(tǒng)的基于文本的相似度計算方法一般都單一統(tǒng)計文本的關(guān)鍵詞,未考慮到關(guān)鍵特征文本權(quán)值的影響。而關(guān)鍵特征文本往往也是用戶最為看重的,在采用多維度特征融合的離線推薦計算中,使用加權(quán)的余弦相似度算法對關(guān)鍵特征維度賦予更高的權(quán)重。如算法偽碼所示,a表示標題元素維度特征相似度,b表示關(guān)鍵詞元素維度特征相似度,c表示摘要元素維度特征相似度,d表示論文所述的文獻類別特征相似度。將輸入的ob ject和pa per對象的特征相似度a、b、c的權(quán)重因子分別設(shè)置為0.3,0.55和0.15,d為權(quán)重修正因子,根據(jù)2個論文對象文獻類別維度的相似度計算,結(jié)果在0.01≤d≤0.1。由此計算出core為多特征維度融合加權(quán)下的論文相似度。在初步的過濾中,core值大于0.1且屬于前50的結(jié)果會被保留,再次過濾中,core值大于0.3或前15的結(jié)果會被保留并進行推薦。推薦結(jié)果入庫匯總保存在ADS層論文推薦表中。
算法為SVM加權(quán)余弦相似度算法,輸入從ADS層讀取表ads_paper,存入paper_list;輸出對paper_list進行廣播,聲明為bd_paper_list。
在試驗結(jié)果的評價方面,采用準確率、召回率和F1值進行分類評價,計算公式如下
式中,TP表示指標結(jié)果符合匹配的數(shù)據(jù)條數(shù);F P表示指標結(jié)果推薦中不符合匹配的數(shù)據(jù)條數(shù);FN表示指標結(jié)果中符合匹配未被推薦的數(shù)據(jù)條數(shù)[7];precision準確率表示分類器正確識別文本的一個統(tǒng)計測量;recall召回率指的是檢索出的相關(guān)文檔數(shù)和庫中所有相關(guān)文檔數(shù)的比率[8];F1值是衡量分類器分類準確性的標準,是準確率和召回率的加權(quán)平均,F(xiàn)1最大值為1,最小值為0。
該試驗使用了4臺虛擬服務(wù)器構(gòu)建集群節(jié)點,配置見表1。其中Hadoop001是Hadoop集群和Spark集群的主節(jié)點,Hadoop002-Hadoop004為spark的從屬節(jié)點,運行slave進程。Zookeeper集群運行在Hadoop002-Hadoop004 3個節(jié)點,Kafka集群運行在Hadoop001-Hadoop004節(jié)點,Hive、Flume運行在Hadoop001節(jié)點,這4臺主機都為Hadoop的數(shù)據(jù)節(jié)點。本次集群環(huán)境試驗中Hadoop的版本為3.1.4,Spark的版本為3.0.0,MySQL版本為5.1.3,Zookeeper版本為3.6.2,Kafka版本為2.11.0,F(xiàn)lume版本為1.7.0,Hive版本為3.0.0。
?
試驗采用了203867條論文數(shù)據(jù)作為數(shù)據(jù)集。
為驗證SVM加權(quán)余弦相似度算法的有效性,本文與未加權(quán)的余弦相似度方法進行對比。對試驗數(shù)據(jù)集分別采用2種算法計算相似度。由表2可知,加權(quán)后準確率提高了約6%,F(xiàn)1值提升了約3%,無論是準確率、召回率、F1值,改進后的算法指標都明顯優(yōu)于原始算法。再隨機選取5篇搜索論文,統(tǒng)計推薦論文在2種算法下的相似度值計算結(jié)果(圖2)。圖2結(jié)果顯示,采用維度融合加權(quán)后,推薦結(jié)果相似度有顯著提升,降低了非核心特征維度-摘要維度的權(quán)重影響,提升了關(guān)鍵特征維度-關(guān)鍵詞維度的權(quán)重影響,使推薦結(jié)果更突出核心關(guān)鍵詞的文本價值作用,推薦結(jié)果也更符合預(yù)期。
?
(1)隨著期刊融媒體發(fā)展和知識服務(wù)需求的不斷提高,為用戶提供論文推薦服務(wù)的精準度成為關(guān)鍵指標。為此,設(shè)計并實現(xiàn)了融合礦業(yè)期刊論文數(shù)據(jù)和數(shù)據(jù)倉庫技術(shù)的離線期刊論文推薦方法。本研究方法在數(shù)據(jù)倉庫維度建模的基礎(chǔ)上,利用維度融合加權(quán)算法綜合對期刊論文數(shù)據(jù)進行離線計算并進行在線推薦,當用戶搜索論文時,能根據(jù)用戶所需快速準確地提供相關(guān)文獻推薦,提高用戶的使用黏性。目前,該數(shù)據(jù)倉庫模型已上線應(yīng)用,為論文的相關(guān)推薦工作提供技術(shù)支持。
(2)該研究方法在后期工作中會將論文其他相關(guān)部分納入論文推薦的分析維度中,同時將引入SparkStreaming、Flink等實時在線計算引擎,實現(xiàn)對搜索論文的實時在線推薦。