全文搜索:分詞不在需要,按句子索引即可
摘要:一般來說的全文搜索服務,大體是基于字和關鍵詞的,基于語句的全文搜索服務是一個有意思的課題。以文字為最小節點,以語句為分枝,建立語義樹,提供基于語義樹的全文檢索服務。通過對語句進行語義特征編碼,并結合數據庫,來實現基于語義樹的全文索引和搜索服務。
1 引言
搜索引擎是信息時代的基礎服務之一,搜索引擎服務的核心為全文檢索。常用的全文檢索,一般以關鍵詞的檢索為主,對于不同的語言需要不同的處理方法。
對于常規的全文搜索來說,基本的功能就是分詞加上倒排序表。
全 文檢索對于分詞技術和字典的依賴,使得全文搜索實施的難度加大。對于不同語種需要不同的字典和分詞技術,對于同一語種不同專業的文檔也需要不同的分詞技術 和字典,不同字典和分詞技術也影響了系統的通用性。搜索引擎的服務隨著信息量的增大,存在索引時間長,搜索速度慢等問題。
本文探討以語句為單位,構建基于語句的搜索引擎,繪制文字的語義樹,搜索按自然語句的形式搜索,并提供自然語句或者詞匯后續的文字,以此進一步的搜索。
2 全文索引技術綜述
全文索引主要解決文字信息的搜索問題,結構化信息的檢索依托數據庫的索引技術實現,對于文檔類的信息,就需要轉換為結構化信息的全文搜索來完成。
為了提高索引的效率,應用了基于字典的關鍵詞索引,引進分詞技術,同義詞和停止詞技術,這樣做主要目的是減少索引的個數,通過詞的引入減少倒排序的存儲來實現效率的提升。關鍵詞的搜索,沒有考慮字詞之間的關系,沒有語義方面的考量。
全文索引隨著數據量的增大,會出現效率低下的問題,為了提高效率,會修改配置,降低索引的維度和次數來提高,例如給定關鍵詞條索引,自動分析文檔編寫摘要,用摘要索引來代替全文索引。為了保證搜索匹配的效率, 有效的索引方法是十分關鍵的, 特別是需要考慮語義匹配的時候, 索引就會變得更為復雜[1]。
如何通過語句來進行文檔和語句的關系索引,直接用自然語句進行搜索,是本文研究的課題。
3 語句索引和檢索
有了基于字詞的全文索引,自然有基于語句的全文索引。由于行文規則的確定,語句的數量是一個可測的集合,遠小于基于字詞組合的集合維度,數量級小,粒度大,索引的存儲量相對小。
語句索引技術需要解決的核心問題主要有:
1、語句索引問題。
2、查詢語句的匹配問題。
語句的索引主要通過語義樹來實現,對語句進行語義特征編碼,通過鏈接表的形式來存儲。語句的匹配問題有很多方法,選擇實用便捷的方法是系統主要考量的。
3.1語義特征編碼
語句的索引問題是語句索引和搜索的核心。利用語義特征編碼解決語句的統一編碼問題,不再基于自然語句做字符串的匹配,解決了語句匹配的問題。通過特征編碼實現語句的快速查找,組織語義樹實現了文章信息的自然索引,可以順著文字的脈絡進行搜索。
語 義特征編碼定義:實現語句中的文字統一映射到一個線性空間,文字在語句中的特征信息編碼主要由該文字本身和該文字在語句中之前的文字決定的。該特征編碼決 定了文字和語句中之前文字,關聯文字順序的信息。通過該編碼可以直接查詢到該語句片段。下面介紹采用線性的維度來構建語義樹。
語句中的文字通過增量哈希算法映射到統一的線性空間,形成特征標識,最長可以為128bit,一般64bit即可,空間容量為2的128次方或2的64次方。
語義特征編碼采用哈希算法實現,具體的實現方法如下:
1、對于語句排列定義如下:
i. 最小文字單元為w;
ii. W i 表示句中第i個最小文字單元;
2、特征序列編碼如下:
i. T i 表示W i 的特征編碼
3、公式如下:
T i =Tencode(T i-1 +w i );當i=0時為T 0 =Tencode(w 0 )
4、Tencode為特征編碼公式。一般為hash算法,然后取一定的位數。
特征編碼的意義主要是利用哈希算法,構建句中文字最小單元的特征編碼,特征編碼主要指的是語句截至到該最小單元的編碼。
統一的編碼格式映射到線性的空間,方便檢索。32位的編碼空間有一定的碰撞幾率,64位幾乎沒有碰撞。
利用語義特征編碼保存一段有序的文字片段,存儲和檢索均采用該特征編碼。
3.2 語義樹構建
語義樹指的是用樹形圖來表示語句,樹的節點為最小文字單元,最小文字單元一般來說指的是文字詞匯,中文的為單個文字,英文的為詞匯。通俗來講就是文字的樹。
建立語義樹,先給出語義三元組的定義:
{T i ,W i ,T i-1 };當i=0時,為{T 0 ,W 0 ,0}或者{T 0 ,W 0 }。
具體含義為:語義特征信息編碼,文字,前語義特征信息編碼。
語義三元組構建語義樹。
語義三元組包含了最小文字單元的上下連接關系。
用鏈式存儲的方式來構建語義樹。三元組存儲到數據庫中,文字的特征信息為唯一索引,為了查找方便,在前特征信息編碼建立索引,方便語義的檢索,
語義樹的作用主要有:
1、直觀的描述語句中文字和文字之間的連接;
2、給定語句的前文,可以方便的查找后續的文字;
3、語義匹配。進行語句的匹配,匹配檢索的語句和存儲的語句。
3.3 語義樹存儲
通過語義樹的構建提供一種快速匹配語義的方法,根據語義和文檔的關系,查找到相關的文檔信息。語義樹的存儲主要包括:語義樹、語義樹和文檔的關系和文檔。
語義樹的節點分為三類節點:位于句首的節點,其前節點或者父系節點為空;句中節點;句尾節點。由于語言的多樣性,有的節點可能同時具有三類中的一項或者多項。
在實驗系統中,“生物實驗室”的語義樹如下:
圖 1 “生物實驗室”語義樹
圖1為“生物實驗室”在系統中的語義樹存儲的展示圖,展示以“生物實驗室”為根節點的語義樹,每個文字均為一個節點,有的節點關系到文檔的記錄,有的僅僅是一個承接上下文的鏈接節點,或者說給節點沒有文檔標識。
點擊有文檔標識的節點既可以展示相關文檔。
圖 2 文檔信息顯示
“李白的詩”和“杜甫的詩”的語義樹如下:
圖 3 “李白的詩”和“杜甫的詩”語義樹
圖中展示的聯系在一起的文字之間也是有連接符的,這樣的處理僅僅表示文字之間沒有分支。
語義樹展示的是字與字的關系,在自然語句中的聯系形式。通過語義三元組的存儲,實現了自然語言的語義樹。
語義樹的存儲是通過數據庫來實現的。語義樹存儲四個字段:文字特征編碼,最小文字單元,前文字特征編碼,是否為句尾。一般來說,在文字特征編碼上建立唯一索引;前文字特征編碼建立索引,這樣方便語義樹的查詢。
為了實現全文搜索,還需要存儲語句和文檔的關系表和文檔。文檔和語句的關系表主要存儲兩個字段:語句尾部特征編碼和文檔識別Id,并以語句特征標識為主鍵建立數據庫表。
如果需要存儲文檔,則建立文檔存儲表,一般在文檔ID上建立索引即可。
3.4 語義搜索
文獻[2]提出語義相似度計算,認為語義相似度計算時自然語言處理關鍵技術之一。
要進行語義搜索首先需要進行語句的適配,考慮到搜索的效率,采用最大前綴匹配方法匹配語句,即在存儲的語句中找到最大前綴的匹配,這樣有利于簡化搜索,提高搜索的效率。
搜索主要按以下步驟的來完成:對搜索的語句進行語義特征編碼,找到最大的匹配,然后根據最大的匹配找到適合的語句,最后根據該語句找到相關的文檔。
語義搜索簡化搜索的方式,主要進行前綴的最大化匹配,主要基于的前提是隨著語料的增多,可以滿足查詢;還在于按自然語言的習慣搜索,而不是斷章取義的方式來進行。這樣簡化搜索的空間,有利于快速搜索。
語義搜索的流程如下:
1、搜索語句的特征編碼,形成序列集合{T i ;i=0,1,2…n-1};
2、從T n-1 開始搜索,如果有則找到,否則搜索T n-2 ;
3、假定找到T k ,如果T k 有文檔標識,則利用特征編碼找文檔;
4、否者沿著T kc 查找該特征序列所在分支的文檔標識。即查找前特征編碼為T k 的特征編碼,一直遞歸找到位置。
3.5 系統實現與測試
開發語句的搜索服務系統,采用數據庫存儲,主要包括:語義樹的存儲,語句和文檔的關系存儲和文檔的存儲。實現基于語義樹的查詢和聯想功能。
以百度知道的數據為例,27901630的標題索引,全文字系列,采用標點符號分割,非空格分詞的語言空格作為斷句符號。語義樹單元存儲條目為245009346,平均每標題占用8.78個。
圖 4 文檔數和語義特征存儲平均值
4結束語
采 用對文本信息進行特征序列的編碼,形成相關的語義樹,實質上提供了一種基于語句的全文搜索服務,一種基于語義樹的索引方法和系統,一種不再依賴于分詞的全 文索引引擎,一種適合不同語種的全文搜索引擎,具有存儲空間小,索引速度和查詢速度快等特點。系統已經實現通過語義樹的索引全文,并提供相關的服務。
參考文獻
[1] 關佶紅,許紅儒,周水.Web 服務搜索技術綜述[J].計算機科學與探索, 2010(5)
[2] 張亮,尹存燕,陳家駿.基于語義樹的中文詞語相似度計算與分析[J].中文信息學報, 2010, 24(6)
[3] 王青.基于語義網的語義搜索服務交互模式研究與應用[D].北京:北京郵電大學碩士論文, 2011
來自:http://www.techug.com/full-text-search-and-full-sentences-search