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