引擎
為 TB 級生物資料查詢而打造
BioQ 不必把 57.4 億個總體基因體蛋白質與 1.49 億筆 UniProt 紀錄匯入資料庫,就能直接回答。以下介紹背後的技術,並附上我們實測的數字。
多數工具查的是已收錄的條目;BioQ 找的是符合條件的對象。
入口網站和 BLAST 類工具回答的是「給我看 X」和「哪些和 X 相似」。而探索型問題是跨資料集的條件,因此引擎會替您把各資料層串接起來。
顯示 UniProt P04637
與我的序列相似的序列
從土壤採樣的蛋白質
含有蛋白質 A 但不含蛋白質 B 的組裝
沒有已知結構域的大型土壤蛋白質家族
所有收錄這個 ID 的資料庫,以及所有根本沒查過的資料庫
自己動手要花多少功夫
我們用兩種做法為 6 個真實問題計時。下載時間依據我們從公開資料庫實測的傳輸速率,實際速度會因您的網路而異。
長條圖採用對數刻度,範圍從 1 毫秒到 10 小時。
您與 1.15 TB 之間的五個層級
您的工作環境
到哪裡都是相同的答案閘道
誰能查詢、能查多少引擎
22 個資料層中 20 個已上線自建索引
≈107 GB,已與原始資料比對驗證公開資料來源
就地讀取,從不整份複製讓它變快的六個索引設計
檔案自帶的 footer 就是索引
1.11 TB 的 parquet 早已存有全部 46,303 個列群組的最小與最大 ID。這段 827 MB 的 footer 變成了 2 MB 的索引。
為大量並行讀取設計的資料佈局
將 1.287 億條代表序列改寫成可隨機存取的儲存格式:每次查找只傳輸 46 KB,而不是最多 242 MB。
在 gzip 內隨機存取
一般 gzip 必須從頭解壓縮。改寫成帶區塊索引的 BGZF 後,任一座標只需一次定位。
一個問題,一個區塊
無法隨機存取的 26 GB gzip 被切成 5,773 個獨立區塊,零筆紀錄遺失,索引為 404 KB。
雙向索引,緊密打包
涵蓋 46.2 億對的 Pfam 蛋白質→結構域、結構域→蛋白質索引,從 66 GB 重新打包成 18 GB。
索引與資料同時寫入
事後補建的稀疏索引花了一個多小時;在建置時同步寫入則不需額外成本。102,074 個小檔案打包成 4 個。
有記憶的同源性檢索
MMseqs2 搭配預先建置的 k-mer 索引。每個結果都以序列、參數與資料庫版本的指紋為鍵存入快取,因此重複檢索會立即回傳,並標明結果的計算時間。
透過網際網路的首次檢索
0.04 s再次執行相同檢索
陽性對照
| Query | E-value | Identity |
|---|---|---|
| HIV reverse transcriptase | 1.3×10⁻¹³ | 36.7% |
| Human hemoglobin α | 1.1×10⁻¹¹ | 99.0% |
| E. coli β-lactamase | 2.6×10⁻³³ | 50.0% |
為什麼我們審慎建立索引
k-mer 索引的大小是其資料庫的 20–46 倍。Swiss-Prot(575,748 條序列)已上線,更大的序列庫正在建立索引。
一個問題,所有資料層,誠實回答
/whereis 平行查詢 9 個資料層,每層各有時限,並如實回報每一層實際做了什麼。透過網際網路的回應時間為 0.12–0.48 秒。
GET /api/v1/whereis?id=MGYP000000149140found結論需要獨立證據
一項關聯至少需要 3 個來自不同採樣批次的組裝。每個答案都附上判定。
沒有背景集,就沒有比值
同樣的重疊,背景集不同,結果可能是 1.000,也可能是 212.5。引擎拒絕猜測背景集。
負載越高,反而越快
在可隨機存取的儲存上,並行數越高,中位延遲反而越低,且零失敗。
每秒查詢數
中位延遲
上線之前,引擎必須答對五個真實問題
- KRAS:依賴性最高的譜系是胰臟
- TP53–MDM2 交互作用分數至少 700
- 從 RefSeq 取回 SARS-CoV-2 棘蛋白基因的鹼基
- 血紅素檢索能找到其同源蛋白
- 陰性對照能證明「不存在」
我們發現、量化並從設計上消除的「靜默錯誤答案」
分段視窗檢索漏掉了 395,688 條序列,卻回答「查無資料」。
現在會檢查每一個列群組;回歸測試 4/4 通過。
19 個 TrEMBL 分片只載入 2 個時,89.2% 的紀錄原本會看似「不存在」。
如實回報涵蓋範圍,絕不假定「不存在」。
一個差一錯誤讓每個蛋白質的結構域都錯位了一列,所有總數卻都對得上。
建置程式自我檢查;讀取程式在載入時驗證長度。
驗證程式在兩邊都是空的時候記錄為「一致」。
驗證程式必須先找到內容,才能進行比較。
實際 212.5 倍的富集被回報成 1.000。
未指定背景集時,不提供比值。
AlphaFold 的「殘基數」其實是原子數,高了 7.8 倍。
改用 Cα 紀錄重建;4/4 對照通過。
每個資料層都遵守的五條規則
- 每個答案都附出處。
- 索引只與原始資料比對,絕不與自身比對。
- 只載入部分時回傳 503 並說明原因,絕不默默回答「無」。
- 建置必須斷言總數。
- 沒有陽性對照,就不算完成。
測試套件可抓出全部 13 個刻意破壞的契約。
下一步:以蛋白質語言模型進行語意檢索
我們用一張 GPU,在 47.6 分鐘內以 ESM-2 (650M) 為全部 575,748 個 Swiss-Prot 蛋白質產生嵌入向量,並在遠緣同源蛋白上與 MMseqs2 比較。
MMseqs2 無法比對的序列對
MMseqs2 能比對的序列對
兩者互補,因此規劃先用 MMseqs2 檢索,再以 ESM-2 重新排序。尚未上線。