當(dāng)你搜索時(shí),發(fā)生了什么?(上)
編輯導(dǎo)語:正如“萬物皆可百度”這句話所說的,當(dāng)我們遇到生活上、工作上的難題時(shí),第一反應(yīng)就是善用檢索,通過各種搜索軟件解決我們的困惑。你知道,當(dāng)按下搜索鍵時(shí),發(fā)生了什么嗎?
文字較多,故分為上中下三部分,全文目錄如下:
一如“萬物皆可百度”、“萬物無難事,只要肯百度”所言,搜索在我們生活中早已成為習(xí)以為常的事情。畢業(yè)季的我們會(huì)在每日99+的群聊信息中搜索所需的信息;工作一上午后會(huì)點(diǎn)開外賣,找找看今日有沒有想吃的午餐;晚上回家路上,打開社交平臺(tái),搜索看看今天都有什么頭條新聞…
點(diǎn)下搜索的瞬間,結(jié)果已出現(xiàn)在屏幕上,快速又便捷。殊不知在小小的屏幕之下,搜索引擎井然有序地在其巨大的數(shù)據(jù)庫中,完成了檢索、排序…
一、搜索
“當(dāng)你終于將相關(guān)的所有信息搜羅到手后,你會(huì)做什么?”
作家詹姆斯·格雷克在《信息簡(jiǎn)史》中所言,信息洪流中,各種應(yīng)對(duì)策略也隨之出現(xiàn)。方法多種多樣,但歸根結(jié)底,本質(zhì)上可歸為兩類:要么是過濾,要么是搜索。
現(xiàn)時(shí)代,我們每個(gè)人都能力去自由地生產(chǎn)、消費(fèi)信息,海量的信息涌入數(shù)據(jù)庫。心理學(xué)家斯坦利·米爾格拉姆的一項(xiàng)社會(huì)網(wǎng)絡(luò)實(shí)驗(yàn)“六度分隔”中所證,這個(gè)星球上的每個(gè)人之間最多相隔六個(gè)其他人。
信息亦如此,在復(fù)雜的網(wǎng)絡(luò)中,事物與事物之間擁有很高的連通度,但并非所有的連接都是有價(jià)值的,這些異乎尋常的連接度使得信息的搜索變得困難重重,搜索似乎變成了一件無邊無際的事情。
90年代末,有人預(yù)測(cè)在如此龐大的信息中完成檢索是不可能的,但至今,雖然搜索引擎在某些時(shí)候仍不盡人意,但已經(jīng)具備了基本功能。
搜索介紹
維持生命力的方式就是讓“血液”不停的流動(dòng),從古至今人類一直尋求更新、更快的連接交互方式。
搜索加速了信息的流通,打通了海量數(shù)據(jù)之間的自守狀態(tài),信息走向了開放。用戶可以快速的獲取到高價(jià)值的信息,企業(yè)和平臺(tái)也可通過搜索推送給用戶信息。我們可以更準(zhǔn)確的找到結(jié)果,同時(shí)也可以看到更多相關(guān)的內(nèi)容。
搜索是對(duì)互聯(lián)網(wǎng)上的信息資源進(jìn)行搜集、整理、檢索的一項(xiàng)互聯(lián)網(wǎng)技術(shù)。產(chǎn)品的搜索功能發(fā)展至今,提供給用戶的已不僅僅是信息輸入的搜索框,面對(duì)用戶主動(dòng)地推薦,引導(dǎo)用戶消費(fèi)產(chǎn)品中優(yōu)選高質(zhì)量的內(nèi)容。
可以說搜索帶給了我們?nèi)碌臄?shù)字生活,在不勝其擾的信息中,消費(fèi)者依賴于各種檢索,來區(qū)分精華和糟粕。尤其是對(duì)于新手用戶來說,還可以快速地了解到產(chǎn)品中包含的服務(wù)模塊,如下圖,分別為微信、淘寶、知乎的搜索界面。
- 微信為一款手機(jī)通信軟件:通過搜索,提供給用戶的內(nèi)容包括有朋友圈、文章、公眾號(hào)、小程序、音樂、表情、服務(wù);
- 知乎為一款問答社交軟件:提供時(shí)事熱榜、數(shù)碼、影視、科學(xué)、體育等欄目;
- 淘寶為一款線上購物軟件:主要解決用戶的購物需求,在搜索界面可以看到的功能模塊有搜索記錄、熱搜推薦(商品內(nèi)容)。
二、搜索引擎
搜索引擎簡(jiǎn)介
搜索引擎是一門檢索技術(shù),其核心模塊一般包括爬蟲技術(shù)、檢索排序技術(shù)、網(wǎng)頁處理技術(shù)、大數(shù)據(jù)處理技術(shù)、自然語言處理技術(shù)等;根據(jù)用戶需求、一定算法、特定策略為用戶提供高速、高相關(guān)性的信息服務(wù)。
搜索引擎基本結(jié)構(gòu)一般包括:搜索器、索引器、檢索器、用戶接口等四個(gè)功能模塊。搜索引擎通過其結(jié)構(gòu)來實(shí)現(xiàn)搜索工作,基本原理可分為信息采集模塊、查詢表模塊、檢索模塊。
搜索引擎流程
我們從APP、網(wǎng)站、小程序等不同載體中看到的搜索框,實(shí)際只是搜索引擎系統(tǒng)提供給用戶的檢索界面,當(dāng)我們輸入關(guān)鍵詞,點(diǎn)擊查詢后,搜索引擎對(duì)我們輸入文本進(jìn)行復(fù)雜的分析,并從龐大的數(shù)據(jù)庫中獲取所有相關(guān)的信息,根據(jù)一定的排序策略將檢索結(jié)果呈現(xiàn)至用戶界面。
不同搜索引擎有各自的搜索策略,其索引的獲取、query的分析、排序的算法不盡相同,因此在不同產(chǎn)品的搜索引擎搜索相同的query會(huì)獲得不同的結(jié)果;當(dāng)前搜索引擎收集用戶行為數(shù)據(jù),著力個(gè)性化推薦,同一產(chǎn)品不同時(shí)期檢索某一關(guān)鍵詞,也可能會(huì)獲得不同的結(jié)果頁。
具體流程如下:
搜索引擎類型
提及搜索,我們腦海中馬上浮現(xiàn)的大概有百度、谷歌、淘寶等電商平臺(tái)搜索框、微博等社交平臺(tái)搜索框等。這些我們常用的搜索引擎,主要是全文搜索類型以及垂直搜索類型,除此之外,搜索引擎的類型還包括目錄搜索、元搜索檢索、集合式檢索、門戶搜索引擎等等。
- 全文搜索:全文搜索從互聯(lián)網(wǎng)上提取網(wǎng)站信息,對(duì)海量的數(shù)據(jù)進(jìn)行有效的管理和快速檢索,最常用的全文搜索引擎有百度、谷歌等;
- 垂直搜索:垂直搜索引擎是針對(duì)某一行業(yè)的專業(yè)搜索引擎,是搜索引擎的分支和延伸。相較于通用搜索引擎,提供深度、準(zhǔn)確性更高的搜索服務(wù)。垂直搜索引擎的應(yīng)用方向很多,比如企業(yè)庫搜索、供求信息搜索、購物搜索、房產(chǎn)搜索、人才搜索、mp3搜索、圖片搜索、工作搜索、交友搜索等,幾乎各行各業(yè)、各類信息都可以進(jìn)一步細(xì)化成各類垂直搜索引擎。
2.1 分詞
分詞是我們?cè)谒阉鞴δ苤休^常聽到的詞匯之一。
分詞就是對(duì)一段文本,通過規(guī)則或者算法分出多個(gè)詞,每個(gè)詞作為搜索的最細(xì)粒度一個(gè)個(gè)單字或者單詞。分詞的目的主要是為了搜索,尤其在數(shù)據(jù)量大的情況下,分詞的實(shí)現(xiàn)可以快速、高效的篩選出相關(guān)性高的文檔內(nèi)容。
搜索過程中,分詞由搜索引擎內(nèi)的分詞器,執(zhí)行完成。分詞器作用于用戶的輸入內(nèi)容、以及文檔索引建立的這兩部分。前臺(tái)文本內(nèi)容的輸入,來源于不同用戶的需求;索引數(shù)據(jù)的來源可通過業(yè)務(wù)需求決定,自定義設(shè)置。
如在垂類電商業(yè)務(wù)中,我們構(gòu)建索引的原始數(shù)據(jù),便可以是商品的標(biāo)題、詳情、類目信息、品牌信息等,或者是從后臺(tái)建立新的字段,分詞過濾后進(jìn)入索引區(qū),等待檢索。
2.1.1 分詞流程
用戶在搜索引擎界面輸入關(guān)鍵詞,點(diǎn)擊“搜索”按鈕之后,搜索引擎程序開始對(duì)搜索詞進(jìn)行以下處理:分詞處理,根據(jù)情況對(duì)整合搜索是否需要啟動(dòng)進(jìn)行判斷、找出錯(cuò)別字和拼寫中出現(xiàn)的錯(cuò)誤、把停止詞去掉。
分詞的實(shí)現(xiàn)主要依賴分詞器。分詞器為分析器三大構(gòu)成部件之一,文檔的分詞還會(huì)涉及到分詞前的預(yù)處理,以及分詞后的過濾操作。分析器的三構(gòu)件分別為:字符過濾器、分詞器、過濾器,文本在三者間流轉(zhuǎn)順序依次為字符過濾器—分詞器—過濾器。
原始文本在分詞之前,會(huì)流轉(zhuǎn)到字符過濾器,將原始的文本作為字符流接受,通過增、減、改的方式改變字符流。處理后的流進(jìn)入分詞器,按照特定規(guī)則、算法執(zhí)行分詞操作,最后通過不同的過濾器進(jìn)行處理。一個(gè)分析器中可以有0個(gè)或多個(gè)字符過濾器和過濾器,僅有一個(gè)分詞器。
- 字符過濾器:字符過濾器用于字符流傳遞到分詞器之前對(duì)它進(jìn)行預(yù)處理,字符過濾器支持?jǐn)?shù)字的轉(zhuǎn)換;將所有指定的字符串替換成特定的字符串;將任意字符轉(zhuǎn)換為置頂字符。
- 分詞器:不同語言分詞規(guī)則有所差異,英文分詞、中文分詞、拼音分詞的分詞策略各不相同。英文分詞可以根據(jù)空格將單詞分開,中文分詞比較復(fù)雜,可以采用機(jī)器學(xué)習(xí)算法來分詞。
- 過濾器:將切分的單詞進(jìn)行加工。如大小寫轉(zhuǎn)換、去掉停用詞(如“最”、“因?yàn)椤?、“和”)等,該過濾器不同于檢索時(shí)過濾器。
2.1.2 分詞的算法
現(xiàn)有的分詞包括有英文分詞、中文分詞、拼音分詞。中文分詞與英文分詞有所區(qū)別,中文分詞存在更多的難點(diǎn)和歧義點(diǎn),不同分詞策略對(duì)文檔的召回率和精確率影響較大。
英文單詞與單詞之間,在輸入時(shí)就會(huì)通過空格、逗號(hào)、句號(hào)去隔開,較好的去識(shí)別。而中文由字和字構(gòu)成詞,由詞匯構(gòu)成句子。如何去合理切分,且可以精確傳達(dá)用戶本意、需求,是中文分詞的難點(diǎn)。拼音分詞與中文分詞的結(jié)合,更全面地處理了用戶簡(jiǎn)寫、誤輸入等使用場(chǎng)景。
拼音分詞可以用來分析字詞的全拼、首字母全拼、字詞的完整拼寫等,可以進(jìn)行自定義的設(shè)置。拼音分詞配合中文分詞,完整關(guān)鍵詞的過濾流程,達(dá)到高效分詞的目的。
中文分詞算法主要分為三大類,基于詞典的分詞、基于統(tǒng)計(jì)的分詞、基于有序標(biāo)注的分詞。
不同的分詞策略要適應(yīng)于各自的業(yè)務(wù)場(chǎng)景,可能有些業(yè)務(wù)場(chǎng)景需要分詞的精度大于速度,有些場(chǎng)景要求速度大于精度,因此在理解分詞原理的基礎(chǔ)上,如何去配合業(yè)務(wù)的需求,高效地實(shí)現(xiàn)分詞功能,這些都給算法工程師提出了更高的要求。
2.1.3 分詞的使用
在搜索過程中,分詞器使用于文檔的索引流程以及用戶輸入文本的檢索流程中,需注意的是索引流程和檢索流程中所使用的分詞器需一致。
- 索引使用:原始文本預(yù)處理后,使用分詞器將文檔內(nèi)容切分為單個(gè)字詞;
- 檢索使用:用戶輸入文本對(duì)象,分詞器進(jìn)行分詞處理,分詞后建立query對(duì)象,執(zhí)行檢索操作。
中文分詞相較于英文分詞,無空格作為詞之間的分隔符,且中文詞語組合復(fù)雜,歧義較多,一直為自然語言處理中的難點(diǎn)。
2.2 構(gòu)建索引
索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種輔助型數(shù)據(jù)結(jié)構(gòu),構(gòu)建索引有助于對(duì)表中數(shù)據(jù)的查找和排序,檢索時(shí)數(shù)據(jù)庫系統(tǒng)不必掃描整個(gè)表,而是直接定位到符合條件的記錄,大大加快了查詢速度,達(dá)到了以下目的:
- 快速:加快檢索數(shù)據(jù)
- 篩選:盡快找到符合限制條件的記錄
構(gòu)建索引大大縮短查詢時(shí)間的同時(shí),也帶了了一定的成本,創(chuàng)建和維護(hù)索引都需要時(shí)間成本和空間成本,隨著數(shù)據(jù)量的增加其所占用的物理存儲(chǔ)空間也會(huì)隨之增大。數(shù)據(jù)量大、經(jīng)常使用查詢功能,且需要排序優(yōu)化的業(yè)務(wù)情境下,索引的建立還是很有必要的。
索引的構(gòu)建,主要有倒排序索引和正排序索引。倒排序索引是對(duì)關(guān)鍵詞進(jìn)行索引,以求快速得到匹配文檔集;正排序索引對(duì)文檔進(jìn)行索引,方便于排序、過濾、匯總。倒排序索引和正排序索引是搜索引擎的重要數(shù)據(jù)結(jié)構(gòu),之后檢索等的操作都建立在此基礎(chǔ)上。
2.2.1 倒排序索引
1)倒排序索引介紹
倒排索引(Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。
索引是為了更快找到文檔的一種數(shù)據(jù)結(jié)構(gòu),相當(dāng)于圖書中的目錄,用戶根據(jù)目錄可以快速找到所需內(nèi)容。倒排索引不是根據(jù)目錄或編號(hào)來定位內(nèi)容,它是通過文檔中的某個(gè)字、詞語而找到文檔的索引類型,通過立即的單詞標(biāo)示迅速獲取結(jié)果。倒排索引的建立和維護(hù)較復(fù)雜,但查詢快速、便捷、高效,是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。
2)倒排索引的構(gòu)建流程
倒排序索引的構(gòu)建有兩個(gè)表格至關(guān)重要。表一為文檔編號(hào)及文檔內(nèi)容,表二為分詞后關(guān)鍵詞及對(duì)應(yīng)文檔編號(hào)。數(shù)據(jù)的存儲(chǔ)時(shí),將表二拆分為兩個(gè)數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)倒排文件以及關(guān)鍵詞及其偏移量。
搜索最基礎(chǔ)、簡(jiǎn)單的流程便是外部關(guān)鍵詞輸入,表二中查詢到關(guān)鍵詞出現(xiàn)的位置以及文檔編號(hào),最終輸出結(jié)果文檔內(nèi)容。
2.2.2 正排序索引
正排索引(forward index),以文檔編號(hào)為關(guān)鍵字,表中記錄文檔中每個(gè)字的位置信息,查找時(shí)掃描表中每個(gè)文檔中字的信息直到找出所有包含查詢關(guān)鍵字的文檔。正排序索引的查詢往往滿足每個(gè)文檔有序、頻繁的全文查詢和每個(gè)單詞在校驗(yàn)文檔中驗(yàn)證這樣的查詢。
正排索引可以查詢匯總到關(guān)鍵字的屬性、相關(guān)的頻次以及位置等,適用于一些過濾操作以及匯總操作。
比如說搜索 “干飯”時(shí),可以快速查詢出包含“干飯”這個(gè)關(guān)鍵字的文檔,有利于關(guān)鍵字相關(guān)性和權(quán)重的計(jì)算。正排序索引,搜索“干飯”時(shí),搜索引擎需要檢索每一個(gè)文檔中的每一個(gè)關(guān)鍵詞,正排索引適合于一些區(qū)間的索引。在電商的搜索中,有較多的過濾、篩選的選項(xiàng),因此同時(shí)引入正排索引和倒排索引還是很必要的。
2.3 檢索
未完待續(xù)…
【相關(guān)閱讀】
當(dāng)你搜索時(shí),發(fā)生了什么?(中)
當(dāng)你搜索時(shí),發(fā)生了什么?(下)
本文主要是從小白的角度嘗試?yán)斫馑阉饕娴墓ぷ髟砑肮ぷ髁鞒?。初次涉及搜索領(lǐng)域,文中概念、措辭如有偏差,請(qǐng)留言指教,將虛心學(xué)習(xí)更正。
本文由 @大倉鼠 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
這是說的seo吧,還有高質(zhì)量庫,蜘蛛之類的!
是的呢,都和搜索引擎相關(guān)。這里主要是簡(jiǎn)單介紹搜索引擎的工作流程,本部分包括了分詞的介紹和索引構(gòu)建。下面的文章會(huì)講一些構(gòu)建索引后的檢索流程,涉及到query分析和結(jié)果排序。