數(shù)據(jù)處理之搜索如何命中?
本文主要講解了用戶在搜索的時(shí)候,是怎么命中的,enjoy~
通過本文你可以了解到:
- 了解搜索過程的基本原理:如何根據(jù)關(guān)鍵字匹配內(nèi)容,如何返回搜索結(jié)果,如何將結(jié)果展示給用戶;
- 在搜索場(chǎng)景下更合理的劃定搜索范圍(輸入內(nèi)容命中哪些字段),提高用戶搜索效率,提高數(shù)據(jù)搜索基線;
- 提高日常工作中搜索的效率,更快更準(zhǔn)地搜到自己想要的東西。
用戶搜索的過程:用戶輸入關(guān)鍵詞,系統(tǒng)根據(jù)用戶輸入的內(nèi)容篩選出系統(tǒng)認(rèn)為用戶感興趣的信息,然后按照系統(tǒng)所設(shè)定的規(guī)則進(jìn)行排序。整個(gè)過程可拆解為三步:分詞、篩選、排序。
在了解分詞前先看下搜索的存儲(chǔ)原理:在系統(tǒng)詞庫(kù)和索引庫(kù)之間建立關(guān)聯(lián),通過用戶輸入的關(guān)鍵詞去匹配詞庫(kù),然后拉取索引庫(kù)內(nèi)容展示給用戶。
以在美食網(wǎng)站搜索“北京最大的火鍋店”為例,索引庫(kù)中內(nèi)容為系統(tǒng)內(nèi)所有店鋪,每個(gè)店鋪包含的字段有店名、位置、月銷量、評(píng)論量、評(píng)分等等;詞庫(kù)中內(nèi)容為系統(tǒng)內(nèi)的詞條,只要用戶輸入的內(nèi)容能夠匹配到詞條,就可以快速找到詞條對(duì)應(yīng)的索引內(nèi)容,無法匹配到詞條時(shí)就沒有返回結(jié)果。每個(gè)系統(tǒng)都有自己的詞庫(kù),搜索的很多優(yōu)化都是集中在詞庫(kù)的優(yōu)化上。
一、分詞
分詞是對(duì)用戶輸入的信息進(jìn)行解讀,是自然語言處理的重要步驟。同機(jī)器學(xué)習(xí)原理一樣,分詞將非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù),結(jié)構(gòu)化的數(shù)據(jù)就可以轉(zhuǎn)化為數(shù)學(xué)問題了,解決數(shù)學(xué)問題正是計(jì)算機(jī)之所長(zhǎng)。
1.1 分詞的原因
搜索系統(tǒng)的詞庫(kù)無論如何優(yōu)化、完善都是有限的,但用戶的輸入是沒有限制的。那么如何把用戶無限制的輸入對(duì)應(yīng)到有限的詞庫(kù)并返回結(jié)果呢?
這就需要引入一個(gè)新的概念——分詞。簡(jiǎn)單說就是:系統(tǒng)在對(duì)用戶輸入的內(nèi)容無法精確匹配時(shí),會(huì)將內(nèi)容進(jìn)行切分,使切分后的詞能夠匹配到系統(tǒng)的詞庫(kù)。仍以上圖為例,如果用戶輸入“北京最大的火鍋店”,系統(tǒng)中并沒有這個(gè)詞,精確匹配的情況下沒有任何結(jié)果,此時(shí)會(huì)將輸入內(nèi)容進(jìn)行切分,于是
“北京最大的火鍋店”——> “北京”、“最大”、“的”、“火鍋店”。
拆解后每個(gè)詞就匹配到了相應(yīng)的內(nèi)容,排序后就會(huì)返回結(jié)果。并不是所有的詞都會(huì)返回有價(jià)值的結(jié)果,比如案例中的“的”,幾乎所有的信息里面都會(huì)含有這個(gè)字,因此在系統(tǒng)分詞時(shí)會(huì)被直接忽略掉。
1.2 分詞的種類、區(qū)別
分詞有兩種,中文分詞和英文分詞,二者有著本質(zhì)的區(qū)別。
區(qū)別1:分詞方式不同,中文分詞更難更復(fù)雜
英文有天然的空格作為分隔符,但中文沒有,如何將一段中文進(jìn)行拆分是一個(gè)難點(diǎn),切分時(shí)斷點(diǎn)不同,造成的結(jié)果也不同(即歧義識(shí)別),如“我們?nèi)艘唤M”就可以有兩種分詞方式:“我們?nèi)?一組”和“我們/三人一組”。還有一個(gè)難點(diǎn)是新詞識(shí)別,即識(shí)別未在詞典中收錄的詞。
區(qū)別2:英文單詞有多種形態(tài)
英文單詞存在著豐富的變形和變換,如復(fù)數(shù)形式,過去式、正在進(jìn)行式等,為了應(yīng)對(duì)這些復(fù)雜的變換,在處理英文時(shí)會(huì)進(jìn)行詞形還原和詞干提取。
詞形還原:does、did、done、doing會(huì)通過詞形還原轉(zhuǎn)化為do;
詞干提?。篶ities、children、trees會(huì)通過詞干提取轉(zhuǎn)化為city、child、tree。
區(qū)別3:中文分詞需要考慮分詞粒度的問題
分詞粒度不同,返回的結(jié)果也不同,如“北京科學(xué)技術(shù)研究院”就有多種分法:“北京科學(xué)技術(shù)研究院”、“北京/科學(xué)技術(shù)/研究院”、“北京/科學(xué)/技術(shù)/研究院”。粒度越大,表達(dá)的意思就越準(zhǔn)確,但是返回的結(jié)果也就越少,因此在分詞是要根據(jù)不同的場(chǎng)景和要求選擇不同的分詞粒度。
1.3 分詞的方法
① 基于詞典分詞
基于詞典匹配是最早的分詞方法,比較典型的有:正向最大匹配法、逆向最大匹配法、雙向最大匹配法。
(1)正向最大匹配法
step1:匹配時(shí)從前往后取詞,取前m個(gè)字(m為詞典里最長(zhǎng)的詞的字?jǐn)?shù))開始掃描;
step2:若這m個(gè)詞掃描有結(jié)果,則匹配成功,將m個(gè)詞切分出來,語句中剩下的詞繼續(xù)進(jìn)行切分;
step3:若這m個(gè)詞掃描無結(jié)果,則取前m-1個(gè)字繼續(xù)掃描,每次減一個(gè)字,直到詞典命中或剩下1個(gè)字;
step4:重復(fù)以上步驟,直至語句全部匹配完成。
(2)逆向最大匹配法
匹配時(shí)從后往前取詞,其他邏輯和正向相同。
(3)雙向最大匹配法
由于正向最大匹配法和逆向最大匹配法都有其局限性,因此產(chǎn)生了雙向最大匹配法。即按照正向和逆向分別進(jìn)行切分,然后進(jìn)行對(duì)比,選取其中一種分詞結(jié)果輸出。
對(duì)比原則:①如果正反向分詞結(jié)果詞數(shù)不同,則取分詞數(shù)量少的那個(gè);② 如果詞數(shù)相同且結(jié)果也相同,返回任意一個(gè),如果詞數(shù)相同但結(jié)果不同,取單字?jǐn)?shù)量較少的那個(gè)(單字越少越準(zhǔn)確)。
上面提到的幾種切分方法是從不同的角度來處理歧義問題,每種方法只能解決有限類別的歧義問題。隨著詞典的增大,詞與詞之間的交叉更加嚴(yán)重,歧義帶來的負(fù)面影響也更加嚴(yán)重。同時(shí),上面提到的切分方法對(duì)于新詞的切分是完全無能為力的。
② 基于統(tǒng)計(jì)分詞
基于統(tǒng)計(jì)分詞有兩類,第一類是統(tǒng)計(jì)取詞法(或無詞典分詞法),把每個(gè)詞看做是由字組成的,如果相連的字在不同文本中出現(xiàn)的次數(shù)越多,就證明這段相連的字很有可能就是一個(gè)詞。
舉例:比如詞a出現(xiàn)的概率為P(a),詞b出現(xiàn)的概率為P(b),a+b這個(gè)詞組出現(xiàn)的概率為P(a+b),如果P(a+b)>P(a)*P(b),則能證明a+b不是一個(gè)隨機(jī)出現(xiàn)的組合,要么是一個(gè)新詞,要么是個(gè)詞組或者短語。
但這種方法也有一定的局限性,會(huì)經(jīng)常抽出一些共現(xiàn)頻度高、但并不是詞的常用字組,例如“這一”、“之一”、“有的”、“我的”、“許多的”等,并且對(duì)常用詞的識(shí)別精度差,成本大。在實(shí)際應(yīng)用中通常結(jié)合詞典分詞的方法使用,既發(fā)揮了詞典分詞切分速度快、效率高的特點(diǎn),又利用了無詞典分詞結(jié)合上下文識(shí)別生詞、自動(dòng)消除歧義的優(yōu)點(diǎn)。
另一類是基于統(tǒng)計(jì)機(jī)器學(xué)習(xí)的方法,在給定大量已經(jīng)分詞的文本的前提下,利用統(tǒng)計(jì)機(jī)器學(xué)習(xí)、模型學(xué)習(xí)詞語切分的規(guī)律(稱為訓(xùn)練),從而實(shí)現(xiàn)對(duì)未知文本的切分。這種方法的缺點(diǎn)就是需要有大量預(yù)先分好詞的語料作支撐,而且訓(xùn)練的成本也很高。比較經(jīng)典的是N元文法模型(N-gram)。
N元模型(N-gram)切詞
基于N元模型的切詞策略是:一段文本存在多種可能的切分結(jié)果(切分路徑),將訓(xùn)練好的N-gram模型進(jìn)行路徑計(jì)算得到最優(yōu)切分路徑并返回結(jié)果。
舉例:對(duì)“他說的確實(shí)在理”進(jìn)行切詞。
在N-gram模型的算法中,每個(gè)路徑上的邊都是一個(gè)N-gram的概率,于是得到如下概率路徑有向圖:
可能的切分路徑有:他說/的確/實(shí)在/理 、他說的/確實(shí)/在理、 他說的/確/實(shí)在/理、 他/說/的確/實(shí)在/理、 他/說的/確/實(shí)在/理……
假設(shè)隨機(jī)變量S為一個(gè)漢字序列,W是S上所有可能的切分路徑(如上圖所有從頭至尾的不同路徑)。對(duì)于分詞,實(shí)際上就是求解使條件概率P(W∣S)最大的切分路徑W*,P(W∣S)即為每條路徑的衡量標(biāo)準(zhǔn)。
至此,分詞任務(wù)就轉(zhuǎn)變成了一個(gè)數(shù)學(xué)問題。
③ 基于序列標(biāo)注分詞
基于序列標(biāo)注分詞是把分詞過程視為字在字串中的標(biāo)注問題(例如將字標(biāo)注為“首字中間字尾字”或者其他標(biāo)注方式),當(dāng)這些標(biāo)注完成的時(shí)候切詞也就自然完成了。這種策略能夠平衡地看待字典詞和新詞(未收錄到詞典的詞)的識(shí)別問題,大大簡(jiǎn)化了使用門檻,并得到一個(gè)相當(dāng)不錯(cuò)的切詞結(jié)果。如條件隨機(jī)場(chǎng)(CRF)、隱馬爾科夫模型(HMM)、最大熵算法、神經(jīng)網(wǎng)絡(luò)分詞模型等。
隱馬爾科夫模型(HMM)切詞
將文字序列按照詞首、詞中、詞尾、單字詞進(jìn)行標(biāo)注。
舉例:研究生說的確實(shí)在理
當(dāng)每個(gè)字的標(biāo)注都得出的時(shí)候,切詞也就順理成章得完成了。
二、篩選
將用戶輸入的信息進(jìn)行切分后,對(duì)引庫(kù)中的內(nèi)容進(jìn)行匹配篩選。判定用戶想要的結(jié)果是否被篩選出來,一般會(huì)從精確率(Precision)、召回率(Recall)和F1(F1-Measure)值三個(gè)維度進(jìn)行衡量,這也是搜索優(yōu)化中是關(guān)鍵性指標(biāo),涉及到人工打分和更高級(jí)的優(yōu)化。
精確率:所有搜到的內(nèi)容里面,相關(guān)的內(nèi)容的比例。
召回率:所有應(yīng)該搜到的內(nèi)容里面,真正被搜出來的比例。
舉例:假設(shè)此時(shí)有7個(gè)桔子和3個(gè)蘋果放在一起,我想篩選出所有的桔子,系統(tǒng)最終篩選出了6個(gè),其中有4個(gè)桔子。那么精確率P=4/6,召回率R=4/7。
F1值:精確值和召回率的調(diào)和均值, 也就是:
Q:為什么會(huì)有F1值的存在呢?有精確率和召回率不夠嗎?
A:答案是:不夠!正常情況下我們是期望精確率和召回率越高越好,但這兩者在某些情況下是相互矛盾的。仍以桔子蘋果為例,如果系統(tǒng)只篩選出了1個(gè)桔子,那么精確率就是100%,召回率是1/7就會(huì)很低;如果系統(tǒng)一次篩選出了10個(gè),那么召回率就是100%,精確率就只有70%。
除此之外,還有一個(gè)比較容易混淆的概念:準(zhǔn)確率(Accuracy),即判斷正確的數(shù)目與總數(shù)目的比值,其中判斷正確的數(shù)目包含篩選出的符合要求的和未篩選出的不符合要求的。
仍以桔子蘋果為例,準(zhǔn)確率A=(4+1)/10=50%,即系統(tǒng)正確篩選出的水果(正確識(shí)別了4個(gè)桔子+正確識(shí)別了1個(gè)蘋果)與總數(shù)的比值。
準(zhǔn)確率一般不用于搜索召回的衡量,原因是若上例中蘋果數(shù)量為100萬個(gè),桔子7個(gè)時(shí),那么不管怎么篩選,準(zhǔn)確率都是99.99%+,顯然這是不符合要求的。
三、排序
排序影響著搜索的結(jié)果質(zhì)量,越往前的結(jié)果越容易獲得用戶的點(diǎn)擊。好的搜索不僅僅是把應(yīng)該搜索的內(nèi)容盡可能的搜索出來,同時(shí)還要考慮把最容易吸引用戶的內(nèi)容展示在前面,因此這里就涉及到兩個(gè)因素:文本數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)。
3.1 文本數(shù)據(jù)
文本數(shù)據(jù)即文本的相關(guān)性分?jǐn)?shù)乘以權(quán)重。關(guān)于如何計(jì)算文本的相關(guān)性,市面上已經(jīng)有成熟的開源解決方案,如Lucene算法。然后根據(jù)文本類型給出相應(yīng)的權(quán)重,比如系統(tǒng)中有標(biāo)題、描述和正文三種文本,根據(jù)重要性分別賦予不同權(quán)重:標(biāo)題權(quán)重為10,導(dǎo)語權(quán)重為5,正文權(quán)重為1。
3.2 業(yè)務(wù)數(shù)據(jù)
業(yè)務(wù)數(shù)據(jù)即數(shù)據(jù)的分?jǐn)?shù)乘以權(quán)重。關(guān)于數(shù)據(jù)的分?jǐn)?shù)是數(shù)據(jù)具體的值。然后根據(jù)業(yè)務(wù)類型給出相應(yīng)的權(quán)重,比如系統(tǒng)中有評(píng)論量、分享數(shù)、閱讀量三種數(shù)據(jù),根據(jù)重要性分別賦予不同權(quán)重:評(píng)論數(shù)權(quán)重為10,分享數(shù)權(quán)重為20,閱讀量權(quán)重為1。
舉例:以基于Lucence的Solr系統(tǒng)為例,得分公式如下:
其中Nx為文本分?jǐn)?shù)權(quán)重,Mx為文本數(shù)據(jù)相關(guān)性分?jǐn)?shù),Ky為數(shù)據(jù)分?jǐn)?shù)權(quán)重,Ly為數(shù)據(jù)分?jǐn)?shù)。
由此可以看出,對(duì)文本數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)賦予的權(quán)重直接影響最終的排序結(jié)果,如何賦值、賦予何值需要基于對(duì)業(yè)務(wù)的理解和認(rèn)知,這也是一個(gè)搜索系統(tǒng)設(shè)計(jì)最核心的部分。
作者:墨白,公眾號(hào):UED_family
本文由 @墨白 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
這篇文章的目標(biāo)人群大部分是我們從業(yè)者,一般人可看不下去呢。
前輩 搜索的邏輯在需求文檔如何去描述呢,只需要說是完全匹配還是模糊匹配,返回相關(guān)度最高的結(jié)果嗎
想問下 文中提到的文本相關(guān)性分?jǐn)?shù)是匹配的時(shí)候框架計(jì)算好給的嗎
贊??雖然算法部分看不懂??
沒進(jìn)來之前,以為是教大家如何命中搜索流量的… 看了前1/3發(fā)現(xiàn)原來是講搜索背后的原理的,但還挺有趣… 再往下看1/3,看到數(shù)學(xué)公式開始發(fā)出“臥槽,這是什么”的感慨… 最后1/3我沒看,直接劃到評(píng)論,和大佬問聲好
? ?
有用!