五分鐘了解搜索原理

本篇文章是對(duì)于搜索系統(tǒng)工作原理一個(gè)整體的介紹,對(duì)于原理的理解,是設(shè)計(jì)系統(tǒng)舉重若輕的基礎(chǔ)。
1. 信息和信息量
在介紹搜索之前,先介紹兩個(gè)概念:信息和信息量。
(采用的均是自以為比較通俗易懂的解釋,如果感興趣可以讀相關(guān)書籍)
1.1 信息是減少不確定性的東西,信息也是增加確定性的東西。
前半句是香農(nóng)信息定義,后半句是逆香農(nóng)信息定義。舉個(gè)栗子,回想下,和一個(gè)異性交往的過程。在你遇到TA之前,你不知道這個(gè)世界上有這個(gè)人的存在,后來你看到了TA的樣子,后來你了解了TA的性格、口頭禪,往事。然后一步一步,你對(duì)TA從絲毫不了解,到逐漸熟識(shí)。這期間就是一個(gè)你不斷獲取TA信息的過程,正是這些信息,讓你從完全不確定TA是怎樣的人,到完全確定TA很適合你。
1.2 信息量是一個(gè)信息能減少不確定性的度量,信息量也是一個(gè)信息能增加確定性的度量。
關(guān)于信息量,有很多數(shù)學(xué)的描述,但是通俗來講,可以這么簡(jiǎn)單理解。舉個(gè)栗子,證人描述嫌疑犯。A證人的信息是“他是個(gè)男人”。B證人的信息是“TA是個(gè)高中男生”,C證人的信息是“TA是個(gè)長(zhǎng)發(fā)170左右的高中生?!盌證人的信息是“我認(rèn)識(shí)他,他是學(xué)校的扛把子陳浩南”。我們直覺能感受到信息量的大小關(guān)系為:A<B<C<D。顯然這是正確的。
翻譯為計(jì)算機(jī)可以理解的數(shù)學(xué)邏輯:當(dāng)?shù)啬腥说谋壤?0%,當(dāng)?shù)馗咧心猩谋壤秊?%,當(dāng)?shù)亻L(zhǎng)發(fā)170左右的高中男生的比例是4%,當(dāng)?shù)亟嘘惡颇系目赴炎拥谋壤?.0001%。因?yàn)镻(A)>P(B)>P(C)>P(D),所以信息量的大小關(guān)系為:A<B<C<D。
2. 搜索的產(chǎn)品邏輯
搜索滿足了用戶迅速找到自己感興趣內(nèi)容的需求。用戶輸入一個(gè)query,搜索系統(tǒng)根據(jù)用戶的輸入的信息,篩選出系統(tǒng)認(rèn)為用戶感興趣的內(nèi)容,同時(shí)按照系統(tǒng)認(rèn)定的重要性進(jìn)行排序展示。請(qǐng)注意這個(gè)表述,簡(jiǎn)單而言,搜索可以分為三步。
- Step1:對(duì)用戶輸入信息的解讀
- Step2:根據(jù)用戶輸入信息對(duì)內(nèi)容進(jìn)行篩選
- Step3:對(duì)篩選后的結(jié)果進(jìn)行排序
而要了解這三步怎么在搜索系統(tǒng)中完成,就需要先了解搜索的服務(wù)器怎么存儲(chǔ)信息。
3. 搜索數(shù)據(jù)的存儲(chǔ)原理
上一張圖,假設(shè)我們做了一個(gè)新聞網(wǎng)站,那么它的結(jié)構(gòu)就是下圖。內(nèi)容進(jìn)行了簡(jiǎn)化,假設(shè)一個(gè)新聞,文本只有標(biāo)題,導(dǎo)語,正文。數(shù)據(jù)只有閱讀量,評(píng)論數(shù),分享數(shù)。
圖1-1
差不多就是上圖右邊的這種結(jié)構(gòu)。右邊標(biāo)識(shí)的是新聞內(nèi)容的存儲(chǔ):就像圖書館的書一樣,整整齊齊按順序排好,方便查找(這個(gè)存儲(chǔ)結(jié)構(gòu)的名字叫做索引,就是來自于圖書館的用語)。左邊是詞庫(kù):只要一次搜索的輸入詞能匹配到詞庫(kù),就可以快速的查找詞庫(kù)到對(duì)應(yīng)的內(nèi)容。
每個(gè)搜索系統(tǒng)都有自己的詞庫(kù),無法對(duì)應(yīng)到分詞的搜索行為就會(huì)沒有結(jié)果。每個(gè)搜索系統(tǒng)都會(huì)根據(jù)目標(biāo)用戶的不同,有對(duì)應(yīng)的一套詞庫(kù),就像字典一樣,《冶金專業(yè)詞典》和《生物學(xué)大辭典》收錄的詞條是不同的,知乎的詞庫(kù)和淘寶的詞庫(kù)也不同。搜索的很多優(yōu)化都是集中在詞庫(kù)的優(yōu)化上。
簡(jiǎn)單總結(jié)下,搜索的存儲(chǔ)原理就是:一個(gè)系統(tǒng)詞庫(kù),一個(gè)排列整齊的內(nèi)容索引庫(kù),同時(shí)系統(tǒng)詞庫(kù)和內(nèi)容索引庫(kù)之間可以快速關(guān)聯(lián)。
在這個(gè)搜索系統(tǒng)的儲(chǔ)存結(jié)構(gòu)的基礎(chǔ)上,我們提到的搜索三步驟將依次展開。
4. Step1:對(duì)用戶輸入信息的解讀
前面提到,搜索的詞庫(kù)是有限的,但是用戶的輸入?yún)s是沒有限制的。那么怎么把無限制的搜索轉(zhuǎn)化為有限的詞庫(kù),并且匹配到對(duì)應(yīng)的結(jié)果呢?這里需要介紹一個(gè)新的概念:分詞,簡(jiǎn)單來說就是對(duì)輸入字符串進(jìn)行分拆。
同樣以【圖1-1】中的新聞搜索系統(tǒng)為例。如果用戶輸入的query為“中國(guó)的轉(zhuǎn)基因食物”,系統(tǒng)中其實(shí)沒有這個(gè)詞。如果沒有分詞功能,這個(gè)搜索就會(huì)立即結(jié)束,即使系統(tǒng)里確實(shí)有對(duì)應(yīng)的內(nèi)容。分詞的工作原理是在無法精確匹配的情況下,會(huì)對(duì)用戶的輸入進(jìn)行進(jìn)一步的拆分。于是我們得到了下面的結(jié)果。
“中國(guó)的轉(zhuǎn)基因食物”——“中國(guó)”、“的”、“轉(zhuǎn)基因”、“食物”。
并不是所有的詞都有信息量,如果召回“的‘’的結(jié)果,那么幾乎所有的新聞內(nèi)容里面都會(huì)有這個(gè)字,召回這么多結(jié)果顯然是不對(duì)的。比如這個(gè)query里的“的”,這個(gè)詞實(shí)際上在分詞系統(tǒng)中會(huì)被直接忽略掉。正是因?yàn)槌霈F(xiàn)在內(nèi)容中的概率不同,一個(gè)詞出現(xiàn)的新聞越多,這個(gè)詞的信息量就越小,信息量太小的詞會(huì)被忽略,也就是停用詞。同時(shí)包含信息量越大的詞的新聞內(nèi)容,會(huì)更更要。那么去掉停用詞之后,結(jié)果就進(jìn)一步簡(jiǎn)化。
“中國(guó)的轉(zhuǎn)基因食物”——“中國(guó)”、“轉(zhuǎn)基因”、“食物”。
經(jīng)過處理,用戶非標(biāo)準(zhǔn)的query就被轉(zhuǎn)化為標(biāo)準(zhǔn)的詞庫(kù),就可以快速找到對(duì)應(yīng)的內(nèi)容了。如【圖1-1】所示。
5. Step2:根據(jù)用戶輸入信息對(duì)內(nèi)容進(jìn)行篩選
經(jīng)過對(duì)用戶的query解讀之后,其實(shí)就得到了一些標(biāo)準(zhǔn)化的詞,而這些詞就會(huì)對(duì)應(yīng)一些搜索目標(biāo)內(nèi)容,接下來就是對(duì)于內(nèi)容的篩選。
用戶進(jìn)行了一次搜索,一部分結(jié)果被搜索了出來。那么所有的內(nèi)容根據(jù)“內(nèi)容是否相關(guān)”、“內(nèi)容是否被召回”兩個(gè)維度,就被分為了四部分。
- 召回的相關(guān)內(nèi)容:搜索出來的內(nèi)容中,和用戶搜索相關(guān)的部分。
- 召回的不相關(guān)內(nèi)容:搜索出來的內(nèi)容中,和用戶搜索不相關(guān)的部分。
- 未召回的相關(guān)內(nèi)容:沒有搜索出來的內(nèi)容中,和用戶搜索相關(guān)的部分。
- 未召回的不相關(guān)內(nèi)容:沒有搜索出來的內(nèi)容中,和用戶搜索不相關(guān)的部分。
搜索一般而言,決定是否篩選出來,會(huì)從兩個(gè)角度衡量,準(zhǔn)確率,和召回率。
準(zhǔn)確率就是所有搜到的內(nèi)容里面,相關(guān)的內(nèi)容的比例。準(zhǔn)確率:
召回率就是所有應(yīng)該搜到的內(nèi)容里面,真正被搜出來的比例。召回率:
準(zhǔn)確率和召回率是一對(duì)存在矛盾的指標(biāo)。需要權(quán)衡。最終衡量會(huì)取兩個(gè)的調(diào)和平均數(shù)作為目標(biāo)函數(shù)。即F值:
這三個(gè)概念在搜索優(yōu)化中是關(guān)鍵性指標(biāo),牽扯到人工打分和更高級(jí)的優(yōu)化。這里不展開更多。我們只需要記住一點(diǎn):并不是所有的包含用戶query關(guān)鍵詞的結(jié)果都應(yīng)該被召回。
6. Step3:對(duì)篩選后的結(jié)果進(jìn)行排序
排序影響著搜索的結(jié)果質(zhì)量,越往前的結(jié)果約容易獲得用戶的點(diǎn)擊。好的搜索不僅僅是把應(yīng)該搜索的內(nèi)容盡可能的搜索出來,同時(shí)還要考慮應(yīng)該把最容易吸引用戶的內(nèi)容展示在前面。
搜索排序比較大的基礎(chǔ)邏輯是通用的:
用戶輸入一個(gè)文本轉(zhuǎn)化為標(biāo)準(zhǔn)詞庫(kù)中的詞,搜索系統(tǒng)根據(jù)每個(gè)具體內(nèi)容是否包含這些詞決定是否展示這些內(nèi)容,同時(shí)搜索系統(tǒng)根據(jù)文本相關(guān)性給這些要展示的內(nèi)容一個(gè)分?jǐn)?shù)。而最終排序則根據(jù)每個(gè)內(nèi)容的分?jǐn)?shù)排序。
這個(gè)Lucene的的核心排序公式的原理,網(wǎng)上有介紹。但是實(shí)際的情況其實(shí)更為復(fù)雜。還是以我們之前提到的新聞搜索系統(tǒng)為例(方便理解,再貼一遍圖)
如果用戶搜索“轉(zhuǎn)基因”,那么這個(gè)轉(zhuǎn)基因的文本出現(xiàn)在標(biāo)題中,還是出現(xiàn)在導(dǎo)語中,還是出現(xiàn)在正文中,體現(xiàn)在分?jǐn)?shù)上應(yīng)該是不一樣的。顯然出現(xiàn)在標(biāo)題中應(yīng)該有更高的分?jǐn)?shù)。同樣也需要考慮業(yè)務(wù)數(shù)據(jù),比如一個(gè)閱讀量10萬+的帖子和一個(gè)閱讀量3的帖子相比,即使閱讀量低的帖子文本相關(guān)性更強(qiáng),但是顯然10萬+的帖子應(yīng)該在前面。
其實(shí)所有的數(shù)據(jù)都可以分為兩類,文本和數(shù)據(jù)。文本用于計(jì)算內(nèi)容的相關(guān)性,這部分的打分交給Lucene成熟的算法解決,目前市面上也都有成型的開源解決方案。而怎么處理文本之間的關(guān)系,以及數(shù)據(jù)之間的關(guān)系,才是一個(gè)搜索系統(tǒng)設(shè)計(jì)最核心的部分。
以基于Lucene的Solr系統(tǒng)為例,文本和數(shù)據(jù)配置代碼其實(shí)很簡(jiǎn)單。在<str name=”bf”>和<str name=”qf”>標(biāo)簽中只需要幾行代碼就能完成。
- <str name=”bf”>中是對(duì)于業(yè)務(wù)數(shù)據(jù)賦予權(quán)重。
- <str name=”qf”>中是對(duì)于文本數(shù)據(jù)賦予權(quán)重。
在研究過Solr系統(tǒng)這個(gè)機(jī)制之后,對(duì)Solr核心公式進(jìn)行變形,就得到了一個(gè)公式:
代表針對(duì)文本
,我們給出的文本分?jǐn)?shù)權(quán)重。比如這個(gè)系統(tǒng)中有三種文本,標(biāo)題,導(dǎo)語,正文。根據(jù)重要性,標(biāo)題權(quán)重為10,導(dǎo)語權(quán)重為5,正文權(quán)重為1。
代表針對(duì)文本
,Lucene算法給出的文本相關(guān)性分?jǐn)?shù),這個(gè)會(huì)綜合考慮文本的字?jǐn)?shù),這個(gè)搜索詞在所有文本中出現(xiàn)的概率等等因素(想進(jìn)一步了原理的同學(xué),可以看下TF-IDF與余弦相似性的介紹)。
代表針對(duì)數(shù)據(jù)
,我們給出的數(shù)據(jù)權(quán)重。比如這個(gè)系統(tǒng)中有三種數(shù)據(jù),評(píng)論量,分享數(shù),閱讀量。根據(jù)重要性,標(biāo)題評(píng)論數(shù)權(quán)重為100,分享數(shù)權(quán)重為200,閱讀量權(quán)重為1。(一般而言會(huì)引入
時(shí)間衰減性,這里暫不討論)
代表針對(duì)數(shù)據(jù)
,具體的值。比如這個(gè)系統(tǒng)得三種數(shù)據(jù),評(píng)論量,分享數(shù),閱讀量。
代表歸一化系數(shù),意味著權(quán)重可以給的非常大,最后總的分值也會(huì)在一個(gè)合理的范圍內(nèi)。
是本次根據(jù)算法索引判斷出的。代表本次打分,用戶輸入query提供信息的信息量大小。如果輸入query提供了越多的信息,則S越大。
增加,
不變,
之前的系數(shù)不變,
之前的系數(shù)增加。而
代表文本數(shù)據(jù)的對(duì)整體分?jǐn)?shù)的貢獻(xiàn),則
越大,就說明文本數(shù)據(jù)相比于業(yè)務(wù)數(shù)據(jù)就占有更大的權(quán)重。比如:輸入“北京國(guó)慶交通擁堵”,和輸入“交通擁堵”相比,“北京國(guó)慶交通擁堵”提供給了系統(tǒng)更多的信息,S值更大,文本的打分在總分?jǐn)?shù)匯總占比越大。
所以我們可以看到,其實(shí)最終影響排序的,是我們對(duì)于文本數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)的賦予的權(quán)重,即: 代表針對(duì)文本
的權(quán)重,和
代表針對(duì)數(shù)據(jù)
的權(quán)重。
這兩組數(shù)據(jù),影響了搜索最終的排序,而這組數(shù)據(jù)的賦值,正是搜索系統(tǒng)的對(duì)業(yè)務(wù)的理解。
7. 小結(jié)
本篇文章是對(duì)于搜索系統(tǒng)工作原理一個(gè)整體的介紹,對(duì)于原理的理解,是設(shè)計(jì)系統(tǒng)舉重若輕的基礎(chǔ)。
在這些基礎(chǔ)原理之上,搜索系統(tǒng)還有很多標(biāo)準(zhǔn)功能。那么一個(gè)比較完備的搜索系統(tǒng)應(yīng)該具備怎樣的標(biāo)準(zhǔn)功能?這些功能又有著怎么的原理?移動(dòng)時(shí)代,搜索前端設(shè)計(jì)應(yīng)該如何規(guī)劃?歡迎關(guān)注專欄,繼續(xù)收看下期。
#專欄作家#
潘一鳴,公眾號(hào):產(chǎn)品邏輯之美,人人都是產(chǎn)品經(jīng)理專欄作家。畢業(yè)于清華大學(xué),暢銷書《產(chǎn)品邏輯之美》作者;先后在多家互聯(lián)網(wǎng)公司從事產(chǎn)品經(jīng)理工作,有很多復(fù)雜系統(tǒng)的構(gòu)建實(shí)踐經(jīng)驗(yàn)。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
這篇文章 準(zhǔn)確率與精準(zhǔn)率的概念沒有說清楚,文章中錯(cuò)把精準(zhǔn)率混為了準(zhǔn)確率,
這是干貨無疑了,有視頻么。求詳解
不錯(cuò)
我感覺,分詞之后,分為 中國(guó) 轉(zhuǎn)基因 食物 這三塊時(shí),進(jìn)行相關(guān)詞的索引的時(shí)候,應(yīng)該還要考慮一個(gè)是不同詞搜索結(jié)果與其余詞的匹配度,還有一個(gè)是TF-IDF值吧
f值用來干嘛的
5分鐘,呵呵
在高級(jí)搜索中,全部關(guān)鍵詞、任意關(guān)鍵詞、不包含關(guān)鍵詞輸入后,會(huì)怎么處理?也同樣會(huì)被這么分詞嗎?
會(huì)被分詞
你這里的“準(zhǔn)確率”和“召回率”指的是全局的,是針對(duì)所有搜索的結(jié)果來說的,那么可以推斷出目標(biāo)函數(shù)F也是一個(gè)全局的結(jié)果。我特別好奇的是如何判斷一篇文章是否被召回呢?
人工判定
計(jì)算準(zhǔn)確率?和召回率中A/B/C分別代表什么?
據(jù)我理解,是搜索結(jié)果根據(jù)“是否召回”和“是否相關(guān)”兩個(gè)維度分類而產(chǎn)生的四部分內(nèi)容。
??
寫得清晰