搜索的廣泛流程
搜索,推薦,廣告三兄弟,總體的技術棧,流程框架是比較類似的。主要區別在於業務邏輯上的細微不一樣,可是能夠確定的是,搜索是三兄弟中最重要的。web
搜索的總體流程一樣是召回,排序兩大塊。可是除此以外,從一個完備的搜索引擎來看,要處理的事情遠不止這麼簡單。整體來看,整個搜索能夠看做這麼幾個階段:算法
-
數據預處理 -
query understanding -
召回模塊 -
排序模塊 -
後處理
數據預處理
對於輸入 query 第一步須要預處理爲方便操做的形式,以供後續的步驟能夠有效進行。常見的操做有:微信
-
無效內容的過濾:好比標點符號, emoji 表情,奇怪的字符等。 -
簡繁體轉化。 -
長度截斷。 -
數字轉中文,中文數字轉阿拉伯數字等。 -
譯名,別名等轉化。 -
禁搜詞,禁搜內容等過濾。
在預處理後能夠得到一個比較規整的 query 字段,接下來對相應的 query 進行逐步處理。框架
QU/query understanding
QU 部分的內容並不是一個搜索引擎必須的,但倒是一個想要作好作優秀的搜索引擎必須的。整個 QU 部分的效果會對召回和排序階段都產生巨大影響,然後續的不管召回仍是排序都很依賴這一步的結果。機器學習
QU 部分的技術棧基本都是 nlp 的一些常見操做,整體來講是比 nlp 要簡單的,由於目的很清晰,用戶的 query 確定是但願獲得某類結果。具體主要是如下內容:編輯器
-
分詞。這裏也有常見的不一樣方法,你們能夠針對性去了解對應的內容。 -
糾錯。好比搜索周杰論,咱們可能須要給糾正成周杰倫。 -
詞幹提取和詞形還原。 -
命名實體識別。得到每一個詞的實體類型。 -
意圖識別。分析用戶的搜索意圖,這個也要針對業務進行分析,好比電商搜索,音視頻的搜索,網頁搜素都不相同。
對於整個 QU 部分來講,爲下游的工做起到一個相當重要的做用。這一步的效果在很大程度上決定了接下來的工做能作到的上限,若是你對 query 通過一系列處理,變得不好,那麼後面的搜索步驟也沒法取得好的效果。學習
召回模塊
這裏的方法其實主要是三類:大數據
-
MySQL,Redis 等 keyword 直接精確匹配。這種方法簡單直接,可是侷限性較大。 -
ElasticSearch,也就是咱們常常聽到的 ES,一些不靠搜索吃飯的公司,基本上用 ES 就能夠完成絕大多數需求了。 -
對 query 進行 embedding,而後利用諸如 BM25 等方案進行類似性召回。若是想要作個性化的推薦,就同時也能夠考慮用戶的歷史行爲做爲 embedding 信息,一塊兒加入進來。
排序模塊
有的工程裏面,會將排序再拆分粗排,精排,重排等等,可是本質上都是同樣的,就是將召回拿到的內容,按照用戶輸入的 query 進行一個排序,將用戶可能感興趣的排到前面去。搜索引擎
其實這裏的內容是你們常常看論文比較常見到的部分,各類模型和結構,各類奇思妙想,都基本上是以排序爲主。spa
排序的核心其實主要就是三方面,一個是 query 的 embedding,一個是 item 的embedding,第三個是如何判斷它們之間的相關性。大多數模型的工做也集中在這三點上。
可是就個人經驗來看,實際應用中,簡單的 LR 之類的模型,就能夠解決百分之八九十的問題了。要想精益求精,纔是接下來須要模型的時候。
其它內容
在搜索的過程當中,一些其它輔助功能也很重要。首當其衝的是 suggest,對用戶的輸入進行提示和建議,這部分的內容也能夠和糾錯進行結合。
還有包括大數據分析的部分,畢竟搜索仍是以 bad case 爲驅動的,不像推薦,用戶的容忍度比較高,對於 bad case 的分析和解決也很重要。
總結
這篇文章簡要的介紹了一下一個搜索引擎須要作的工做,可能不接觸這方面的人認爲,搜索主要都在作排序算法方向的研究。經過這篇文章能夠幫助你們瞭解到整個過程須要涉及到的技術,想要嘗試作一些搜索方面工做的小夥伴也能夠對照參考補充加技能點。
總的來講,搜索是一個對算法和工程能力都比較有要求的領域,不管是作算法仍是作開發的朋友,均可以向這方面進行涉獵,也是一個很鍛鍊人的方向。
後面有機會咱們再繼續詳細介紹相關的內容。
本文分享自微信公衆號 - 機器學習與推薦系統(ml-recsys)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。