郝強++高占春



摘要:網絡百科是一部在線百科全書,為用戶提供了資源豐富、內容詳實的網絡查詢工具。網絡百科檢索服務是基于SolrCloud搭建的檢索平臺,服務部署在集群上,具有集中式的信息配置、自動容錯、近實時搜索和查詢時自動負載均衡的特點。本文介紹了SolrCloud平臺的搭建方案,結合數據特點設計了索引結構,增加了中文分詞器和中文詞表,提高了在創建索引和檢索索引過程中的中文分詞效果。在SolrCloud平臺基礎上,本文根據搜索引擎原理提出了搜索引擎優化方案,進一步提升了搜索效果。通過在創建索引時對關鍵字段設置多顆粒度分詞模式,在檢索索引時對不同顆粒度分詞設置不同的權重,提高檢索效果;通過挖掘數據內在的引用關系為文檔質量評分,提高優質文檔在搜索結果中的排名。實驗數據表明,優化方法對網絡百科檢索服務效果有很大的提升。
關鍵詞:計算機軟件;搜索引擎優化;SolrCloud;中文分詞
中圖分類號:TP311
文獻標識碼:A
DOI:10.3969/j.issn.1003-6970.2015.12.024
本文著錄格式:郝強,高占春.基于SolrCloud的網絡百科檢索服務的實現[J].軟件,2015,36(12):103-107
0 引言
1.網絡百科是一個包羅萬象的在線百科全書,涉及經濟、政治、文化等各個方面。網絡百科的主體為詞條,分為中文和英文,由千萬量級的詞條構成了龐大的知識庫,具有很強的知識性和科普價值,同時又鼓勵用戶參與創建和修改詞條,使網絡百科在豐富權威的同時,也具有趣味性和快更新的特點。
2.在海量的數據中,按照用戶的需求高效、準確地檢索出詞條和同條內容是一項極具挑戰的任務。搜索引擎技術可以通過對數據文檔創建索引,實現對相關查詢的高效快速檢索,為用戶返回相當數量的排序搜索結果。并且可以根據實際的數據特點,通過多種手段對搜索引擎的進行優化,提高搜索結果的準確率。
3.在處理大規模數據時,不但需要考慮檢索的效果,也需要考慮計算機的運算能力和故障風險。分布式搜索技術在集群上搭建服務,通過負載均衡降低了機器的運算負擔,通過并行計算提高了集群的運算能力,通過分布式存儲提高了整個集群的容災能力。
4.本文使用SokCloud搭建分布式搜索引擎,為海量數據提供了高效準確的檢索服務,并提出了優化搜索的方法,實驗數據表明優化方法有效提高了搜索的準確率。
l SolrCloud介紹
Solr是一個基于Lucene的全文搜索服務器。Solr與Lucene相比,提供了更為豐富的查詢語言,提供了提供了基于Http的可返回json、xml等格式的接口。Solr提供了配置接口和擴展接口,并能對查詢性能進行優化。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,SolrCloud將服務部署在集群上,通過Zookeeper進行集群管理。SolrCloud在Solr的功能基礎上,具有4個新特性,包括集中式的配置信息,自動容錯,近實時搜索和查詢時自動負載均衡。SolrCloud為大數據量檢索提供了良好的解決方案。
SolrCloud集群中collection是一個邏輯意義上的完整索引。一個collection通常被分成一個或多個shard,同一個collection的所有shard具有相同的配置。一個shard有一個或多個replica作為副本,每個shard的replica中會選舉出一個leader。
2 SolrCloud部署
2.1 SolrCloud搭建
網絡百科檢索服務使用的是solr-5.2.1版本,solr-5.2.1需要運行在jdkl.7及以上版本。分析網絡百科數據量大小,以及自動容錯和負載均衡的需要,網絡百科檢索服務創建了名為baike的collection,baike分為5個shard,每個shard有3個replica。SolrCloud管理頁面展示的集群結構見下圖。
搜索服務部署在5臺機器上,每臺機器分配4G內存和16G存儲空間。分別在5臺機器上部署solr-5.2.1,在一臺機器的configsets目錄下創建屬于網絡百科檢索服務的配置目錄baike_configs,并在該機器上啟動SolrCloud創建baike實例,在其余4臺機器上啟動SolrCloud并加入該baike實例。這5臺機器組成了SolrCloud集群。
2.2 分詞器和詞表
網絡百科檢索服務是基于詞的倒排索引的查詢。詞是表達語義的最小單元,對于以英文為代表的的西方拼音語言來說,詞之間有明顯的分界符,英文以空格作為天然的分隔符。與西方拼音語言不同,中文繼承于古代漢語傳統,詞之間沒有明確的分隔符。古代漢語中詞通常就是單個字,而現代漢語中雙字或多字居多。因此,中文搜索服務在索引創建和索引檢索之前,需要對文本中的句子進行分詞,然后才能做相應的其他處理。
分詞器的分詞效果直接影響了創建索引的內容以及檢索的準確度。中文分詞算法可分為三大類:基于字典、詞庫匹配的分詞方法;基于詞頻度統計的分詞方法和基于知識理解的分詞方法。目前,成熟的中文分詞器主要有IKAnalyzer、Paoding、MMSEG、ICTCLAS等。其中,IKAnalyzer和Paoding是基于字符串匹配的分詞器,加入一些啟發式規則,比如“正向/反向最大匹配”、“長詞優先”等策略優化。ICTCLAS分詞理論使用的模型是層疊隱馬爾可夫模型,該分詞器除了具有中文分詞和詞性標注功能外,還支持新詞識別。
通過對分詞器的分詞效果、執行效率和是否符合SolrCloud接口的綜合考量,在網絡百科檢索服務選擇了MMSEG分詞器。MMSEG由Chih-Hao Tsai開發,使用了加入3段回溯式方法的基于詞表的分詞。MMSEG提供了三種模式,simple、max-word和complex。網絡百科檢索服務使用了細顆粒度分詞的max-word模式和加入了四個過濾規則的粗顆粒度分詞的complex模式。并收集整理了自定義詞表。關于增加中文分詞器的schema.xml配置如下。
2.3 網絡百科索引
網絡百科的數據結構為詞條標題、詞條摘要、詞條正文、詞條語言和詞條圖片,在數據庫中存儲的對應字段為title、digest、content、1anguage、picture。結合網絡百科的數據結構,設計的索引數據結構見下表。
表l中,field列是索引中的字段名,fieldType列是索引中該字段的處理類型,indexed為布爾值,代表該字段數據是否被用來建立索引,stored為布爾值,代表該字段數據是否存儲。其中title對應詞條標題,language對應詞條語言,digest對應詞條摘要。
與詞條的字段結構相比,索引字段中增加id字段,作為SolrCloud創建索引的唯一標識字段,同時需要在schema.xml中將該id字段配置成uniqueKey。
索引字段中添加title_complex和title_max字段,這兩個字段是對title字段數據的復制,目的是實現對title字段的多顆粒度的分詞,為此需要在schema.xml中增加配置如下。
3 SolrCloud優化
3.1 優化概述
檢索服務本質上是索引創建和索引檢索的過程。在海量的網絡資源中,每一個網頁都是一個文檔。在創建索引的時候,首先將每一個文檔進行分詞得到詞,然后按詞生成倒排索引,倒排索引中存儲了文檔編號,也就是2.3節中的id字段。用戶在查詢時輸入查詢內容。在檢索索引的時候,首先將用戶的查詢內容進行分詞得到詞,然后按詞在倒排索引中進行檢索,最后對檢索結果處理,對檢索出的文檔進行評分,按照評分對檢索結果排名,將最終結果返回給用戶。
評分越高,說明文檔內容與用戶查詢的相關性越高。每個文檔由詞組成,每個詞有一個權重,那么一個文檔中的所有詞可以組成一個向量,表達式如下。
將每一個詞作為N維空間中的一維,將網絡百科檢索服務中的文檔中詞組成的詞向量與用戶輸入查詢內容中的詞組成的詞向量放在N維空間中,比較不同文檔的詞向量與查詢的詞向量的夾角。
文檔與查詢的相關性大小可以使用文檔的詞向量與查詢的詞向量之間的夾角大小表示。文檔的詞向量與查詢的詞向量之間夾角越小,文檔的相關性越大。向量夾角可以使用余弦定理計算出來,計算公式如下。
結合以上公式和分析,從以下幾點對SolrCloud搭建搜索服務進行優化。
(1)對文檔和查詢語句進行準確地分詞;
(2)對關鍵字段使用多顆粒度分詞模式;
(3)對文檔內容進行評分,提高優質文檔在搜索結果中的排名。
其中,(l)已經在2.2節介紹。
3.2 多顆粒度查詢
多顆粒度是指對語句分詞時切分的詞的粒度的大小。顆粒度大,平均詞的字數較多,語句分詞后詞的數量較少;相反,顆粒度小,平均詞的字數較少,語句分詞后詞的數量較多。在漢語中,詞是表達意思最基本的單位,但是不同的人對于詞的顆粒度理解是不同的。例如,某個語句中出現了“聯想公司”,有些人會將“聯想公司”看作一個整體,這是粗顆粒度分詞;有些人會認為“聯想”是修飾“公司”的定語,那么分詞為“聯想”和“公司”兩個詞,這是細顆粒度分詞。
通常,粗顆粒度的詞會攜帶更多的信息,在消除不確定性上發揮更大的作用。粗顆粒度的詞在語義上更加明確。雖然粗顆粒度的詞有諸多好處,但是在檢索服務的實現中,并不能只使用這一種分詞方法。比如在創建索引時將“清華大學”看作一個整體,那么用戶在搜索“清華”時就無法找到“清華大學”的文檔。
在網絡百科檢索服務的設計中對關鍵字段title進行了多顆粒度的分詞,通過字段的復制方法將title復制成title_complex和title max,并分別使用了完全匹配模式分詞、MMSeg的complex模式的粗顆度分詞和MMSeg的max模式的細顆粒度分詞。同時,對于不同分詞模式的結果,在評分階段給以不同的權重。因為不同顆粒度的詞所表達的信息量不同,通常粗顆粒度的詞會攜帶更多的信息,所以完全匹配模式的分詞給以最高的權重,complex模式的分詞次之,max模式的分詞給以最小的權重。分詞的顆粒度對查詢結果排名影響的計算公式如下
公式(4)中,coord(query,doc)表示一個文檔中包含查詢詞的數量,表示了該文檔與查詢語句的相關性。文檔中包含查詢詞的數量越多,coord(query,doc)的分數越高,導致搜索結果的評分score(query,doc)越高。term.getBoost()表示了查詢內容中每種顆粒度的分詞對查詢結果的影響。根據上面介紹的設置不同分詞模式的權重,不同分詞顆粒度對評分的影響大小也是不同的。顆粒度越大,term.getBoost()的分數越高,導致搜索結果的評分score(query,doc)越高。所以完全匹配模式的評分對最終評分的影響最大,粗顆粒度分詞模式對最終評分的影響次之,細顆粒度分詞模式對最終評分的影響最小。
3.3 文檔評分
搜索結果的好壞即取決于查詢與網頁的相關性,也取決于網頁的質量。在網絡百科檢索服務的設計中,通過文檔之間的相互引用關系來評價詞條內容的質量。網絡百科中的詞條都經過專業編輯,詞條的內容是可靠的,所以一個詞條被越多的文檔引用,那么它的內容就越重要,所獲得的評分就會越高。該詞條的評分會影響到搜索結果的評分,最終影響詞條在搜索結果中的排名。
網絡百科檢索服務是通過solr4j編寫程序創建索引的。首先,使用分布式并行運算統計出詞條的被引用情況并加以處理;然后創建索引時,為每個詞條的SolrInputDocument對象,通過setDocument Boost()方法將處理后的文檔質量評分存入索引。
文檔評分會影響搜索結果中文檔的排名,搜索結果評分的計算公式如下。
公式(5)中doc.getBoost()表示文檔評分。文檔評分越高,在搜索結果的評分也會越高。
3.4 實驗結果
在搭建了SolrCloud平臺基礎上,從三個方面對網絡百科檢索服務進行優化,以提高搜索效果。增加分詞器和詞表,提高對文檔和查詢內容的分詞效果;設置分詞的多種模式,并在檢索時對不同分詞顆粒度設置不同的權重;對文檔質量進行打分,提高優質文檔在搜索結果中的排名。通過實驗,上述三種方法有效提高了網絡百科檢索服務的搜索效果。實驗結果見下圖。
在實驗中,通過比較不同優化方法對搜索準確率的影響來評估對搜索效果的影響。在無優化的搜索實驗中,搜索的準確率為56.2%。在分詞優化的實驗中,對SolrCloud增加了中文分詞器和多種顆粒度分詞,搜索的準確率為80.6%,比無優化的搜索準確率提高了43.4%。在分詞+評分優化的實驗中,不但增加了中文分詞器和多種顆粒度分詞,還對文檔質量進行評分,評分結果影響查詢搜索的排名,該種方法實驗中搜索的準確率為85.3%,比無優化的搜索準確率提高了51.8%。實驗數據表明,對SolrCloud的優化方法對搜索效果有較大提升,最終的搜索結果準確率更高。
4 結論
網絡百科檢索服務使用SolrCloud搭建檢索海量網絡百科數據的平臺,為用戶提供了高效優質的查詢功能。結合網絡百科的數據字段設計了索引的結構,分析了搜索引擎原理并提出了優化檢索服務的方法,為SolrCloud增加了中文分詞器和詞表,結合實際數據設置了多種顆粒度分詞模式,挖掘數據內在引用關系為文檔質量評分。優化方法有效提高了SolrCloud的搜索效果。