一點資訊田明軍:深度融合搜索+個性化推薦背景下的興趣引擎構架
由InfoQ中國團隊推出,面向高端技術管理者和架構師的全球架構師峰會(ArchSummit)日前在北京國際會議中心舉行。來自騰訊、滴滴出行、一點資訊等 互聯網 企業的技術專家受邀出席并做主題演講。
一點資訊高級技術總監田明軍發表主題演講
在本次大會上,一點資訊高級技術總監田明軍詳細詮釋了深度融合搜索和推薦引擎對獲取用戶閱讀興趣、實現信息精準分發的必要性,并以一點資訊為例,從技術框架和產品理念角度,分享了興趣引擎將二者有機融合的心得。
他認為,搜索和推薦兩種獲取信息的途徑和體驗缺一不可。一點資訊的興趣引擎系統通過結合了用戶搜索行為所觸及的全網數據,不斷學習用戶的興趣再進行推薦,并由用戶主動“訂閱”深化這一興趣,建立興趣之間的連接點,從而打通用戶對信息的主動表達和被動接受兩條通道,使信息獲取更加高效、精準,為全方位提升用戶體驗打下了堅實的基礎。
以下為田明軍演講內容精編版:
大家早上好,非常榮幸今天有機會與大家分享一點資訊關于融合搜索和推薦引擎的一些思考和實踐。
單一的搜索或推薦引擎不利于全面滿足信息分發需求
在移動互聯網時代,搜索和個性化推薦都是用戶獲取信息的兩種重要的方式:搜索通常伴隨著用戶的明確表達,用戶輸入關鍵詞即可找到自己想要的答案;反觀推薦,則是用戶通過產品呈現的內容進行非目標性的興趣瀏覽。但這兩種體驗是不能互替的,單純根據歷史瀏覽記錄進行的個性化推薦并不能了解用戶某時刻的自身想法,而另一方面,也很難根據每天一兩次搜索行為總結出用戶的長期規律。
所以從產品角度來說,搜索和推薦的體驗二者不可或缺、關系緊密。這也是我們致力于實現二者融合的原因。
但需要注意的是,二者在意圖表達方式、訓練模型等方面存在著巨大差異,基于這些差異點,我們不能簡單的用其中一種系統來實現搜索和推薦融合的目的。
搜索和推薦的融合之路應該怎樣走?
對于融合的解決之道,一點資訊選擇在搜索和推薦引擎之間加入了一個基于用戶興趣的任意關鍵詞訂閱環節。通過搜索發現用戶所查詢的答案同時,我們也提煉、擴充出針對用戶興趣的表達,并以此固定沉淀在用戶畫像里。因此,搜索讓個性化推薦層面,增加了一條高效地獲取用戶興趣的途徑。
反過來說,通過推薦系統把共性的有趣、有料的內容呈現給用戶,通過推薦產品收集到用戶更多層面的反饋,從而得到這些內容的普適性特征。基于這些特征的挖掘,我們也能夠對內容有更深刻的了解。而再將搜索體驗中加入并有效利用這些共性特征,也更加強化、提升了搜索的品質。
接下來,我將從興趣引擎的整體系統架構中,選取了幾項關鍵技術點,闡述一點資訊將搜索和推薦內容體驗真正融合的方法:
異構索引引領檢索效率提升 針對搜索+推薦深度優化
為實現深度融合的目的,針對搜索和推薦不同的服務特點和系統性能要求,首先我們提出了異構索引結構。
從上圖可以清楚地看出異構索引的數據來源和組織形式。我們可以從圖的底部可以看到,產生異性索引數據的平臺一分為三:數據平臺、編輯運維平臺和內容平臺。圖片頂部則展示了不同數據的索引構建所采用的不同技術。
內容平臺方面,對外網抓取的內容和 自媒體 平臺生產的內容,我們建立了通用的倒排索引。
在左側的數據平臺,則通過對用戶行為的挖掘,產生基于協同過濾信息的挖掘的推薦列表,以及針對不同人群放置的熱文列表,這部分我們使用通用的KV數據庫存儲。
中間這部分的數據來源于內容平臺和編輯運維平臺,體現了技術與人工的結合。這部分數據存在內容的競爭機制,變化比較靈活,使用了自建的支持排序列表的索引結構。
大家也許會問,為什么會有這樣的區分?這主要是基于優化檢索性能角度的思考。根據關鍵詞對倒排索引進行查詢的方式非常成熟,完全夠能夠滿足搜索系統的需求,然而,傳統的倒排索引卻很難對推薦需求的幾十維以上的特征進行查詢。
在這個基礎上,我們做了兩個優化:一是針對稀疏的頻道,實現了支持WAND(一種介于AND和OR之間的索引查詢操作符)檢索系統加快召回內容的效率;而對于稠密的頭部頻道,則通過開發頻道文章索引庫,維護從頻道到排序內容列表的映射,將線上查詢壓力轉移到線下,提升檢索的效率。
以unified feeder為核心的內容處理平臺解決寫入難題
剛才看到方方面面的索引,接下來,我們必須要解決里面索引的寫入的問題。這就需要在統一的內容處理平臺,把這些內容寫到異構的索引結構里面。
我們的內容處理平臺的核心之一,則是unified feeder系統,這是內容處理平臺與索引系統之間傳遞信息的橋梁。
在unified feeder實際工作中,首先針對不同的輸入數據,我們存入了很多不同的索引庫,這個工作通過統一的配置與模板中心進行管理,可以方便的維護和擴展。此外,unified feeder內部有一個checkpoint系統,在各個關鍵索引內容寫入之后,會向checkpoint系統發送驗證信號,如果任何數據寫入失敗,checkpoint系統會有記錄,系統可以自動進行數據的重新寫入。這種方式有效的解決了系統容錯和異構索引數據一致性的問題。
雙層架構的自適應索引召回突破異構索引挑戰
接下來我將講解在有了以上數據基礎之后,針對上面的搜索和推薦請求,我們如何通過自適應索引召回技術,從不同的索引里面獲取數據?這主要面臨三個方面的技術挑戰——決策需要調用的索引后端、異構索引召回效率,以及可擴展性與開發效率。
上圖是大家整個召回系統的結構框架。通信模塊和存儲模塊集成了一些異步IO通信機制和緩存機制,提升了需要到多個索引庫里面查詢時并發的性能,提升了查詢效率。
另外兩個技術難點的解決主要靠意圖分析和查詢生成器,根據搜索和推薦不同的請求去適配到下游不同的索引庫里面去取內容,同時在系統中的解耦算法和工程方面,提升系統可擴展性和并發工作的效率。
查詢生成過程引入了邏輯層和物理層的概念,物理層即索引池,物理層對外暴露的是異構索引系統的一些具體查詢的API接口,通過這些接口的調用真正完成具體的索引對內容的獲取。而邏輯層更多體現在算法上,通過對查詢的意圖分析,轉化為邏輯層一個或多個從索引中獲取信息的意圖,例如熱點,興趣圖譜等。邏輯層到物理層的映射可以理解類似于搜索引擎里query rewrite的過程,每一邏輯層的意圖被翻譯成若干物理層索引API的調用。
以邏輯層的興趣圖譜為例,通過這個用戶畫像里面的具體興趣,比如,某位用戶對“互聯網思維”感興趣,基于興趣圖譜的獲取,它會把這個興趣點轉化成頻道推薦索引、搜索系統、人工運維的精選池三方面的物理獲取途徑進行查詢,從而召回一些關聯興趣頻道的內容,相關源的內容以及人工需要去展現出的內容。
總之,通過這樣一種把邏輯層和物理層分開的方式,有效分離了算法邏輯設計和實際索引物理訪問之間的耦合,達到了讓二者工作更好并行的效果。
雙模型排序框架滿足搜索+推薦需求
最后和大家快速過一下我們為支持深度融合搜索和推薦,在排序框架和算法產品策略支持方面的一些工作。
在排序框架上,我們現階段主要支持兩種模型更新框架,一是周期性batch更新模型的框架,二是支持online learning的準實時模型更新框架。能夠滿足現有的搜索和推薦方面在排序方面的需求。
工作流服務框架支持算法產品策略靈活調整
在算法產品策略方面,因需求靈活多變、對系統開發效率要求較高,我們引入了一個基于Akka actor model的流式的服務框架,采用全配置驅動的方式動態生成工作流,從而達到對產品邏輯、算法策略方面的快速支持。
今天的分享由于時間原因很快就要結束了,在摸索如何融合搜索引擎和個性化推薦系統我已經走過三四年,這其中有許多我過去的思考以及在一點資訊團隊所做的實踐方面的工作。整個興趣引擎要做的工作還非常復雜且有挑戰性,也非常歡迎對興趣引擎感興趣的同學能夠與我們有一些更多的交流。