文檔字符生成過程中存在編碼識別問題,一般通過啓發式的機器學習手段來識別或者手工選擇方式來解決;
文檔的“單位”:文檔單位即“索引粒度”的設定往往需要根據實際情況的需求設定,粒度過大或者過小都有弊端,粒度過小,詞彙都被包含在篇幅很小的段落中,遺漏了其餘相關的段落後導致正確率高召回率低,粒度過大,正確率低召回率高;
詞條化:將給定的字符序列拆分成一系列的子序列的過程,其中的每個子序列稱作詞條;
詞條類:相同的詞條構成的集合稱作詞條類;
詞條化處理一般會剔除特殊字符或者進行歸一化處理,往往將文檔與查詢的詞語使用相同的方法進行歸一化處理來保證查詢結果的準確性;
去除停用詞:去除意義不大的詞項比如the,to等詞彙,但是需要注意的是並不是所有情況下這些詞語都是應該作爲通用詞而刪除的!記得以前有一個思維定勢,認爲有些詞語在任何時候都應該作爲停用詞去除,這種思路是錯誤的,例子有很多這裏就不一一列舉了;
詞項歸一化:將形式不完全一致的詞項歸納、總結到同一個等價類;
常用的詞項歸一化方法:①採用非歸一化的詞條進行索引②構建索引的時候就對詞進行拓展;
詞條歸一化常遇到的問題以及對策:
① 某些語言系統中變音符號常出現在字符中,並且不同的變音符號代表着不通的含義(如西班牙語),而在檢索信息時候由於輸入速度、用戶惰性等原因並不輸入這些變音符號;
② 大小寫轉換問題,一般檢索系統會將用戶輸入的檢索詞彙進行統一大寫轉小寫或小寫轉大寫,這種方式會將原本具有專有名詞的含義與其他詞項含義等同,如用戶檢索Ferrai(法拉第)轉成小寫後意義已經改變;其次方式是將原本由於語法原因大寫的字母還原小寫;或者採用機器學習中的序列模型,基於多種特徵來實現精確的大小寫決策(truecasting);
③ 英語中特殊的語法習慣等等(歐洲與美國描述時間的方式不同等);
詞幹還原和詞形歸併
都是一種嘗試從特定詞彙尋找源詞項的過程,詞幹還原通常使用啓發式的過程通過取除單詞的前後綴來還原詞項的原本形式,而詞項歸併是一種利用詞彙表和詞形分析來返回原本詞項的過程;
基於跳錶(skip list)的倒排記錄錶快速合併算法
原理:在倒排記錄表中存入若干個指針,若合併過程中發現指針所指結點值不滿足條件則指針前的所有結點可以直接忽略,節約合併時間;其次對於指針縮放的位置、個數是一個需要考慮的問題,常採用的方式是在每個處放置指針,其中P是倒排記錄的長度;
短語查詢
實現短語查詢的常用方式是二元接續詞對,如friends romance countryman則產生了如下二元接續詞對:“friends romance”和“romance countryman”,更長的查詢通過AND組成的布爾查詢來實現,這其中查詢的短語經常會出現含有介詞、虛詞等詞彙,通常進行詞性標註後將這些詞彙進行剔除後效果更好;
存在的問題:
需要掃描整個詞彙表,需要爲每個單詞都建立索引,匹配錯誤可能性較大;
三元借續甚至更高的方法需要大大增加詞彙表的大小;
位置信息索引
文檔存儲方式:文檔ID:(位置1,位置2,… …);
弊端:空間消耗較大;
混合索引機制:
通常對於用戶經常查詢的短語即高頻短語使用短語索引,其他的使用位置索引;