Hugging Face 搜尋架構:論文與程式碼
Hugging Face 已為論文與程式碼實作混合搜尋系統,使人工智慧研究更具可及性,結合基於關鍵字的詞法搜尋與基於向量的語意搜尋。此架構確保使用者能透過精確的標題或 arXiv 識別碼找到研究,同時也能取得概念上相關的論文,即使特定關鍵字未出現在論文中。
混合搜尋架構
論文與程式碼使用混合搜尋系統,結合關鍵字搜尋的精確匹配優勢與向量搜尋的語意相似性能力。系統使用 PostgreSQL 資料庫作為快速的詞法基線,並搭配 pgvector 進行密集嵌入(embedding),再以倒數排名融合(Reciprocal Rank Fusion, RRF)演算法整合兩者。
採集流程
針對每筆查詢,系統會執行兩個平行分支:
- 詞法分支: 使用加權的 PostgreSQL 全文搜尋,擷取最多 50 筆候選結果。
- 語意分支: 使用
pgvector透過餘弦距離搜尋,從即時生成的嵌入中擷取最多 50 筆候選結果。
這些結果以加權 RRF 合併,分支權重相等,排名常數為 $k=60$。為維持結果的可重現性,系統確保精確標題與 arXiv ID 始終位於結果最上方,同時透過方法分類法處理導航式查詢(例如「原始的 BERT 論文」)。
技術堆疊與基礎設施
為平衡資料集建構的吞吐量與即時查詢的低延遲需求,Hugging Face 將搜尋基礎設施分為離線與線上兩部分。
離線資料集建構(Hugging Face Jobs)
完整資料集的嵌入被視為批次工作。Hugging Face Jobs 提供可彈性擴展的 GPU 計算能力(特別是 NVIDIA L4 GPU),用於處理論文資料集。流程包含:
- 從 PostgreSQL 快照匯出論文資料至 JSONL 分片。
- 載入
Qwen/Qwen3-Embedding-0.6B的固定版本模型。 - 批次編碼文件,並依文字長度排序以減少填充。
- 使用 Matryoshka Representation Learning(MRL)將向量截斷至 256 維,並套用 L2 正規化。
永久儲存(Hugging Face Storage Buckets)
Storage Buckets 作為資料庫、暫時性 Jobs 與生產索引之間的連結。透過在不可變的執行前置詞下組織資產,並搭配清單與雜湊碼,系統達成:
- 可重現性: 可追溯至特定快照與模型版本。
- 安全重試: 從已完成的分片繼續工作。
- 可控推出: 在原子性激活新版本前,先驗證覆蓋範圍並建立 HNSW 索引。
線上搜尋(Hugging Face Inference Endpoints)
即時查詢透過由 Text Embeddings Inference(TEI)支援的認證 Inference Endpoint 進行嵌入。此端點使用 Qwen3 模型的 query 提示,產生一個正規化的 256 維向量。
為應對端點的「零規模擴展」特性,避免冷啟動時的延遲尖峰,系統實作嚴格的客戶端策略:一秒的生產超時與電路斷路器。若語意端點無法使用或逾時,系統會立即回退至詞法搜尋結果。
嵌入合約與模型選擇
為防止嵌入流程中出現微妙的失敗,Hugging Face 將嵌入格式視為版本化的 API。每篇論文皆以 正規化標題 + "\n\n" + 正規化摘要 的形式編碼。
模型規格:
- 模型:
Qwen/Qwen3-Embedding-0.6B(固定至特定版本)。 - 維度: 256(透過 MRL 選擇,以平衡速度與儲存空間)。
- 正規化: L2 正規化向量。
- 提示: 資料集嵌入使用獨特的
document提示,即時搜尋則使用query提示。
運營洞察與經驗教訓
吞吐量 vs. 延遲
將以吞吐量為導向的工作(Jobs)與對延遲敏感的工作(Inference Endpoints)分離,使系統能獨立優化成本與可用性。
向量維度
使用 Matryoshka 嵌入讓團隊能將維度降至 256。在 5,000 篇論文的試用測試中,此設定在與精確搜尋相比時,Recall@20 達到 0.9955,同時僅需 1024 維向量所需儲存空間的 27%。
增量更新
雖然 Jobs 負責完整重建,但每小時執行一次的增量流程會使用相同的 Inference Endpoint(搭配 document 提示),以批次方式(最多 500 篇)嵌入新增或修改的論文,讓索引保持最新,且無需完整 GPU Job 的開銷。
相關論文功能
由於文件嵌入已儲存在 PostgreSQL 中,單篇論文頁面的「相關論文」功能僅需執行簡單的最近鄰搜尋,無需即時模型推論。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch