在介紹搜索之前,先介紹兩個概念:信息量和信息量。
(都是用自己認為通俗易懂的解釋。有興趣可以看相關書籍。)
1.1信息是減少不確定性的東西,信息也是增加確定性的東西。
前半句是香農信息定義,後半句是逆香農信息定義。舉個栗子,回想壹下和壹個異性交往的過程。在遇到TA之前,妳並不知道這個人存在於這個世界上。後來,妳看到了TA的樣子。後來妳了解了TA的性格,口頭禪,往事。然後壹步壹步,妳對TA壹無所知,慢慢熟悉起來。這個時期就是妳不斷獲取TA信息的過程。就是這些信息讓妳完全不確定TA是誰,完全確定TA適合妳。
1.2信息量是信息能減少不確定性的度量,信息量也是信息能增加確定性的度量。
關於信息量的數學描述有很多,但總的來說,可以這麽簡單理解。舉個栗子,目擊者描述嫌疑人。壹個證人的信息是“他是壹個人”。證人B的信息是“TA是壹個高中男生”,證人C的信息是“TA是壹個高中生,長發大概170。”d證人的留言是“我認識他,他是陳浩南,學校的肩膀”。我們直觀地感受到信息量之間的關系:a
本地男性比例為50%,本地高中男生比例為8%,本地高中男生長發約170的比例為4%,本地手帕名為陳浩南的比例為0.0001%。因為P(A)>P(B)>P(C)>P(D),所以信息量的關系是:a
2.搜索的產品邏輯
搜索滿足了用戶快速找到感興趣內容的需求。用戶輸入查詢,搜索系統根據用戶輸入的信息篩選出系統認為用戶感興趣的內容,並按照系統識別的重要程度依次顯示。請註意這個表達。簡而言之,搜索可以分為三個步驟。
步驟1:用戶輸入信息的解釋
步驟2:根據用戶輸入信息過濾內容。
第三步:對過濾後的結果進行排序。
要了解這三個步驟在搜索系統中是如何完成的,我們首先要知道搜索服務器是如何存儲信息的。
3.搜索數據的存儲原則
上圖中,假設我們做了壹個新聞網站,那麽它的結構就是下圖。內容簡化,假設壹條新聞只有標題、導語和正文。數據只是閱讀數,評論數,分享數。
圖1-1
差不多就是上圖右邊的結構了。右邊是新聞內容的存儲:就像圖書館裏的書壹樣,按照方便查找的順序整齊排列(這種存儲結構的名字叫做index,是來自圖書館的語言)。左邊是詞庫:只要壹個搜索的輸入詞能匹配詞庫,就能快速找到詞庫對應的內容。
每個搜索系統都有自己的詞庫,不能對應分詞的搜索行為是不會有結果的。每個搜索系統都會根據不同的目標用戶有相應的詞庫,就像字典壹樣。冶金詞典和生物詞典的詞條不壹樣,知乎和淘寶的詞庫也不壹樣。搜索的很多優化都集中在詞庫的優化上。
簡單總結壹下,搜索的存儲原則是:壹個系統的詞庫,壹個排列整齊的內容索引數據庫,系統詞庫和內容索引數據庫可以快速關聯。
在這個搜索系統的存儲結構的基礎上,我們所說的三個搜索步驟將依次進行。
4.步驟1:用戶輸入信息的解釋
前面說過,搜索詞庫是有限的,但是用戶的輸入是無限的。那麽如何把無限搜索變成有限詞庫,匹配出相應的結果呢?這裏需要引入壹個新概念:分詞,簡單來說就是將輸入的字符串進行拆分。
還以圖1-1中的新聞搜索系統為例。如果用戶輸入的查詢是“中國轉基因食品”,系統裏其實沒有這個詞。如果沒有分詞功能,即使系統中有相應的內容,搜索也會立即結束。分詞的工作原理是在無法準確匹配的情況下,對用戶的輸入進行進壹步拆分。於是我們得到了以下結果。
中國的轉基因食品——中國、德國、轉基因食品。
不是所有的單詞都有信息。如果回憶壹下“得”的結果,幾乎所有的新聞內容裏都會有。回憶這麽多結果顯然是不對的。比如這個查詢中的“的”字,實際上在分詞系統中會被直接忽略。正因為出現在內容中的概率不同,所以壹個詞出現的新聞越多,包含的信息就越少,信息太少的詞就會被忽略,也就是停用詞。同時,字數多的新聞內容會更重要。然後在停用詞被去除之後,結果被進壹步簡化。
“轉基因食品在中國”——“中國”、“轉基因”、“食品”。
經過處理,用戶的非標準查詢轉化為標準詞庫,可以快速找到相應的內容。如圖1-1所示。
5.步驟2:根據用戶輸入信息過濾內容。
經過用戶的查詢解讀,我們其實得到了壹些標準化的詞,這些詞會對應壹些搜索目標內容,然後進行內容篩選。
用戶進行了搜索,搜索出了部分結果。然後將所有內容按照“內容是否相關”和“內容是否回憶”兩個維度分為四個部分。
召回相關內容:被搜索內容中與用戶搜索相關的部分。
召回的無關內容:被搜索內容中與用戶搜索無關的部分。
未被召回的相關內容:未被搜索出來的與用戶搜索相關的那部分內容。
未被召回的無關內容:未被搜索出來的、與用戶搜索無關的那部分內容。
壹般來說,是否過濾掉的決定會從準確率和召回率兩個角度來衡量。
準確率是相關內容在所有搜索到的內容中所占的比例。精確度:
查全率是應該搜索的所有內容的比例。召回率:
準確率和召回率是相互矛盾的指標。需要權衡。最終測量將取2的調和平均值作為目標函數。即f值:
這三個概念是搜索優化的關鍵指標,涉及人工評分和更高級的優化。這裏沒有了。我們只需要記住壹點:不是所有包含用戶查詢關鍵詞的結果都應該被召回。
6.第三步:對過濾後的結果進行排序。
排序影響搜索結果的質量,越靠前的結果越容易獲得用戶的點擊。好的搜索不僅僅是盡可能的搜索出應該搜索的內容,還要考慮最有可能吸引用戶的內容要展示在前面。
搜索排名的基本邏輯是通用的:
用戶輸入的文本被轉換成標準詞庫中的單詞,搜索系統根據每個特定內容是否包含這些單詞來決定是否顯示這些內容,同時,搜索系統根據文本的相關性給這些要顯示的內容打分。最後的排名是根據每個內容的得分。
網上介紹了Lucene的核心排序公式的原理。但實際情況其實更復雜。我們就以之前說的新聞搜索系統為例(為了便於理解,再貼壹次圖)
如果用戶搜索“轉基因”,那麽無論是標題、簡介還是正文中出現轉基因文字,在評分中應該是不同的。顯然,題目中應該有更高的分數。還應該考慮業務數據。比如壹個閱讀量為65438+百萬+的帖子比壹個閱讀量為3的帖子更相關,但顯然閱讀量為65438+百萬+的帖子應該在前面。
其實所有的數據都可以分為兩類,文本和數據。文本用於計算內容的相關度,這部分評分交給Lucene的成熟算法。目前市場上也有成型的開源解決方案。如何處理文本和數據之間的關系是壹個搜索系統設計的核心部分。
以基於Lucene的Solr系統為例,文本和數據配置代碼其實很簡單。At < str name="bf " >和
& ltstr name="bf " >商業數據被賦予權重。
& ltstr name="qf " >文本數據被賦予權重。
在研究了Solr系統的機理後,對Solr核心公式進行了變形,得到了壹個公式:
表示我們給文本的文本分數權重。比如,這個系統中有三種文本:標題、引言和正文。根據重要性,標題權重為10,導語權重為5,正文權重為1。
表示Lucene算法為文本給出的文本相關性分數。這樣會綜合考慮文本的字數,這個搜索詞在所有文本中出現的概率等因素(想進壹步了解原理的同學可以看看TF-IDF和余弦相似度的介紹)。
代表我們賦予數據的數據權重。比如這個系統有三種數據,評論量,分享量,閱讀量。根據重要性,標題評論權重為100,分享權重為200,閱讀權重為1。(壹般會引入時間衰減,這裏暫且不討論)
表示數據的特定值。比如這個系統有三種數據,評論量,分享量,閱讀量。
代表歸壹化系數,也就是說可以給很大的權重,最後的總分會在壹個合理的範圍內。
這次是根據算法指標來判斷的。代表這個分數,用戶輸入查詢提供的信息量。如果輸入查詢提供的信息越多,s就越大。
增加,不變,前壹個系數不變,前壹個系數增加。文本數據對整體得分的貢獻越大,文本數據相對於業務數據的權重就越大。比如妳輸入“北京國慶交通擁堵”,相比“北京國慶交通擁堵”,“北京國慶交通擁堵”提供給系統的信息更多。S值越大,文本在總分中的分數越大。
所以我們可以看到,最終影響排名的是我們給文本數據和業務數據的權重,也就是給文本的權重和給數據的權重。
這兩組數據影響了搜索的最終排名,而這組數據的賦值正是搜索系統對業務的理解。