以人工智慧為基礎的搜尋演算法是什麼樣的?
三年前,Googled的AlphaGo橫空出世時,我寫了 《AlphaGo、深度學習及SEO》 這篇帖子,在那之後,我一直非常關注人工智慧與搜尋演算法的進展。

我不知道搜尋演算法什麼時候會大規模以AI為基礎,也不知道目前AI技術在搜尋演算法中應用到了什麼程度。由於 目前人工智慧技術的不可解釋性 ,搜尋引擎以AI作為演算法基礎會是非常謹慎的,不然很不容易debug。
不過演算法中的一些模組應用AI是肯定的,以前介紹過 百度的DNN模型和Google的RankBrain演算法 ,都是AI在搜尋演算法中的應用。
那麼完全以人工智慧為基礎的搜尋演算法是什麼樣的?工作原理和流程是什麼?簡單說一下我的理解。
人工智慧的優勢與搜尋
目前實現人工智慧的主流方法是機器學習中的深度學習分支,在這篇帖子裡就不加嚴格區分了。
簡單說,人工智慧是給予系統大量訓練資料,人工智慧自己從中尋找模式和規律。給予AI系統的資料是打了標籤的,或者說是告訴了AI系統結果。比如,在圍棋中,AI系統有了大量歷史棋局資料(後來的Alpha連歷史棋局都不需要了,自我對局的資料就行了),以及這些棋局的輸贏結果,這個結果就是標籤。然後AI系統自我學習棋局盤面與結果(輸贏)之間的關係。
在搜尋中,AI系統有了頁面的大量資料,也就是搜尋引擎本身的索引庫,還需要標籤,也就是要知道哪些頁面是高質量的?針對一個查詢詞,哪些搜尋結果是使用者滿意的?然後AI演算法自己學習頁面特徵(也就是排名因素)和排名之間的關係。
傳統的搜尋演算法是搜尋工程師人工選擇排名因素,人工給予排名因素一定的權重,根據給定公式,計算出排名。這種方法的弊端是,當資料量大了,排名因素多了的時候,調整排名因素的權重是件很困難的事。最初的權重很可能就是根據常識,再加上拍腦袋,具有很大的主觀隨意性。當有幾百個因素,這些因素又互相影響時,調整這些因素的權重就變成混亂、無法預見結果的事了。
而從海量資料中找模式正是AI的擅長。AI可以快速尋找可能的排名因素,調整排名因素權重,自動迭代計算,擬合出排名因素和使用者滿意的搜尋結果之間的計算公式。
通過訓練資料訓練出來的計算公式就是AI搜尋演算法,可以應用於使用者更多的搜尋了。
誰來打標籤?
既然訓練AI搜尋演算法時需要打了標籤的資料,那麼這些標籤資料是從哪來的?這就是搜尋引擎質量評估員的作用了。
前不久Google質量評估指南帖子裡詳細介紹了質量評估員的工作。這些真實使用者(他們不是Google員工),在學習質量評估指南後,Google在評估系統中給評估員真實網站、真實查詢詞資料,評估員進行相關評估,最主要的就是:
- 給頁面質量打分
- 給特定查詢詞的搜尋結果打分
Google的質量評估員很早就存在了,應該不是為了開發AI演算法招募的,而是用來評估傳統演算法質量的。但他們的評估資料剛好可以被人工智慧系統有效使用。
這樣,AI系統就知道,針對某個查詢詞,使用者滿意的搜尋結果是哪些頁面,是按什麼順序排名的。
現在,AI系統有了海量頁面特徵資料,也知道什麼樣的搜尋結果是真實使用者滿意的,下一步就是訓練系統,尋找頁面特徵和搜尋排名之間的關係。
訓練人工智慧搜尋演算法
搜尋引擎可以把打了標籤的搜尋結果資料分成兩組。一組訓練用,一組驗證用。
AI演算法檢查訓練組搜尋結果中的頁面有哪些特徵,這些特徵又應該給予什麼樣的權重,根據什麼樣的計算公式,才能計算出使用者滿意的(打過標籤的)搜尋結果。
與傳統演算法不同的是,需要哪些特徵(排名因素),這些特徵給予多少權重,不是工程師決定的,是AI系統自己尋找和評估的。這些因素也許是工程師想得到、早就在用的,比如:
- 頁面的關鍵詞密度
- 頁面內容長度
- 頁面上有沒有廣告
- 頁面有多少外部連結
- 頁面有多少內部連結
- 頁面有多少以查詢詞為錨文字的連結
- 頁面所在域名有多少外鏈
- 頁面開啟速度多快
- 等等等等,可能有幾百上千個
也許是工程師壓根兒沒想過的,也許有些是表面上看起來毫無關係、毫無道理的,比如:
- 頁面正文用的幾號字
- 文章作者名字是三個字
- 頁面第一次被抓取是星期幾
- 頁面外鏈數是單數偶數
以上只是舉例,為了說明,AI尋找的不是因果關係,而是相關關係。只要AI看到排名好的頁面有哪些特徵就夠了,至於把這些特徵與排名聯絡起來是不是看著有道理,並不是AI關心的,也是不必要關心的。
當然,有些因素可能是負面的,比如域名長度,很可能與高排名是負相關的。
AI系統被訓練的過程就是找到這些排名因素(無論人類看著是否有道理),給予這些因素一定權重,擬合出一個計算公式,剛好能排出使用者滿意的那個搜尋結果。這個擬合過程應該是迭代的,一個權重數值、一個公式不行,自動調整,再次計算,直到比較完美擬合出評估員打過標籤的搜尋結果。這個訓練過程也許要幾天,也許幾個星期,要看資料量。
AI搜尋演算法驗證
被訓練過的AI搜尋演算法就可以應用於其它沒在訓練資料裡的查詢詞了。
首先用前面提到的驗證組資料驗證一下,如果新訓練出來的演算法給出的搜尋結果與驗證組資料(同樣是評估員打過標籤的)吻合,說明演算法不錯,可以上線了。如果AI演算法給出的搜尋結果與驗證組搜尋結果裡的頁面不同,或者頁面基本相同但排序差別很大,可能就要重新訓練AI系統了。
當然,要做到所有查詢詞,AI演算法給出的搜尋結果與評估員打過最滿意標籤的搜尋結果完全一樣,是不大可能的。估計只要排在前面,比如前20名的頁面順序差異在一定的容錯範圍內就可以了。排在越前面,需要越低的容錯率,比如排在第一第二的頁面不對,比排在第三頁之後的頁面不對嚴重多了。
驗證過的演算法就可以上線,接受真實使用者的檢驗了。這裡很可能牽扯到一個SEO們普遍認為與排名有關、但搜尋引擎一直否認的排名因素: 使用者體驗資料是否是排名因素?
很多SEO排名因素統計表明,頁面點選率、跳出率、使用者停留時間、訪問深度與排名有很高的相關性,但Google一直明確否認這些資料是排名因素。當然,對百度來說,點選率顯然是排名因素。
原因很可能就是,搜尋引擎需要用這些使用者體驗資料驗證搜尋演算法質量,如果使用者普遍點選率降低、跳出率提高,說明新上線的演算法有問題,需要調整。雖然搜尋引擎沒有直接使用使用者資料來排名,但演算法的目標就是提高使用者資料,使得這兩者之間高度相關。
新的AI演算法上線後,搜尋引擎監控的使用者資料說明使用者滿意,演算法就成功了,等待下一輪的優化。
以上純屬猜測。