您現在的位置是:首頁 > 棋牌

資料處理之搜尋如何命中?

  • 由 人人都是產品經理 發表于 棋牌
  • 2021-08-21
簡介簡單說就是:系統在對使用者輸入的內容無法精確匹配時,會將內容進行切分,使切分後的詞能夠匹配到系統的詞庫

什麼欄位檢索範圍最大

本文主要講解了使用者在搜尋的時候,是怎麼命中的,enjoy~

資料處理之搜尋如何命中?

透過本文你可以瞭解到:

瞭解搜尋過程的基本原理:如何根據關鍵字匹配內容,如何返回搜尋結果,如何將結果展示給使用者;

在搜尋場景下更合理的劃定搜尋範圍(輸入內容命中哪些欄位),提高使用者搜尋效率,提高資料搜尋基線;

提高日常工作中搜索的效率,更快更準地搜到自己想要的東西。

使用者搜尋的過程:使用者輸入關鍵詞,系統根據使用者輸入的內容篩選出系統認為使用者感興趣的資訊,然後按照系統所設定的規則進行排序。整個過程可拆解為三步:分詞、篩選、排序。

在瞭解分詞前先看下搜尋的儲存原理:在系統詞庫和索引庫之間建立關聯,透過使用者輸入的關鍵詞去匹配詞庫,然後拉取索引庫內容展示給使用者。

以在美食網站搜尋“北京最大的火鍋店”為例,索引庫中內容為系統內所有店鋪,每個店鋪包含的欄位有店名、位置、月銷量、評論量、評分等等;詞庫中內容為系統內的詞條,只要使用者輸入的內容能夠匹配到詞條,就可以快速找到詞條對應的索引內容,無法匹配到詞條時就沒有返回結果。每個系統都有自己的詞庫,搜尋的很多最佳化都是集中在詞庫的最佳化上。

資料處理之搜尋如何命中?

一、分詞

分詞是對使用者輸入的資訊進行解讀,是自然語言處理的重要步驟。同機器學習原理一樣,分詞將非結構化的資料轉化為結構化資料,結構化的資料就可以轉化為數學問題了,解決數學問題正是計算機之所長。

1。1 分詞的原因

搜尋系統的詞庫無論如何最佳化、完善都是有限的,但使用者的輸入是沒有限制的。那麼如何把使用者無限制的輸入對應到有限的詞庫並返回結果呢?

這就需要引入一個新的概念——分詞。簡單說就是:系統在對使用者輸入的內容無法精確匹配時,會將內容進行切分,使切分後的詞能夠匹配到系統的詞庫。仍以上圖為例,如果使用者輸入“北京最大的火鍋店”,系統中並沒有這個詞,精確匹配的情況下沒有任何結果,此時會將輸入內容進行切分,於是

“北京最大的火鍋店”——> “北京”、“最大”、“的”、“火鍋店”。

拆解後每個詞就匹配到了相應的內容,排序後就會返回結果。並不是所有的詞都會返回有價值的結果,比如案例中的“的”,幾乎所有的資訊裡面都會含有這個字,因此在系統分詞時會被直接忽略掉。

1。2 分詞的種類、區別

分詞有兩種,中文分詞和英文分詞,二者有著本質的區別。

區別1:分詞方式不同,中文分詞更難更復雜

英文有天然的空格作為分隔符,但中文沒有,如何將一段中文進行拆分是一個難點,切分時斷點不同,造成的結果也不同(即歧義識別),如“我們三人一組”就可以有兩種分詞方式:“我們三人/一組”和“我們/三人一組”。還有一個難點是新詞識別,即識別未在詞典中收錄的詞。

區別2:英文單詞有多種形態

英文單詞存在著豐富的變形和變換,如複數形式,過去式、正在進行式等,為了應對這些複雜的變換,在處理英文時會進行詞形還原和詞幹提取。

詞形還原:does、did、done、doing會透過詞形還原轉化為do;

詞幹提取:cities、children、trees會透過詞幹提取轉化為city、child、tree。

區別3:中文分詞需要考慮分詞粒度的問題

分詞粒度不同,返回的結果也不同,如“北京科學技術研究院”就有多種分法:“北京科學技術研究院”、“北京/科學技術/研究院”、“北京/科學/技術/研究院”。粒度越大,表達的意思就越準確,但是返回的結果也就越少,因此在分詞是要根據不同的場景和要求選擇不同的分詞粒度。

1。3 分詞的方法

① 基於詞典分詞

基於詞典匹配是最早的分詞方法,比較典型的有:正向最大匹配法、逆向最大匹配法、雙向最大匹配法。

(1)正向最大匹配法

step1:匹配時從前往後取詞,取前m個字(m為詞典裡最長的詞的字數)開始掃描;

step2:若這m個詞掃描有結果,則匹配成功,將m個詞切分出來,語句中剩下的詞繼續進行切分;

step3:若這m個詞掃描無結果,則取前m-1個字繼續掃描,每次減一個字,直到詞典命中或剩下1個字;

step4:重複以上步驟,直至語句全部匹配完成。

資料處理之搜尋如何命中?

(2)逆向最大匹配法

匹配時從後往前取詞,其他邏輯和正向相同。

資料處理之搜尋如何命中?

(3)雙向最大匹配法

由於正向最大匹配法和逆向最大匹配法都有其侷限性,因此產生了雙向最大匹配法。即按照正向和逆向分別進行切分,然後進行對比,選取其中一種分詞結果輸出。

對比原則:①如果正反向分詞結果詞數不同,則取分詞數量少的那個;② 如果詞數相同且結果也相同,返回任意一個,如果詞數相同但結果不同,取單字數量較少的那個(單字越少越準確)。

上面提到的幾種切分方法是從不同的角度來處理歧義問題,每種方法只能解決有限類別的歧義問題。隨著詞典的增大,詞與詞之間的交叉更加嚴重,歧義帶來的負面影響也更加嚴重。同時,上面提到的切分方法對於新詞的切分是完全無能為力的。

② 基於統計分詞

基於統計分詞有兩類,第一類是統計取詞法(或無詞典分詞法),把每個詞看做是由字組成的,如果相連的字在不同文字中出現的次數越多,就證明這段相連的字很有可能就是一個詞。

舉例:比如詞a出現的機率為P(a),詞b出現的機率為P(b),a+b這個片語出現的機率為P(a+b),如果P(a+b)>P(a)*P(b),則能證明a+b不是一個隨機出現的組合,要麼是一個新詞,要麼是個片語或者短語。

但這種方法也有一定的侷限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如“這一”、“之一”、“有的”、“我的”、“許多的”等,並且對常用詞的識別精度差,成本大。在實際應用中通常結合詞典分詞的方法使用,既發揮了詞典分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

另一類是基於統計機器學習的方法,在給定大量已經分詞的文字的前提下,利用統計機器學習、模型學習詞語切分的規律(稱為訓練),從而實現對未知文字的切分。這種方法的缺點就是需要有大量預先分好詞的語料作支撐,而且訓練的成本也很高。比較經典的是N元文法模型(N-gram)。

N元模型(N-gram)切詞

基於N元模型的切詞策略是:一段文字存在多種可能的切分結果(切分路徑),將訓練好的N-gram模型進行路徑計算得到最優切分路徑並返回結果。

舉例:對“他說的確實在理”進行切詞。

在N-gram模型的演算法中,每個路徑上的邊都是一個N-gram的機率,於是得到如下機率路徑有向圖:

資料處理之搜尋如何命中?

可能的切分路徑有:他說/的確/實在/理 、他說的/確實/在理、 他說的/確/實在/理、 他/說/的確/實在/理、 他/說的/確/實在/理……

假設隨機變數S為一個漢字序列,W是S上所有可能的切分路徑(如上圖所有從頭至尾的不同路徑)。對於分詞,實際上就是求解使條件機率P(W∣S)最大的切分路徑W*,P(W∣S)即為每條路徑的衡量標準。

至此,分詞任務就轉變成了一個數學問題。

③ 基於序列標註分詞

基於序列標註分詞是把分詞過程視為字在字串中的標註問題(例如將字標註為“首字中間字尾字”或者其他標註方式),當這些標註完成的時候切詞也就自然完成了。這種策略能夠平衡地看待字典詞和新詞(未收錄到詞典的詞)的識別問題,大大簡化了使用門檻,並得到一個相當不錯的切詞結果。如條件隨機場(CRF)、隱馬爾科夫模型(HMM)、最大熵演算法、神經網路分詞模型等。

隱馬爾科夫模型(HMM)切詞

將文字序列按照詞首、詞中、詞尾、單字詞進行標註。

舉例:研究生說的確實在理

資料處理之搜尋如何命中?

當每個字的標註都得出的時候,切詞也就順理成章得完成了。

二、篩選

將使用者輸入的資訊進行切分後,對引庫中的內容進行匹配篩選。判定使用者想要的結果是否被篩選出來,一般會從精確率(Precision)、召回率(Recall)和F1(F1-Measure)值三個維度進行衡量,這也是搜尋最佳化中是關鍵性指標,涉及到人工打分和更高階的最佳化。

精確率:所有搜到的內容裡面,相關的內容的比例。

召回率:所有應該搜到的內容裡面,真正被搜出來的比例。

舉例:假設此時有7個桔子和3個蘋果放在一起,我想篩選出所有的桔子,系統最終篩選出了6個,其中有4個桔子。那麼精確率P=4/6,召回率R=4/7。

F1值:精確值和召回率的調和均值, 也就是:

Q:為什麼會有F1值的存在呢?有精確率和召回率不夠嗎?

A:答案是:不夠!正常情況下我們是期望精確率和召回率越高越好,但這兩者在某些情況下是相互矛盾的。仍以桔子蘋果為例,如果系統只篩選出了1個桔子,那麼精確率就是100%,召回率是1/7就會很低;如果系統一次篩選出了10個,那麼召回率就是100%,精確率就只有70%。

除此之外,還有一個比較容易混淆的概念:準確率(Accuracy),即判斷正確的數目與總數目的比值,其中判斷正確的數目包含篩選出的符合要求的和未篩選出的不符合要求的。

仍以桔子蘋果為例,準確率A=(4+1)/10=50%,即系統正確篩選出的水果(正確識別了4個桔子+正確識別了1個蘋果)與總數的比值。

準確率一般不用於搜尋召回的衡量,原因是若上例中蘋果數量為100萬個,桔子7個時,那麼不管怎麼篩選,準確率都是99。99%+,顯然這是不符合要求的。

三、排序

排序影響著搜尋的結果質量,越往前的結果越容易獲得使用者的點選。好的搜尋不僅僅是把應該搜尋的內容儘可能的搜尋出來,同時還要考慮把最容易吸引使用者的內容展示在前面,因此這裡就涉及到兩個因素:文字資料和業務資料。

3。1 文字資料

文字資料即文字的相關性分數乘以權重。關於如何計算文字的相關性,市面上已經有成熟的開源解決方案,如Lucene演算法。然後根據文字型別給出相應的權重,比如系統中有標題、描述和正文三種文字,根據重要性分別賦予不同權重:標題權重為10,導語權重為5,正文權重為1。

3。2 業務資料

業務資料即資料的分數乘以權重。關於資料的分數是資料具體的值。然後根據業務型別給出相應的權重,比如系統中有評論量、分享數、閱讀量三種資料,根據重要性分別賦予不同權重:評論數權重為10,分享數權重為20,閱讀量權重為1。

舉例:以基於Lucence的Solr系統為例,得分公式如下:

資料處理之搜尋如何命中?

其中Nx為文字分數權重,Mx為文字資料相關性分數,Ky為資料分數權重,Ly為資料分數。

由此可以看出,對文字資料和業務資料賦予的權重直接影響最終的排序結果,如何賦值、賦予何值需要基於對業務的理解和認知,這也是一個搜尋系統設計最核心的部分。

本文由 @墨白 原創釋出於人人都是產品經理。未經許可,禁止轉載

題圖來自Unsplash,基於CC0協議

Top