搜索引擎(1)—— 概述與功能架構


1 背景

做搜索引擎有有2年時間了,算是有個基本的入門。決定寫一個系列博客,記錄下自己所認識的搜索引擎,也希望對新入行的朋友有些幫助。

2 概述

搜索與推薦

互聯網上有海量的信息,從互聯網上獲取信息或娛樂,最主要的2個途徑就是搜索推薦

  • 搜索:是用戶主動去查詢與獲取自己想要的信息,用戶有明確的意圖,知道自己想要什么。基本所有app的首頁,都會有一個搜索框,提供搜索功能。

  • 推薦:web或app主動向用戶推薦他可能感興趣的內容,用戶從被推薦的內容中,挑選自己感興趣的內容觀看,是一個偏被動的過程。新浪官網首頁,淘寶首頁等這些頁面提供的大量信息,都是推薦,有些是非個性化的,有些是個性化的。今日頭條的信息流,也是典型的個性化推薦產品。

搜索與推薦的最大差異,就是主動被動

搜索領域

當前搜索推薦都涉及互聯網的各個領域,可以簡單的粗分成這2類

  • 綜合領域:像百度、google、搜狗、360等,搜索全網內容,一般叫大搜。一般搜索的內容是互聯網上的網頁,多數是通過爬蟲獲取到,通過網頁的標題和正文來搜索。
  • 垂直領域:像視頻、音樂、電商、小說等,只搜索特定領域的內容,一般叫垂搜或小搜。垂域搜索的數據,往往是非常結構化的,比如淘寶里的商品,優酷里的影片信息等,與網頁相比,文本偏短。

除此之外,還有像地圖、酒店、機票等各種垂直領域的搜索。每個領域都有自己的一些特殊業務訴求。

搜索功能

一般搜索產品都至少包括2個功能:

  • suggest(智能提示或聯想):用戶在搜索框輸入過程中,下拉列表展現的補全結果,猜用戶想搜索的內容,用戶一旦點擊,就可以立即發起搜索請求,減少用戶輸入動作,提高用戶體驗。
  • 搜索:用戶在搜索框輸入完內容,點擊搜索按鈕或回車,看到完整搜索結果。
  • 相關搜索(related searches):google和百度搜索結果頁的底部,都有展示相關搜索,即搜索query_a的用戶,也喜歡搜索query_b, query_c等。

suggest和相關搜索技術相對簡單些,可以算是搜索的一個子集,所以后面不再多介紹。

幾個基本概念

首先介紹幾個縮寫基本概念:

  • 縮寫

    • query:搜索關鍵字,也叫keyword

    • doc:被搜索的內容,比如一個網頁,一部影響,一件商品,在索引里是一條記錄,都叫一個doc

    • QU:query understanding,查詢理解,即對query進行分析,得到一些用戶意圖相關的信息,輔助檢索

    • index:索引

    • term:query分詞后,每個詞,稱為一個term

  • 正排索引:以doc作為key,以這個doc包含的term或屬性信息作為value,就是常規的數據庫存儲結構。便於通過docId,查詢這個doc的屬性信息。想像一下,如果要檢索出所有包含“apple”的網頁,需要將索引里所有doc遍歷一遍。

  • 倒排索引:與正排相反,以term作為key,以包含這個term的所有doc的ID作為value,構建出的KV結構。如果要檢索出包含“apple”的網頁,只需要以apple作為key,一把就能取出所有包含apple這個詞的網頁。

3. 流程和架構

搜索引擎的在線檢索架構如圖1所示。主要包含以下幾個模塊:查詢理解(QU),基礎檢索,精排(重排),摘要(高亮、飄紅)。除此之外,可能還會有運營干預之類的模塊。

垂搜與大搜的架構基本一致。相比大搜,垂搜在某些模塊上會簡化。比如摘要,垂搜會比大搜簡單很多。

圖1 搜索引擎在線檢索架構
  • 倒排索引:

下面簡單介紹下每個模塊的功能

3.1 檢索服務(編排)

圖1中的檢索服務,實際上是個編排模塊,接受端側的搜索請求,負責整個在線檢索的流程串通,本身沒有實質性的功能。所以,也是其中最簡單的一個模塊。

編排模型會依次調用查詢理解、基礎檢索、精排、摘要這4個模塊,每一個模塊的輸出,作為下一個模塊的輸入。

3.2 查詢理解(QU)

QU的功能,是對用戶輸入的query進行分析,以支撐后續的搜索排序效果。

QU的主要功能包括:

  • 分詞:搜索|是|什么

  • 實體識別:人名、地名、影片名、機構名、歌曲名等等

  • 意圖/需求識別:常見的意圖類型包括:問答、新聞、軟件下載、視頻、小說等

  • 同義詞識別:

  • 查詢改寫:

  • 糾錯:搜索陰晴 -> 搜索引擎

  • 詞權重計算:計算query分詞后,每個term的權重是多少

  • 核心詞選擇:query分詞后,哪些詞是必須命中的,即核心詞只要沒命中這個內容就不會被搜索出來

  • 緊密度分析:query中,相鄰兩個詞之間的緊密關系,是否需要連續命中

QU中很多模塊的效果,依賴於NLP能力,例如分詞、實體識別、意圖識別等。像糾錯、改寫等,也強依賴於用戶的行為日志。

3.3 基礎檢索

基礎檢索(粗排)是做第一輪檢索,從全量索引中召回網頁候選集(例如top1000),並做一個排序。整個搜索的過程,就像是一個漏斗篩選的過程,基礎檢索是第一次篩選,如果沒有被篩選出來,就不會成為本次的搜索結果。

由於基礎檢索涉及的網頁量非常大,對性能要求高,所以一般只用少量最重要的特征,相對簡單的策略來做召回。不亦使用太多的特征和太復雜的模型。

檢索的過程主要分2步,

  • 根據query的核心詞term,從倒排索引中取出倒排拉鏈。每個核心詞對應一個倒排拉鏈,多個核心詞的拉鏈取交,得到基礎檢索的一個候選集合。

  • 對候選集中的每個doc,計算它與query的匹配分數以及doc本身的質量得分,合並后得到一個總的分數並做降序排序。最終,再按一個閾值(例如1000)做截斷,作為基礎檢索的結果。

一個網頁是否能被基礎檢索召回,主要取決於幾個因素:1)doc是否滿足term倒排求交條件;2)doc與query的相關性得分;3)doc本身的質量(靜態特征,與query無關)

3.4 精排

精排是對基礎檢索召回的結果,做一個更精准的排序。由於基礎檢索召回的數量有限(1000條以內),相比粗排,精排需要處理的doc數量少了很多,就可以用更豐富的特征,更復雜的算法模型(LTR),以得到更精准的排序效果。

除了使用排序模型,精排也可以使用一些人工策略來調權。

在精排之后,也會根據運營干預的策略,對結果做進一步的調整干預。

最終,根據翻頁參數,只返回10或15條結果給上游。

3.5 摘要

精排返回的結果,還要補充些信息,才能在終端界面上展示。例如淘寶搜索結果,需要展示商品的圖片、標題、銷量等一系列信息。

一般的垂直領域,只要把doc的幾個屬性展示出來即可。網頁搜索比較特殊,一般網頁正文很長,但是最終展示的只有簡短的三兩行文字片段。這個片段,就是網頁的摘要信息。摘要模塊的主要目標,主要就是從網頁正文中,抽取出匹配最好的那一兩個片段,並把與query匹配的那些詞標紅,讓用戶直觀的看到這個網頁與query的匹配關系。

4 結束語

上述是在線檢索的一個基本流程,每一個模塊展開,都有大量的內容。后續展開詳解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM