第五章:計算機視覺-項目實戰之推薦/廣告系統

第二部分:粗排算法

第三節:理解粗排模型之在線部分:在線架構及對雙塔的應用


一、粗排模型從“訓練”走向“線上”的最大挑戰是什麼?

上一節我們完成了粗排雙塔的離線訓練部分(Embedding 學習 + Faiss/HNSW 索引)。
但模型訓練完,並不等於能上線。真正落地粗排系統,需要解決 3 類工業問題:

上線挑戰

解釋

低延遲

單次召回必須 ≤ 10ms,否則精排無法接住

實時性

用户向量要實時更新,“人變→召回變”

可擴展性

Item 數量從百萬→億級,索引要可水平擴展

因此粗排的在線架構必須:

User 實時生成 → ANN 向量檢索 → TopK 粗排結果 → 精排 → 重排 → 策略 → 展示
這就是工業界典型推薦系統 TPS/QPS 路徑。


二、線上粗排整體架構(工程視角)

在線粗排架構可以用一張圖説明:

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
 │ User Feature │ --> │ User Tower   │ --> │ User Vector  │
 └──────────────┘     └──────────────┘     └───────┬──────┘
                                                   │
                                                   ▼
                                         ┌────────────────────┐
                                         │   ANN Vector DB    │
                                         │ (Faiss / Milvus)   │
                                         └───────┬────────────┘
                                                 │  TopK
                                                 ▼
                                     ┌────────────────────┐
                                     │  Candidate Items   │
                                     └────────────────────┘
                                               │
                                               ▼
                                      【下游精排模型】

説明:

模塊

在線職責

User Tower(在線模型服務)

實時生成用户向量(10ms 內)

Item Tower(離線產出)

不在線推理,僅保存向量

ANN 檢索服務

TopK 召回,如 Faiss / Milvus / HNSW / Vespa

粗排本質是將在線流量變向量 → 用向量當鑰匙 → 在向量庫中開鎖找 TopK內容。


三、雙塔在在線系統中的運行機制

角色

運行方式

調用頻率

Item Tower(離線)

離線 Embedding + 索引構建

物料變化才更新

User Tower(在線)

實時推理生成用户向量

每次推薦調用一次

因此:

在線只跑半個模型(User Tower) → 延遲低
ANN 召回只查向量庫 → QPS 極高(百萬級)
物料多也能擴,因為塔解耦

這就是雙塔在線表現優於精排 DNN、DIN、BERT 的核心原因。


四、在線流程用偽代碼還原

def online_recall(user_feature):
    # 1) 用户特徵輸入 → User Tower 得到在線向量
    user_vec = user_model.predict(user_feature)   # < 10ms
    # 2) ANN 檢索 TopK 粗排候選
    scores, item_ids = ann_index.search(user_vec, topk=300)  # < 5~10ms
    # 3) 返回粗排結果 → 進入精排
    return item_ids

粗排必須 < 20ms 完成全部動作,否則上線毫無意義。


五、ANN 選型與使用建議(踩坑經驗)

方案

適用場景

QPS

特點

Faiss (CPU/GPU)

千萬級向量以內

極高

單機強,不適合集羣

Milvus

分佈式召回


企業級最佳選擇

HNSW

內存夠、要求低延遲

極高

搜索質量最好

Faiss + HNSW 混合

多路召回

——

最常見工業配置

經驗結論:

粗排要的是 TopK 足夠準 + 延遲足夠低,而不是精排級別的匹配準確率。


六、線上版本更新策略:如何優雅平滑不倒服務

更新任務

策略

User Tower 更新

A/B Test + 雙模型切換

Item Embedding 更新

Shadow Index + 雙索引切換

ANN Index 更新

異步重建 + 熱切換

要點:

不允許全量下線重建
不允許用户線上向量與物料空間不一致
必須保證所有請求可回溯

粗排系統本質上是 “強工程系統 + 弱模型複雜度” 的架構部分。


七、本節總結

你已理解

狀態

雙塔在線為什麼延遲低


粗排在線架構職責與數據流


User/Item 兩塔如何解耦


ANN 如何服務粗排召回


完整工程化上線方案


一句話總結:

訓練是為了表達能力,而上線是為了延遲與吞吐。粗排雙塔在工程維度碾壓所有表達能力更強的模型,所以它成為工業界標準。