Hugging Face 搜尋架構:論文與程式碼

Hugging Face 已為論文與程式碼實作混合搜尋系統,使人工智慧研究更具可及性,結合基於關鍵字的詞法搜尋與基於向量的語意搜尋。此架構確保使用者能透過精確的標題或 arXiv 識別碼找到研究,同時也能取得概念上相關的論文,即使特定關鍵字未出現在論文中。

混合搜尋架構

論文與程式碼使用混合搜尋系統,結合關鍵字搜尋的精確匹配優勢與向量搜尋的語意相似性能力。系統使用 PostgreSQL 資料庫作為快速的詞法基線,並搭配 pgvector 進行密集嵌入(embedding),再以倒數排名融合(Reciprocal Rank Fusion, RRF)演算法整合兩者。

採集流程

針對每筆查詢,系統會執行兩個平行分支:

  1. 詞法分支: 使用加權的 PostgreSQL 全文搜尋,擷取最多 50 筆候選結果。
  2. 語意分支: 使用 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

相關