余立毅
摘要:在基于Lucene全文檢索技術(shù)的商品搜索系統(tǒng)中,利用文本相似度算法來(lái)計(jì)算商品信息和關(guān)鍵詞的相似程度,并以此對(duì)商品搜索結(jié)果排序,但是排序結(jié)果往往不盡如人意。通過(guò)分析商品信息數(shù)據(jù)的結(jié)構(gòu)特點(diǎn)以及商品詞條存在同義詞的情況,在部分文本相似度算法的基礎(chǔ)上,結(jié)合同義詞詞林的原子詞群分類(lèi),設(shè)計(jì)一個(gè)適合于計(jì)算商品信息相似度的算法,用于提高商品搜索排序結(jié)果的準(zhǔn)確性。
關(guān)鍵詞:Lucene;商品搜索;相似度算法;原子詞群;排序
中圖分類(lèi)號(hào):TP311.13 ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)24-0069-03
Abstract: In the commodity search system based on Lucene full-text retrieval technology, the text-similarity algorithm is used to calculate the similarity of commodity information and keywords, and the commodity search results are ranked based on this, but the ranking results are often unsatisfactory. By analyzing the structural characteristics of commodity information data and the existence of synonyms in commodity entries, based on the partial text similarity algorithm, combined with the atomic word group classification of the CiLin, design an algorithm suitable for calculating the similarity of commodity information. It is used to improve the accuracy of commodity search ranking results.
Key words: Lucene; commodity search; similarity algorithm; atomic word group; ranking
1 背景
近些年來(lái),人們的消費(fèi)習(xí)慣更多是網(wǎng)上購(gòu)物,從而促使了更多的商業(yè)化購(gòu)物平臺(tái)的誕生。這些平臺(tái)通過(guò)對(duì)外提供商品搜索、商品瀏覽、商品排序等服務(wù)來(lái)提升用戶的使用體驗(yàn),其中商品搜索結(jié)果的精確程度取決于搜索引擎的相似度算法。而目前文本相似度算法[1]大致分為四類(lèi),分別是基于字符串方法、基于語(yǔ)料庫(kù)方法、基于世界知識(shí)方法和基于句法分析方法。在Lucene全文檢索技術(shù)[2-3]中,使用語(yǔ)料庫(kù)方法中的VSM方法來(lái)計(jì)算文本相似度[4],其核心思想是將每篇文檔表示成一個(gè)基于詞頻或者詞頻–逆文檔頻率(Term Frequency-Inverse Document Frequency, TF-IDF)權(quán)重的實(shí)值向量,之后采用BM25算法[5]替代。這類(lèi)方法都是需要計(jì)算詞頻、文檔頻率和文檔長(zhǎng)度等因素,但是這些因素并不能很準(zhǔn)確地決定搜索關(guān)鍵詞和商品信息的匹配程度。基于世界知識(shí)方法中,利用WordNet、《知網(wǎng)》(HowNet)和《同義詞詞林》[6-7]等通用詞典來(lái)計(jì)算文本相似度,這些詞典能夠準(zhǔn)確地表示概念含義并能反映出概念之間的相似性和相關(guān)性。
通過(guò)對(duì)商品名稱數(shù)據(jù)結(jié)構(gòu)的分析,發(fā)現(xiàn)商家會(huì)把同義詞堆疊在標(biāo)題中,以期望獲取到更多的流量,而且商品信息基本是名詞組成。有研究證明,對(duì)詞義進(jìn)行有效擴(kuò)展,或者對(duì)關(guān)鍵詞做同義詞替換可以明顯改善信息檢索的性能。本文經(jīng)過(guò)以上研究分析之后,在原有BM25方法計(jì)算相似度的基礎(chǔ)上,結(jié)合世界知識(shí)方法中的《同義詞詞林》,設(shè)計(jì)出一個(gè)基于相同關(guān)鍵詞詞頻和同義詞詞頻的相似度算法。
2 關(guān)鍵技術(shù)
2.1 Lucene全文檢索技術(shù)
Lucene是apache軟件基金會(huì)的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包,提供了完整的查詢引擎和索引引擎。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。索引技術(shù)是Lucene全文檢索的核心功能之一,是一種稱為反向索引[8](inverted index)的機(jī)制,通過(guò)預(yù)先將數(shù)據(jù)構(gòu)建成索引庫(kù),在后續(xù)的搜索過(guò)程中讀取索引庫(kù),實(shí)現(xiàn)快速檢索。索引庫(kù)內(nèi)部的數(shù)據(jù)由兩部分組成——詞典和倒排表,詞典是文本數(shù)據(jù)經(jīng)過(guò)分詞以后得到的所有不重復(fù)的詞條,倒排表則是記錄了存在詞條的所有文件形成的鏈表結(jié)構(gòu)。構(gòu)建索引庫(kù)就是將原文本數(shù)據(jù)進(jìn)行分詞處理,得到若干詞條以及對(duì)應(yīng)的文件信息,包括該詞條在文件中出現(xiàn)的頻率和詞條在文件中出現(xiàn)的位置信息,這些詞條以詞典的形式保存,對(duì)應(yīng)的文件信息以倒排表的形式保存。搜索關(guān)鍵詞就是搜索索引庫(kù)的過(guò)程,先在詞典中找到對(duì)應(yīng)的關(guān)鍵詞,然后通過(guò)詞典和倒排表之間的映射,找到出現(xiàn)該關(guān)鍵詞的某個(gè)文件或一組文件的集合。
2.2 HanLP中文分詞器
中文分詞[9]是中文文本處理的一個(gè)基礎(chǔ)步驟,也是全文搜索技術(shù)的核心關(guān)鍵之一,分詞效果的好壞以及效率直接關(guān)系到搜索引擎的綜合表現(xiàn)。HanLP中文分詞器具備功能完善、性能高效、架構(gòu)清晰、語(yǔ)料時(shí)新、可自定義的特點(diǎn)。默認(rèn)模型訓(xùn)練自全世界最大規(guī)模的中文語(yǔ)料庫(kù),同時(shí)自帶一些語(yǔ)料處理工具,幫助用戶訓(xùn)練自己的模型。目前支持包括Solr(7.x)在內(nèi)的任何基于Lucene(7.x)的系統(tǒng)。
2.3 BM25算法
Lucene全文檢索的另一個(gè)核心功能就是搜索排序,排序是依據(jù)各個(gè)文本和搜索關(guān)鍵詞之間的相似度分值,計(jì)算相似度得分的算法是BM25檢索算法,它是一種用來(lái)評(píng)價(jià)搜索詞和文檔之間相關(guān)性的算法,基于概率檢索模型提出的算法。BM25模型在二元獨(dú)立模型基礎(chǔ)上,在對(duì)查詢結(jié)果的評(píng)分計(jì)算中,考慮了IDF因子、文檔長(zhǎng)度因子、文檔詞頻和查詢?cè)~頻, 并利用2個(gè)自由調(diào)節(jié)因子 (k1和b) 對(duì)各種因子的權(quán)值進(jìn)行調(diào)整組合。算法公式如下:
其中Q為Query,d標(biāo)識(shí)搜索結(jié)果的文檔,qi表示Query中的一個(gè)語(yǔ)素(分詞),Wi表示qi的權(quán)重,R(qi,d)表示語(yǔ)素qi與文檔d的相關(guān)性得分。N為索引中的全部文檔數(shù),n(qi)為包含了qi的文檔數(shù),k1、b為調(diào)節(jié)因子,通常根據(jù)經(jīng)驗(yàn)設(shè)置,一般k1=2,b=0.75。fi為qi在d中出現(xiàn)的頻率,dl為文檔d的長(zhǎng)度,avgdl為所有文檔的平均長(zhǎng)度。
2.4 同義詞詞林
《哈工大信息檢索研究室同義詞詞林?jǐn)U展版》是在《同義詞詞林》的基礎(chǔ)上剔除不常見(jiàn)詞并擴(kuò)展,最終的詞表包含 77,343 條詞語(yǔ),以下簡(jiǎn)稱《詞林》。
《詞林》按照樹(shù)狀的層次結(jié)構(gòu)把所有收錄的詞條組織到一起,把詞 匯分成大、中、小三類(lèi),大類(lèi)有 12 個(gè),中類(lèi)有 97 個(gè),小類(lèi)有 1,400 個(gè)。每個(gè)小 類(lèi)里都有很多的詞,這些詞有根據(jù)詞義的遠(yuǎn)近和相關(guān)性分成了若干個(gè)詞群(段落)。每個(gè)段落中的詞語(yǔ)有進(jìn)一步分成了若干個(gè)行,同一行的詞語(yǔ)要么詞義相同 (有的詞義十分接近),要么詞義有很強(qiáng)的相關(guān)性。
大類(lèi)用大寫(xiě)英文字母表示,中類(lèi)用小寫(xiě)英文字母表示,小類(lèi)用二位十進(jìn)制整數(shù)表示。第四級(jí)用大寫(xiě)英文字母表示,第五級(jí)用二位十進(jìn)制整數(shù)表示。具體的標(biāo)記參見(jiàn)表1。
表中的編碼位是按照從左到右的順序排列。第八位的標(biāo)記有3種,分別是“=”“#”“@”,“=”代表“相等”“同義”。末尾的“#”代表“不等”“同類(lèi)”,屬于相關(guān)詞語(yǔ)。末尾的“@”代表“自我封閉”“獨(dú)立”,它在詞典中既沒(méi)有同義詞,也沒(méi)有相關(guān)詞。
在《詞林》的編碼體系中,前面四層結(jié)點(diǎn)都代表抽象的類(lèi)別,只有第五層的葉子結(jié)點(diǎn)才是具體的詞語(yǔ),同一個(gè)詞語(yǔ)可能有多個(gè)不同的義項(xiàng),即同一詞語(yǔ)可能在不同的原子詞群中同時(shí)存在。其中第一層級(jí)的大類(lèi)代碼含義如表2所示。
其中 A、B、C 類(lèi)多為名詞,D 類(lèi)多為數(shù)詞和量詞,E 類(lèi)多為形容詞,F(xiàn)、G、H、I、J 類(lèi)多為動(dòng)詞,K 類(lèi)多為虛詞,L 類(lèi)是難以被分到上述類(lèi)別中的一些詞語(yǔ)。
3 系統(tǒng)設(shè)計(jì)
3.1 索引庫(kù)字段設(shè)計(jì)
商品表products結(jié)構(gòu)如下表3所示,索引庫(kù)字段為id、prod_pname、prod_catalog_name、prod_price、prod_description和prod_picture。
3.2 相似度算法設(shè)計(jì)
相似度計(jì)算[10-11]只是為了對(duì)商品信息和搜索語(yǔ)句之間相關(guān)程度進(jìn)行排序,不需要準(zhǔn)確的相似度分值,因此可以簡(jiǎn)化BM25算法。去掉wi項(xiàng),因?yàn)閣i項(xiàng)在同一查詢語(yǔ)句下對(duì)于各商品記錄來(lái)說(shuō)都是固定值。此外文檔長(zhǎng)度項(xiàng)dl和avgdl,也就是商品名稱信息的長(zhǎng)度,并不能決定商品排序,而應(yīng)該根據(jù)搜索詞和同義詞在文檔中出現(xiàn)的詞頻,來(lái)決定商品信息和搜索語(yǔ)句之間的相關(guān)程度。綜上所述,BM25算法簡(jiǎn)化如下,
3.3 同義詞設(shè)計(jì)
考慮到商品名稱中的關(guān)鍵信息都是名詞構(gòu)成,對(duì)《詞林》進(jìn)行篩選,保留B類(lèi),還要對(duì)第2級(jí)分類(lèi)進(jìn)行篩選,過(guò)濾掉Bb擬狀物、Bd天體、Be地貌和Bf氣候,并且去掉@、#結(jié)尾的記錄。
4 實(shí)驗(yàn)結(jié)果
為了分析對(duì)比基于Lucene原有BM25算法和基于同義詞的改進(jìn)BM25算法在商品排序結(jié)果方面的差異,從《詞庫(kù)》中選取“拐棍”關(guān)鍵詞作為搜索詞,采用淘寶網(wǎng)站關(guān)于“拐棍”商品的9條信息作為測(cè)試數(shù)據(jù)集,這里原有BM25算法稱為O方法,本文采用的同義詞改進(jìn)BM25算法稱為N方法,前后方法排序結(jié)果如下表4所示的實(shí)驗(yàn)數(shù)據(jù)。
從兩者排序結(jié)果來(lái)看,發(fā)現(xiàn)兩者的差別較大。首先,對(duì)比商品1或8和商品9的商品信息,三個(gè)商品都用到了“拐棍”的三個(gè)同義詞來(lái)描述商品,因此它們?nèi)齻€(gè)商品的排序應(yīng)該相同,而商品9的信息長(zhǎng)度較其他兩者短,導(dǎo)致在O方法中排序相對(duì)靠前,在N方法中三者排序一致,類(lèi)似的有商品2、6和7之間的排序?qū)Ρ?,?yàn)證了商品信息長(zhǎng)度不能決定商品的排序。
其次,對(duì)比商品1和商品5的商品信息,商品5用了8個(gè)同義詞來(lái)描述商品,相較商品1的3個(gè)同義詞要描述得更為全面,因此按照理解,商品5的相關(guān)性更高,排序更應(yīng)該靠前,符合在N方法中的排序結(jié)果,驗(yàn)證了商品同義詞數(shù)量決定商品的排序。
總的來(lái)說(shuō),基于同義詞的改進(jìn)BM25算法在排序結(jié)果方面更加符合人們對(duì)于商品信息與搜索關(guān)鍵詞之間相關(guān)程度的理解。
5 結(jié)束語(yǔ)
通過(guò)對(duì)Lucene全文檢索技術(shù)和《詞庫(kù)》同義詞體系結(jié)構(gòu)的研究,根據(jù)商品排序的實(shí)際需求,利用同義詞對(duì)原有的BM25排序算法進(jìn)行改進(jìn),構(gòu)建出商品搜索排序系統(tǒng)。經(jīng)過(guò)實(shí)驗(yàn)的對(duì)比分析,改進(jìn)的排序算法得到的排序結(jié)果更為合理,說(shuō)明系統(tǒng)的設(shè)計(jì)達(dá)到了最初的目的。
參考文獻(xiàn):
[1] 王春柳, 楊永輝, 鄧霏, 等. 文本相似度計(jì)算方法研究綜述[J]. 情報(bào)科學(xué), 2019, 37(3): 158-168.
[2] 周敬才, 胡華平, 岳虹. 基于Lucene全文檢索系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與科學(xué), 2015, 37(2): 252-256.
[3] 徐誠(chéng)皓. 基于Lucene的全文檢索的研究及實(shí)現(xiàn)[J]. 電腦知識(shí)與技術(shù), 2018, 14(10): 92-94.
[4] Zhou Y, Wu X Q, Wang R Y. A semantic similarity retrieval model based on Lucene[C]//2014 IEEE 5th International Conference on Software Engineering and Service Science. 27-29 June 2014, Beijing, China. IEEE, 2014: 854-858.
[5] 范晨熙, 黃理燦, 李雪利. 基于Lucene的BM25模型的評(píng)分機(jī)制的研究[J]. 工業(yè)控制計(jì)算機(jī), 2013, 26(3): 78-79.
[6] 梅家駒. 同義詞詞林[M]. 上海: 上海辭書(shū)出版社, 1983.
[7] 田久樂(lè), 趙蔚. 基于同義詞詞林的詞語(yǔ)相似度計(jì)算方法[J]. 吉林大學(xué)學(xué)報(bào)(信息科學(xué)版), 2010, 28(6): 602-608.
[8] 鄭榕增, 林世平. 基于Lucene的中文倒排索引技術(shù)的研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2010, 20(3): 80-83.
[9] 奉國(guó)和, 鄭偉. 國(guó)內(nèi)中文自動(dòng)分詞技術(shù)研究綜述[J]. 圖書(shū)情報(bào)工作, 2011, 55(2): 41-45.
[10] 胡博, 蔣宗禮. 融合位置相關(guān)和概率排序的Lucene排序算法改進(jìn)[J]. 計(jì)算機(jī)科學(xué), 2016, 43(9): 247-249, 273.
[11] 蘇琴, 謝衛(wèi)華. 融合詞性與位置信息改進(jìn)的Lucene排序算法[J]. 電腦知識(shí)與技術(shù), 2019, 15(17): 82-85.
【通聯(lián)編輯:謝媛媛】