搜尋引擎設計實用教程(4)-
之四:相關提示功能
中科院軟體所 malefactor
2023年11月
問題二.搜尋引擎拿到使用者的查詢比如」大長今」,使用者查詢log裡面有成千上萬的不同查詢,那麼選擇哪些作為提示呢?這裡面牽涉到乙個字串相似性計算的過程.
第二步,怎麼計算相似性並排序輸出呢? 如果使用者輸入查詢只有乙個單詞,那麼處理起來好像比較簡單,只要使用者查詢log裡面包含這個單詞的字串都被糾出來,然後根據使用者總共查詢這個字串的次數進行排序,選擇前列k個作為相關提示就可以了. 好像很簡單,但是問題真的這麼簡單就被解決了麼? 並非如此.
在給個例子,用「咆哮小老鼠」作為查詢,排在最前面的是匹配了「咆哮,小,老鼠」三個詞彙的相關查詢,次之是匹配了「咆哮,老鼠」的相關查詢,再次是匹配「咆哮,小」的相關查詢,最次是匹配「小,老鼠」的相關查詢,總共輸出92個相關查詢,對於只有乙個匹配的查詢沒有輸出。那麼為什麼是「咆哮,老鼠」》「咆哮,小」》「小,老鼠」呢?原則是什麼呢?
多次實驗後,發現裡面其實有乙個匹配單詞的權重設定問題,拿」咆哮小老鼠」做例子,切分後是《咆哮,小,老鼠》, 假設使用者查詢log裡面有兩個查詢,乙個是」咆哮老鼠論壇」,切分後是《咆哮,老鼠,論壇》.匹配的有兩個單詞(咆哮,老鼠), 另乙個查詢是」咆哮小」,切分後是《咆哮,小》,匹配的也有兩個單詞(咆哮,小),怎麼給這兩個查詢排序呢? 假設每個單詞都有乙個權重設定,比如weight(咆哮)=a weight(小)=b weight(老鼠)=c . 我們計算」咆哮小老鼠」和」咆哮老鼠論壇」的相似性等於重複單詞權重之和,也就是等於a+c,而另外乙個查詢的相似性等於a+b,然後按照順序輸出就行了.所以這裡面關鍵是如何設定單詞的權重.
那麼單詞權重怎麼衡量呢,作為搜尋引擎很容易獲得的乙個單詞權重評價因素是idf,所謂idf,就是說如果乙個單詞如果在很多文件中都出現,那麼這個單詞重要性就很低,比如說」的」,幾乎在每個中文網頁都出現,那麼這個單詞的idf值就非常低.具體計算idf的公式是
idf(word)=log(n/df(word)),
清脆:找到相關網頁約2,390,000篇
鳥: 找到相關網頁約14,000,000篇
叫聲:到相關網頁約3,370,000篇
把這些數值帶入上面的公式計算得出idf權重idf(清脆)=2.39975335 》idf(叫聲)=2.25052135 》idf(鳥)=1.63202321. 所以前列匹配了「鳥」和「叫聲」的權重最大,都包含這兩個查詢按照使用者查詢數目多少輸出,其他的按照包含」清脆」或者」叫聲」的順序輸出.
對於查詢「咆哮小老鼠」來說,我們看看是否成立:
咆哮:找到相關網頁約2,090,000篇
小:找到相關網頁約29,600,000篇
老鼠:找到相關網頁約11,900,000篇
idf(咆哮)=2.45800496
idf(小)=1.30685954
idf(老鼠)=1.70260429
所以權重是 咆哮》老鼠》小
我們看到前面分析輸出順序是:《咆哮,老鼠》 > 《咆哮,小》 > 《小,老鼠》
我們根據上面單詞的權重可以看出:《咆哮,老鼠》=idf(咆哮)+idf(老鼠)=4.15
《咆哮,小》=idf(咆哮)+idf(小)=3.75
《小,老鼠》=idf(小)+idf(老鼠)=3.01
娛樂:找到相關網頁約31,600,000篇
新聞:找到相關網頁約93,500,000篇
報道:找到相關網頁約17,000,000篇
idf(娛樂)=1.27846417
idf(新聞)= 0.80733964
idf(報道)=1.54770233
我們可以**:
最後歸納一下相關查詢的演算法流程:
(1)使用者輸入查詢,分詞;
(2)計算使用者查詢和歷史使用者查詢的相似性,相似性計算是通過計算兩者重複單詞的權重之和來計算的
(3)每個單詞的權重用單詞的idf來計算,大的排序原則根據這個權重進行排序輸出,如果兩個歷史查詢包含相同的重複詞彙集合,那麼查詢權重相同,則按照使用者查詢次數有高到低排序輸出。
後台作業:為了加快查詢反映速度,搜尋引擎不會每次使用者查詢都重新計算相關查詢,可以在後台算好以後儲存在資料庫裡面,使用者查詢的時候直接查詢資料庫輸出,那麼後台如何處理呢?
(1)對於最近一段時間(比如乙個月或者乙個星期)使用者查詢log進行統計分析,選擇列在前列比如1千萬條最頻繁的使用者查詢,
(2)然後對於每個查詢分詞,按照倒排文件進行儲存,比如「新聞報道10000」,則在索引裡面登入「新聞--》新聞報道10000」 「報道-->新聞報道10000」,其他查詢都是如此處理進入索引。
(3)對於使用者查詢,在索引裡面查詢最相似的歷史查詢,並按照上面介紹的方法計算權重,按照權重輸出;
(4)當然,為了更加加快查詢速度,第三步驟的工作也可以預先算好,儲存在資料庫裡面,使用者查詢直接在資料庫裡面訪問。這個資料庫可以每隔一段時間更新一次以反映最新的情況。
!!!!搜尋引擎設計實用教程 以百度為例
之一 查詢處理以及分詞技術 中科院軟體所 張俊林 2005年11月 隨著搜尋經濟的崛起,人們開始越加關注全球各大搜尋引擎的效能 技術和日流量。作為企業,會根據搜尋引擎的知名度以及日流量來選擇是否要投放廣告等 作為普通網民,會根據搜尋引擎的效能和技術來選擇自己喜歡的引擎查詢資料 作為技術人員,會把有代...
搜尋引擎設計實用教程 5 以百度為例
之五 cache結構 中科院軟體所張俊林 2006年1月4日 cache是目前實用的搜尋引擎都必備的功能,因為研究表明使用者的查詢有相當比例 30 40 是重複的,而且大多數重複的使用者查詢會在較短的間隔時間被再次重複訪問.比如說目前 芙蓉姐姐 成為街頭巷議的美談,那麼不僅張三想搜尋 芙蓉姐姐 王二...
引入百度,GOOGLE的搜尋引擎
搜尋 input type hidden name domains value 這裡輸入你的 位址 input type radio name sitesearch value 全球搜尋 input type radio name sitesearch value 這裡輸入你的 位址 checked...