王瑋璇
(1.同濟(jì)大學(xué),上海 200092;2.上海亞太神通計(jì)算機(jī)有限公司,上海 200040)
在計(jì)算機(jī)語言中,數(shù)據(jù)總體上可分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),結(jié)構(gòu)化數(shù)據(jù)指的是具有固定格式或有限長度的數(shù)據(jù),如XML、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等。非結(jié)構(gòu)化數(shù)據(jù)指不定長度或無固定格式的數(shù)據(jù),如郵件、文檔等。由于結(jié)構(gòu)化數(shù)據(jù)具有一定的規(guī)律和結(jié)構(gòu),因此查詢起來比較容易和快速。但對于非結(jié)構(gòu)化數(shù)據(jù),目前大量使用的方法是全文檢索法,其基本思路是從非結(jié)構(gòu)化的數(shù)據(jù)中提取一部分信息進(jìn)行重構(gòu),使其具有一定的結(jié)構(gòu),然后再對這部分有結(jié)構(gòu)的數(shù)據(jù)進(jìn)行搜索[1]。在日常生活中,對非結(jié)構(gòu)化數(shù)據(jù)的需求量要遠(yuǎn)多于對結(jié)構(gòu)化數(shù)據(jù)的需求量,因此,全文檢索法作為創(chuàng)建搜索引擎的基本思路被廣泛使用。
目前,判斷兩組向量相關(guān)性的方法主要使用空間向量模型算法,作為業(yè)界最為知名的開源搜索引擎Lucene,它的評分機(jī)制也是以空間向量模型作為理論基礎(chǔ)。Lucene 默認(rèn)通過實(shí)現(xiàn)Similarity 模型對文檔相關(guān)性進(jìn)行評分[2]。但在實(shí)際應(yīng)用中,Similarity 模型的默認(rèn)實(shí)現(xiàn)往往不能夠適應(yīng)特定的業(yè)務(wù)邏輯,需要對Similarity 模型進(jìn)行衍生和擴(kuò)展。在常見的內(nèi)容管理系統(tǒng)門戶網(wǎng)站中都具有全文檢索功能,能夠根據(jù)查詢關(guān)鍵字將站內(nèi)的數(shù)據(jù)按照一定的排序邏輯進(jìn)行檢索,本文將著重研究內(nèi)容管理系統(tǒng)中全文檢索功能的具體實(shí)現(xiàn)。
全文檢索過程主要分為索引創(chuàng)建和索引搜索兩部分。索引創(chuàng)建對包括文件系統(tǒng)、數(shù)據(jù)庫、互聯(lián)網(wǎng)等現(xiàn)實(shí)世界中所有結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行提取和重構(gòu),使之成為結(jié)構(gòu)化文檔;索引搜索是從客戶端得到查詢語句,再從現(xiàn)有的索引中查詢符合關(guān)鍵字的結(jié)果[3]。
Lucene 是一套用于全文檢索和搜尋的開源程式庫,由Apache 軟件基金會(huì)支持和提供。Lucene 提供了一個(gè)簡單卻強(qiáng)大的應(yīng)用程式接口,提供全文索引和搜尋功能。在Java 開發(fā)環(huán)境里L(fēng)ucene 基于Java 開發(fā)環(huán)境,具備成熟的開源全文檢索框架,它的評分機(jī)制(Lucene Scoring) 建立在Similarity 模型的基礎(chǔ)上,是整個(gè)框架的核心部分[4]。
在Lucene 中,默認(rèn)Similarity 模型的實(shí)現(xiàn)是基于空間向量模型中的向量相關(guān)性的余弦公式,其評分公式為:
其中,coord(q,d)—該分值衡量了文檔中所含Term 的數(shù)量,Term 的數(shù)量越多,相應(yīng)文檔的分值越高;queryNorm(q)—表示標(biāo)準(zhǔn)化因子,對多個(gè)查詢器返回的結(jié)果進(jìn)行比較,不影響文檔的排名。用于給查詢器設(shè)置權(quán)重;tf(tinq)—表示查詢關(guān)鍵字在文檔中出現(xiàn)的頻率,即詞頻。關(guān)鍵詞在文檔中出現(xiàn)的次數(shù)越多,得分越高;idf(t)—代表著關(guān)鍵字的逆詞頻,衡量了關(guān)鍵字在整個(gè)文檔庫中出現(xiàn)的頻度。其值越大,得分越高;t.getBoost()—該值表示搜索時(shí)權(quán)重因子,用于在查詢時(shí)賦予不同的查詢關(guān)鍵字相應(yīng)的權(quán)重;norm(t,d)—封裝了索引時(shí)的標(biāo)準(zhǔn)化因子,它包括三個(gè)參數(shù): ①Document boost: 衡量了文檔的重要程度,該值越大,說明此文檔越重要;②Field boost: 設(shè)置域的權(quán)重,值越大,說明該域越重要;③Length Norm: 衡量了文檔的長度,文檔越長,值越小。
Lucene 默認(rèn)的相似度評分算法考慮到不同的影響因素,提供了比較精確的相似度算法,但對于全文檢索業(yè)務(wù)邏輯,其檢索結(jié)果與用戶滿意度存在較大的差距,它在文檔相似度上計(jì)算得非常細(xì)致,但對于所有全文檢索業(yè)務(wù)邏輯來說并不是越細(xì)致越好[5],如圖1 所示的為使用Lucene 默認(rèn)的DefaultSimilarity 相似度模型算法查詢關(guān)鍵字為“2013 同濟(jì)” 的文檔。
在前6 篇文檔的標(biāo)題和摘要中出現(xiàn) “2013 同濟(jì)” 的次數(shù)是差不多的,事實(shí)上它們在相似度評分上的差異并不大,用戶此時(shí)更關(guān)心的是查詢關(guān)鍵字在標(biāo)題中的命中率以及發(fā)布日期越新越好,但默認(rèn)的相似度算法計(jì)算出的評分太過細(xì)致,人工基本無法使用其他排序規(guī)則對這些相似度差異不大的文檔進(jìn)行排序。這就要求我們在創(chuàng)建索引時(shí)提高標(biāo)題域的權(quán)重,同時(shí)對Similarity 模型進(jìn)行改造[6],在查詢結(jié)果排序時(shí)對相似度相同的文檔按照發(fā)布日期進(jìn)行倒序排列[7],除此之外,在內(nèi)容管理系統(tǒng)發(fā)布文章時(shí),通常都會(huì)設(shè)置文章的欄目,因此,在創(chuàng)建索引時(shí)需要將欄目信息也進(jìn)行索引。具體做法如下:
(1)在創(chuàng)建每一篇文檔的索引時(shí),為欄目、標(biāo)題、摘要和發(fā)布日期創(chuàng)建索引,同時(shí)提高標(biāo)題域的權(quán)重,本文中將其放大100 倍,這樣做的目的是增加關(guān)鍵字在標(biāo)題中出現(xiàn)的評分比重。
(2)新建Similarity 模型CustomSimilarity,使用面向?qū)ο蠓绞綄⑵淅^承Similarity 默認(rèn)的DefaultSimilarity 實(shí)現(xiàn)類,并重寫其中計(jì)算queryNorm,tf,idf 等相關(guān)性因子的計(jì)算邏輯,此處為了徹底屏蔽這些次要因素對相關(guān)性評分的影響,均將它們的計(jì)算結(jié)果返回1.0f。這樣做意在使相似度差不多的文檔具有相同的相似度,以此來突出發(fā)布日期對排序的影響。
圖1 使用DefaultSimilarity 的查詢結(jié)果
表1 相關(guān)性評分的比較
(3)在查詢索引時(shí),先確定欄目域,再對查詢關(guān)鍵字進(jìn)行分詞處理,最后按照相關(guān)性評分排序,對于評分相同的文檔按照發(fā)布日期倒序,取排序前十名的文檔。使用explain 方法對比DefaultSimilatiry 和CustomSimilatiry 計(jì)算的相關(guān)性信息可以得出表1 的數(shù)據(jù)[8],由于屏蔽了詞頻、逆詞頻、關(guān)鍵字權(quán)重、文檔權(quán)重、文檔長度等因素的影響,CustomSimilatiry 相對于DefaultSimilatiry,它的得分粒度被放大了,從而出現(xiàn)了一些有著相同相關(guān)性評分的文檔,把這些文檔按照發(fā)布日期進(jìn)行倒序排列,如圖2 所示,最終得到的是更加合理的查詢結(jié)果。
對于Lucene 搜索引擎來說,其默認(rèn)的相關(guān)性評分模型僅僅提供了一種通用的相關(guān)性算法,對于特定的檢索邏輯,需要借用面向?qū)ο蟮姆椒▽δJ(rèn)的相關(guān)性模型算法進(jìn)行擴(kuò)展。本文描述了在內(nèi)容管理系統(tǒng)中對Lucene搜索引擎文檔相關(guān)性評分模型Similarity 進(jìn)行個(gè)性化定制,從中可以看出經(jīng)過自定義的評分模型相比默認(rèn)的評分模型更具合理性,類似的,這種自定義評分模型的方式也可以使用在其他全文檢索業(yè)務(wù)當(dāng)中。
圖2 使用CustomSimilarity 的查詢結(jié)果
[1] 倪俊峰.基于黃頁搜索引擎的關(guān)鍵字排名廣告系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[A];2005年中國索引學(xué)會(huì)年會(huì)暨學(xué)術(shù)研討會(huì)論文集[C];2005.
[2] 李明宙,羅艷,王宗義.Lucene 全文檢索引擎的研究及應(yīng)用[A];廣西計(jì)算機(jī)學(xué)會(huì),2010年學(xué)術(shù)年會(huì)論文集[C];2010.
[3] 張校乾.基于Lucene 的全文檢索系統(tǒng)的研究與應(yīng)用[D].大連理工大學(xué),2005.
[4] 徐財(cái)應(yīng).基于Lucene 的搜索引擎技術(shù)的研究與改進(jìn)[D].長春理工大學(xué),2010.
[5] 于飛.基于搜索引擎的個(gè)性化推薦研究[D].哈爾濱理工大學(xué),2010.
[6] 周月紅.基于Lucene 的站內(nèi)搜索引擎的設(shè)計(jì)與開發(fā)[D],華東理工大學(xué),2011.
[7] 侯云.構(gòu)建基于Lucene 的網(wǎng)站站內(nèi)搜索[J].信息與電腦(理論版),2010,2.
[8] 王紅勝.多文檔全文檢索系統(tǒng)的設(shè)計(jì)與開發(fā)[D].電子科技大學(xué),2010.