張少迪 艾山·吾買爾 鄭炅 石剛
摘? 要: 隨著大數(shù)據(jù)時代的來臨,如何從海量數(shù)據(jù)中抽取出最有效的信息成為人們最迫切的需要。為了能夠在大數(shù)據(jù)的環(huán)境下更好更快地進行漢英文本的信息抽取,文中采用Python編程語言,Django+uWSGI+Nginx框架,基于TextRank的圖排序算法實現(xiàn)漢英文本信息抽取系統(tǒng)。該系統(tǒng)包含文本關(guān)鍵詞提取,文本關(guān)鍵短語提取以及文本摘要提取。測試結(jié)果表明,該系統(tǒng)能夠?qū)崿F(xiàn)大規(guī)模數(shù)據(jù)的高并發(fā)穩(wěn)定調(diào)用,在兼顧抽取質(zhì)量的同時,還能實現(xiàn)超高效率的信息抽取,具有很好的實際應用價值。
關(guān)鍵詞: 大數(shù)據(jù); 高并發(fā); 信息抽取; TextRank; uWSGI; Nginx; Django
中圖分類號: TN912.34?34; TP391? ? ? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? 文章編號: 1004?373X(2019)16?0104?04
0? 引? 言
隨著互聯(lián)網(wǎng)的飛速發(fā)展,大數(shù)據(jù)時代已經(jīng)來臨,普通民眾們面對海量的信息,往往只能了解所關(guān)注信息中很小的一部分,這樣會讓很多民眾錯失很多感興趣的信息,也會讓很多信息失去其應有的價值。因此,如何使用戶能夠快速地發(fā)現(xiàn)自己所需要的信息,減少不必要的時間花費,也讓一些信息能夠順利地被其受眾找到,實現(xiàn)其應有的價值成為了學者們研究的重要課題。然而通過人工提煉文本關(guān)鍵詞、關(guān)鍵短語、摘要的時間成本消耗過大,人們往往需要通讀整篇文章,并領(lǐng)會大致的意思才能總結(jié)和發(fā)現(xiàn)足以概括整篇文本的信息,因此信息自動抽取[1]的需求也就變得越發(fā)迫切。
漢語和英語作為全世界范圍內(nèi)使用人數(shù)最多的兩種語言,對于信息抽取的需求也相對更加迫切,這也極大地推動了相當一部分人去從事漢語和英語信息抽取相關(guān)技術(shù)的研究。通過這些年的研究,已經(jīng)有很多比較成熟的算法被提出,如Taeho Jo提出一種基于KNN的表格關(guān)鍵字提取方法[2],黃小江等人提出基于協(xié)同圖排序的對比新聞自動摘要提取方法[3],何國萬等人提出一種基于領(lǐng)域主題詞表的網(wǎng)頁關(guān)鍵詞提取方法[4],朱澤德等人提出一種基于LDA模型的關(guān)鍵詞抽取方法[5],北京大學的萬小軍等人構(gòu)建的PKUSUMSUM系統(tǒng)[6]以及CTSUM系統(tǒng)[7]也對文檔摘要提取的發(fā)展起到了較大的作用。近年來,隨著深度學習的盛行,基于深度學習的信息抽取方法也逐漸得到了發(fā)展,Zhang Yong等人提出一種基于卷積序列的深度關(guān)鍵詞生成模型[8],洪冬梅提出一種基于LSTM的自動文本摘要提取技術(shù)[9],王煒提出一種基于深度學習的自動文摘提取技術(shù)[10]。
本文選擇在信息抽取領(lǐng)域中較為成熟和穩(wěn)定的TextRank算法[11]來作為本系統(tǒng)的核心算法,Django+uWSGI+Nginx作為框架,在面對大規(guī)模的數(shù)據(jù)以及高并發(fā)的調(diào)用時有著非常出色的表現(xiàn),不僅速度方面能滿足需要,而且在質(zhì)量方面也不遜色于其他開源的系統(tǒng),關(guān)鍵詞抽取,關(guān)鍵短語抽取,文本摘要抽取的準確率分別達到了0.43,0.43和0.41。
1? 信息抽取系統(tǒng)相關(guān)原理
1.1? TextRank
TextRank算法的思想來源于Google的網(wǎng)頁排名算法PageRank。它是一種基于圖模型的排序算法。該算法主要用于關(guān)鍵詞抽取、短語抽取、摘要抽取等工作。TextRank算法在進行運算時,首先把文本分割為單詞或句子,然后將這些單詞或句子構(gòu)建為圖模型,最后利用投票機制來對其進行排序。此外,與LDA[12],HMM[13]等模型不同的是,TextRank算法只需要單篇文檔就可以實現(xiàn)關(guān)鍵詞、短語、摘要的提取,不需要進行訓練,所以相對更加簡潔和高效。TextRank算法的模型可以表示為一個有向有權(quán)圖G=(V,E),由點集合V和邊集合E組成,E為V×V的子集。TextRank算法的公式為:
[WS(Vi)=(1-d)+d·Vj∈In(Vi)wjiVk∈Out(Vj)wjkWS(Vj)] (1)
式中:[WS(Vi)]表示點[Vi]的TextRank值;d為阻尼系數(shù),是常置于0~1之間的一個常數(shù),通常取0.85;wji為圖中任意兩個點[Vi],Vj之間邊的權(quán)重;In([Vi])為指向點[Vi]的點的集合;Out([Vi])則為點[Vi]所指向的點的集合。使用TextRank算法計算圖中各個點的得分時,需要先給圖中的點指定任意的初值,并遞歸計算直至收斂;然后將結(jié)果按照倒序排序,選取前N個值作為候選關(guān)鍵詞。
1.2? Django+uWSGI+Nginx框架
Django是基于Python的一種Web[14]應用框架,采用經(jīng)典的MVC[15]框架模式。它最初是源于一個在線的新聞Web站點,于2005年時以開源的形式發(fā)布出來,近年來一直得到廣泛的使用。在實際項目中,Django雖然有簡便、快速、APP可插拔等優(yōu)點,但是在并發(fā)性方面表現(xiàn)卻不太良好,所以在較大的項目中通常不單獨使用。
uWSGI是一種實現(xiàn)了WSGI協(xié)議、uWSGI協(xié)議以及HTTP協(xié)議的Web服務器。它具有快速、自我修復以及開發(fā)人員和系統(tǒng)管理員友好等優(yōu)點,由于uWSGI是完全采用C語言編寫的,所以其也具有效率高和性能穩(wěn)定的特點。Nginx是一個高性能的HTTP和反向代理服務,它有著許多非常優(yōu)越的特性,不僅能夠作為Web服務器,還能夠作為負載均衡服務器以及郵件代理服務器,無論作為何種服務器,它的性能和速度都能令人滿意,本系統(tǒng)主要用Nginx作為負載均衡服務器。本系統(tǒng)采用Django+uWSGI+Nginx框架。uWSGI可以使服務所支持的并發(fā)量更高,而且也更方便管理多線程,可以更好地發(fā)揮多核的優(yōu)勢;此外,還能提升性能,因為uWSGI協(xié)議比WSGI協(xié)議更有優(yōu)勢。而Nginx作為反向代理服務可以根據(jù)服務器的負載情況,動態(tài)地將請求交給不同的Web服務器,從而降低單個服務器的壓力,讓服務的調(diào)用更加穩(wěn)定和高效。
2? 信息抽取系統(tǒng)的設計與實現(xiàn)
2.1? 系統(tǒng)流程
本系統(tǒng)使用經(jīng)典的服務器?客戶端形式,由客戶端向服務器發(fā)送請求,并發(fā)送JSON格式的請求數(shù)據(jù),服務器接收到客戶端傳遞過來的請求后,獲取并解析JSON格式的數(shù)據(jù)。之后通過解析出的數(shù)據(jù)調(diào)用客戶端所請求的功能模塊的算法,得到結(jié)果后將結(jié)果重新封裝成為JSON格式的數(shù)據(jù),并通過回調(diào)函數(shù)將數(shù)據(jù)返回給客戶端,完成該次客戶端的調(diào)用請求。具體的實驗流程見圖1。
文本的內(nèi)容、語言類型、任務類型、用戶認證ID以及返回的數(shù)據(jù)類型皆由客戶端封裝為JSON格式發(fā)送給服務器端的總接口,具體如表1所示。
2.2? 系統(tǒng)功能
本系統(tǒng)的主要功能設計如下:
1) 具有關(guān)鍵詞抽取功能,并且可以針對漢英雙語的特點進行不同的處理來實現(xiàn)對其關(guān)鍵詞的抽取。此外,抽取關(guān)鍵詞的個數(shù)可以根據(jù)文本信息量的大小自動進行判定抽取關(guān)鍵詞的個數(shù)。
2) 具有關(guān)鍵短語抽取功能,可以識別所抽取的關(guān)鍵詞在原文中是否相鄰,如相鄰則可組合成為關(guān)鍵短語。
3) 具有文本摘要抽取功能,可以抽取文本中權(quán)重最高的3句話作為文本的摘要,當所抽取文本中的句子小于3句時,默認輸出全文為摘要句。
4) 通過uWSGI+Nginx+Django框架可以解決Python多線程調(diào)用表現(xiàn)不好的情況,實現(xiàn)高并發(fā)的多線程調(diào)用。
2.3? 調(diào)用示例
輸入的JSON格式的數(shù)據(jù)為:{ “text”:“會議指出,礦產(chǎn)資源是國民經(jīng)濟和社會發(fā)展的重要物質(zhì)基礎,也是實現(xiàn)現(xiàn)代化工業(yè)建設的重要保障,礦產(chǎn)資源保護與合理開發(fā)利用事關(guān)現(xiàn)代化建設全局?!?, “l(fā)ang”:“zh?CN”, “task”:“kw”, “key”:“user”,“format”:“JSON”}
返回的JSON格式的數(shù)據(jù)為:{“code”: 200, “data”: [“實現(xiàn)現(xiàn)代化” “合理開發(fā)利用”“礦產(chǎn)資源保護”“現(xiàn)代化建設”“國民經(jīng)濟”]},code值為狀態(tài)碼,200表示此次請求成功,0為失敗。
3? 實驗結(jié)果與分析
為了驗證漢英信息抽取系統(tǒng)的性能,本文設置了多組實驗從系統(tǒng)的準確性、并發(fā)性等方面對該系統(tǒng)進行測試。
3.1? 實驗環(huán)境
本實驗所使用的主要硬件配置如下:CPU E5?2690 V4@2.60 GHz,內(nèi)存為500 GB,操作系統(tǒng)使用的是Centos 7.2,編程語言采用Python 3.5.2,接口采用Django+uWSGI+Nginx框架。
3.2? 系統(tǒng)準確性測試
系統(tǒng)的準確性測試方面采用準確率P(Precision)、召回率R(Recall)和F1?score的方式來對系統(tǒng)的關(guān)鍵詞抽取、關(guān)鍵短語抽取和摘要抽取進行評測。
[P=Correct WordCompute Word] (2)
[R=Correct WordAll Correct Word] (3)
[F1-score=2PRP+R] (4)
式中:Correct Word為該文本中正確的關(guān)鍵詞;ComputeWord為該文本中系統(tǒng)提取的所有關(guān)鍵詞;AllCorrectWord為人手工標注的所有關(guān)鍵詞。測試的文本為人工標注的50篇新聞文本,其中每篇文本手工標注10個關(guān)鍵詞以及5個關(guān)鍵短語,摘要句的數(shù)量根據(jù)文本的長度來決定。在50篇文本中共選出500個關(guān)鍵詞,250個關(guān)鍵短語以及181句文本摘要,使用上述的三個指標對該系統(tǒng)的性能進行測試。此外,采用開源工具HanLP的關(guān)鍵詞提取和短語提取以及開源工具BOSON的摘要提取作為BaseLine,與本系統(tǒng)采用的算法進行一系列的對比。實驗結(jié)果如表2所示。
從表2可以看出,本系統(tǒng)的三個功能在準確率方面較開源的工具來說也有著一定幅度的提升,關(guān)鍵詞提取在召回率方面表現(xiàn)得非常出色。
3.3? 系統(tǒng)并發(fā)性測試
由于本系統(tǒng)需要處理大規(guī)模的數(shù)據(jù),所以對其并發(fā)性和處理速度有著較高的要求。從天山網(wǎng)以及騰訊大豫網(wǎng)上面爬取了10 000篇中文語料和5 000篇英文語料來對本系統(tǒng)的速度以及并發(fā)性進行測試,中英文本信息抽取速度結(jié)果見表3、表4。
根據(jù)表3、表4可以發(fā)現(xiàn),使用了Django+uWSGI+Nginx的框架后,一定范圍內(nèi)多線程調(diào)用的速度提升非常明顯,當達到硬件的瓶頸上限之后,速度不再提升,但是系統(tǒng)依然十分穩(wěn)定,所有的請求能夠成功地返回結(jié)果。
4? 結(jié)? 語
本文針對漢英文本的信息抽取問題,采用基于圖模型的TextRank算法,針對漢語和英語的不同特點,對文本進行處理,繼而實現(xiàn)了漢英文本信息抽取系統(tǒng)。此外,采用Django+uWSGI+Nginx的框架,在保持高質(zhì)量的同時,彌補了Django并發(fā)能力不足的弱點,實現(xiàn)了高并發(fā)的調(diào)用系統(tǒng)。由于要同時兼顧性能和速度,所以沒有采用相對復雜的基于語義算法,所以質(zhì)量方面與目前最為追求質(zhì)量的算法有所差距。在未來的研究工作中,會對基于語義的算法落地到項目工程方面做進一步的研究。
注:本文通訊作者為艾山·吾買爾。
參考文獻
[1] CHEN Q, JIANG Z R, BIAN J Q. Chinese keyword extraction using semantically weighted network [C]// Proceedings of 6th International Conference on Intelligent Human?Machine Systems and Cybernetics. Hangzhou: IEEE, 2014: 83?86.