BLAST_(生物信息学)

生物資訊學中，**BLAST**（英語：**B**asic **L**ocal **A**lignment **S**earch **T**ool）它是一個用來比對生物序列的一級結構（如不同蛋白質的胺基酸序列或不同基因的 DNA 序列）的算法。 已知一個包含若干序列的資料庫，BLAST 可以讓研究者在其中尋找與其感興趣的序列相同或類似的序列。 例如如果某種非人動物的一個以前未知的基因被發現，研究者一般會在人類基因組中做一個 BLAST 搜尋來確認人類是否包含類似的基因（通過序列的相似性）。BLAST 演算法以及實現它的程式由美國國家生物技術資訊中心（NCBI）的 Eugene Myers、Stephen Altschul、Warren Gish、David J. Lipman 及 Webb Miller 博士開發 [1]（頁面存檔備份，存於網際網路檔案館）的。

研究者利用 BLAST 來解決的其他問題有：

* 哪個細菌物種包含與胺基酸序列已知的某蛋白質有親緣關係的蛋白質？
* 被定序的一段 DNA 來自哪裡？
* 何種基因編碼的蛋白質表現出剛剛被確定的某種結構或結構模體？

…… 等等。

## 背景

BLAST 是一個被廣泛使用於分析生物資訊的程式，因為它可以兼顧我們在做搜尋時的速度以及搜尋結果的精確度。因為當我們所要搜尋的目標資料庫非常龐大的時候，速度就變成一項很需要考量的因素。在像 BLAST 和 FASTA 這些快速算法被開發之前，我們是使用動態規劃算法來作資料庫的序列搜尋，這真的非常的耗時。BLAST 使用啟發式搜尋來找出相關的序列，在速度上比完全只使用動態規劃大約快上 50 倍左右，不過它不像動態規劃能夠保證搜尋到的序列（Database sequence）和所要找的序列（Query sequence）之間的相關性，BLAST 的工作就是盡可能找出資料庫中和所要查詢的序列相關的資訊而已，精確度稍微低一點。此外，BLAST 比 FASTA 更快速，因為 BLAST 只對比較少出現或是較重要的一些關鍵字作更進一步的分析，而 FASTA 是考慮所有共同出現在所要搜尋的序列和目標序列的字。從下面介紹的演算法可以更進一步的瞭解。

## 算法

這邊我們以蛋白質對蛋白質序列搜尋所用的程式 BLASTP 之實做的步驟，來了解 BLAST 這程式的主要思想。

1. **移除 Query 序列中之低複雜度以及有串接重複現象的區域** 
低複雜度是指由很少種類的元素（如胺基酸）所組成的一個區域；而串接重複現象是指在一個 Query 序列中，有兩段串連的區域它們組成的方式一模一樣。這兩種在序列中的區域可能會讓 BLAST 找出一些雖然分數夠高，但是其實和 Query 序列並不相關之序列，所以在我們執行搜尋之前，要先把 Query 序列中的這兩種區域濾掉。BLAST 的實際作法是，它會把這些區域用符號代替，並且在搜尋的時候忽略這些符號。蛋白質序列中，就用 X 符號標示；而 DNA 序列中，則用 N 符號標示。低複雜度區域的部份，BLAST 是用一個叫做 SEG（頁面存檔備份，存於網際網路檔案館）的程式來處理蛋白質序列，而用叫做 DUST 的程式來處理 DNA 序列。另一方面，蛋白質序列中之串接重複現象的區域則是使用 XNU 來處理。
2. **將 Query 序列中每 k 個字的組合做成一個表** 
以 k=3 為例（DNA 序列中，我們則常以 k=11 為例），我們 "**依序**" 將 Query 序列中每 3 個字的組合視為一個**字組**，並將這些字組列在一張字組表上，直到 Query 序列中最後一個字也被收入進表上為止。由圖一可以更清楚的了解整個作法。
3. **列出我們所關心的所有可能之字組** 
這個步驟就是 BLAST 和 FASTA 之間很重要的一點不同處。FASTA 關心所有在第二步中所找出的字組表上的每一個字組，它會去搜尋資料庫中的序列，看看這些序列是否含有這些字組；然而，BLAST 只對**高分**的一些字組有興趣，而字組的分數是由依序比較字組間的每個字，再配合**得分矩陣（substitution matrix 或 scoring matrix）** 所產生的。因此，對於每一個字組而言，可能有 20^3 個 BLAST 可能關心的字組，當然這些字組經過一個門檻分數的篩選後，只有少數的字組會留下，而這些就是 BLAST 真正所關心的字組。舉例來說，若以 BLOSUM62（頁面存檔備份，存於網際網路檔案館）為得分矩陣，則 PQG 分別和 PEG 以及 PQA 比較所得的分數是 15 以及 12 分，若門檻值是 13，則 PEG 會留下來並被用於之後的步驟，而 PQA 則不被考慮。（在 DNA 序列的搜尋中，我們對於匹配的字是加 5 分，不匹配的則是扣 4 分。）
4. **將這些經篩選後剩下的高分字組組織成快速搜尋樹的結構** 
這是為了要讓程式能快速的比對這些高分字組和資料庫中的序列是否有完全匹配（exact match）的情形。
5. **對每個 Query 序列中的字組重複步驟 1 到 4，並得到所有相應的高分字組**
6. **掃瞄資料庫中的序列，看看是否有跟剩下的高分字組完全匹配的情形** 
BLAST 會搜尋資料庫序列中是否有高分字組出現，像是在第三步找出來的 PEG。若掃瞄到有完全匹配的情形發生，那這個完全匹配的位置就會是我們之後要對 Query 序列和資料庫序列做無間隙的區域排比（ungapped local alignment）的起點。
7. **將這些完全匹配的地方擴展為高分序對（high-scoring segment pair, HSP）** 
  * 舊版的 BLAST 會從這個匹配的位置，分別向左右去擴展，直到比對出來的分數開始變小為止。圖 2 闡述了這個概念。
  * 為了更有效率，新版的 BLAST 被開發出來，叫做 BLAST2 或是 Gapped BLAST。為了要維持搜尋的靈敏度，BLAST2 使用比較低的門檻值以留下較多的高分字組，因此第 3 步的高分字組表會變的比較長。接著，如果在圖 3 中以 X 代表的匹配字組是在同一個從左下往右上的對角線上，而且它們的距離是小於一個門檻值 A，則這兩個匹配的位置會被結合成一個更長的區域。最後，這個新的區域會用舊版 BLAST 向左右擴展的方式來延伸成 HSP，而這個 HSP 的分數一樣也是用得分矩陣來評分每一個比對的情形，並將這些分數加總起來，就跟之前找高分字組的方法一樣。
8. **將所有分數夠高的 HSP 列出來** 
所有分數高於某個由經驗法則推測出來的門檻值 S 之 HSP 都將被列出。這個門檻值 S 是由檢視兩個不相關的序列去作大量無間隙的區域排比得來的分數之分佈，進而推測出 S 該怎麼制定以保證被留下來的 HSP 都具有一定程度的意義。
9. **評估這些留下來的 HSP 它們的分數是否具有意義** 
BLAST 會利用 Gumbel extreme value distribution (EVD)（頁面存檔備份，存於網際網路檔案館）這個極值的分佈，來評估每個 HSP 分數的統計意義（已經有人證明兩個不相關的序列去作區域排比時，不考慮 gap 的使用，做出來的分數都會呈現 Gumbel EVD 的情況；考慮 gap 的使用時，該結論尚未被證明）。根據 Gumbel EVD 所推測出來的理論，一個分數 S 大於或等於 Gumbel EVD 裡面某個值 x 的機率是 
 $p\left(S\geq x\right)=1-\exp \left(-e^{-\lambda \left(x-\mu \right)}\right)$ 
，其中 
 $\mu ={}^{\left[\log \left(Km'n'\right)\right]}\!\!\diagup \!\!{}_{\lambda }\;$ 
統計變數 $\lambda $ 和 $\mathrm {K} $ 是由 Query 序列去和大量被混亂排列（Globeal or local shuffling）的一個資料庫序列作無間隙區域排比所形成的 Gumbel EVD，再由這個來評估出這些統計變數。統計變數 $\lambda $ 和 $\mathrm {K} $ 取決於所使用的得分矩陣以及間隙懲罰值（Gap penalties），還有序列的元素組成成份。至於 m』和 n』則分別是 Query 序列和資料庫序列的**有效長度（Effective length）** 。有效長度的由來是因為在兩序列的排比中，如果排比的起點靠近其中一個序列的結尾處時，則這個排比很難有機會形成一個好的排比，這稱為**邊際效應**（[Edge effect http://www.ncbi.nlm.nih.gov/BLAST/tutorial/Altschul-1.html#head7（頁面存檔備份，存於網際網路檔案館）]）。因此，要利用將原始序列的長度經過一些修剪來彌補邊際效應，以達到比較好的統計估測（注意，當序列的長度都大於 200 時，邊際效應通常可被忽略）。被修正過得長度是 
 $m'\approx m-{\frac {\left(\ln {\mathrm {K} mn}\right)}{\mathrm {H} }}$ 
 $n'\approx n-{\frac {\left(\ln {\mathrm {K} mn}\right)}{\mathrm {H} }}$ （注意 n 是所有資料庫中序列長度的總和）, 
其中 $\mathrm {H} $ 是指兩個不相關的序列去作無間隙區域排比後，每一個排比對平均所得的分數，這和我們所使用的得分矩陣密切相關。Altschul 和 Gish 先生提供了我們這些統計變數的參考值，如 $\lambda =0.318$ 、 $\mathrm {K} =0.13$ 、及 $\mathrm {H} =0.40$ ，這邊使用的得分矩陣是 BLOSUM62（頁面存檔備份，存於網際網路檔案館）。使用這些參考值去作統計意義的估測其實不是非常準確。經由以上分析，我們可能找出一個和 Query 序列相關的資料庫序列，接著我們要計算這個資料庫序列的**期望分數 E（Expect score）** ，它的意義是當我們對非常多個不相關序列其中的兩個作無間隙區域排比時，所得的分數會高於這個資料庫序列和 Query 序列之間的 HSP 分數之個數。經由搜尋一個有 D 個序列的資料庫所得之期望分數 E 可由下式得到。 
 $\mathrm {E} \approx 1-e^{-\mathbf {p} \left(\mathbf {S} \geq \mathbf {x} \right)}$ 
甚至當 $\mathbf {p} <0.1$ 時，E 可以由泊松分布更進一步簡化為 
 $\mathrm {E} =\mathbf {p} \mathrm {D} $ 
注意這邊用來估測 HSP 分數（無間隙）的期望分數 E 和最後一個步驟用來估測具有間隙的區域排比分數的期望分數 E 是不一樣的。差別就在是否具有間隙（Gap），所以先前的統計變數都要重新計算。
10. **將一個資料庫序列中的多個 HSP 區域結合成一個更長的排比** 
有時，我們會在一個資料庫序列中找到多個 HSP 區域，然後將它們結合成一個更長的排比序列，這提供 Query 序列和資料庫序列之間相關性的另一個證據。當我們要比較這些結合後的區域之間孰輕孰重時，有兩種方法讓我們選擇。一種叫做 Poisson 法則（Poisson method），另外一種叫做總分法則（sum-of scores method）。假設有兩個新結合出來的區域，它們個別的 HSP 分數分別是（65, 40）和（52, 45）。Poisson 法則是以誰的低分比較高來給予評價，像（52, 45）就比（65, 40）重要，因為 45>40；然而，總分法則就比較重視（65, 40）這組，因為 65+40（105）比 52+45（97）大。舊版的 BLAST 是用 Poisson 法則，而新版的 BLAST 或是 WU-BLAST（頁面存檔備份，存於網際網路檔案館）則是使用總分法則。
11. **顯示 Query 序列和所有之前找到可能相關的資料庫序列之有間隙區域排比**
  * 舊版的 BLAST 只能顯示出 Query 序列和之前找到的 HSP 區域之間的無間隙區域排比，甚至當一個資料庫序列中有多個 HSP 也是一樣，只會分開顯示。
  * 新版的 BLAST 就不像舊版那樣，若一個資料庫序列中有多個 HSP，則它可以將這些 HSP 統統包含進一個較大型的有間隙區域排比。這邊再提醒一次，這裡做出來的有間隙區域排比之分數也是用先前提到的 Gumbel EVD 找出的期望分數 E 來作評估，但這邊的統計變數要考量到間隙懲罰值，因此和之前的期望分數 E 是不一樣的。
12. **列出上一步驟中期望分數 E 低於我們所要求的門檻值之資料庫序列**

## 相關的各種程式

由 NCBI 管理的 BLAST 網站允許任何人使用瀏覽器來在包含大部分新定序的物種的不停更新的 DNA 或蛋白質資料庫中進行相似性搜尋。這個伺服器包含很多程式，最重要的幾個如下：

### 蛋白 - 蛋白 BLAST（blastp）

已知一個蛋白的胺基酸序列，通過這個程式可以找出在用戶選擇的蛋白質資料庫中與其最相似的序列。

### 已轉錄序列 - 蛋白 BLAST（blastx）

已知一段已經轉錄的序列，藉由這個程式對這段序列的 6 個 ORF 對上用戶所選擇的蛋白質資料庫，
比對最相似的序列。其功用可以找出在基因體 DNA（genomic DNA）上轉譯出蛋白質的序列。

### 蛋白 - 已轉錄序列 BLAST（tblastn）

已知一段蛋白質的胺基酸序列，藉由這個程式可將此序列，對用戶所選擇的已轉錄序列資料庫（包含這個資料庫的 6 個 ORF），比對出最相似的序列。

### 已轉錄序列 - 已轉錄序列 BLAST（tblastx）

已知一段已轉錄的序列，藉由這個程式對這已知序列的 6 個 ORF，對上用戶所選擇的已轉錄序列資料庫（亦包含 6 個 ORF），比對出最相似的序列，因為這個程式比對來源的 6 個 ORF，與資料庫的 6 個 ORF，所以會執行相當久。

### 位置相關的迭代 BLAST（PSI-BLAST）

這個程式用來搜尋蛋白質的 "遠親". 首先，一個用戶提交的蛋白質序列的所有 "近親" 的列表被建立起來，然後這些蛋白質被結合在一個作為對序列的某種平均的 "特徵序列" 當中。再然後用這個特徵序列在蛋白質資料庫中進行搜尋，就會找出更大的一組織蛋白質的列表。這個蛋白質列表有一個不同的特徵序列，這個序列被用來迭代地運行上述過程。

通過在搜尋中包含相關的蛋白質，PSI-BLAST 對於尋找已知蛋白進化上的 "遠親" 的靈敏度要比一般的 blastp 高很多。

### PHI-BLAST

Focuses search around pattern (motif)

### megaBLAST

### RPS-BLAST

### IgBLAST

### GEO BLAST

## 參考文獻

## 外部連結

* NCBI-BLAST 首頁（頁面存檔備份，存於網際網路檔案館）
* NCBI-BLAST 教程（頁面存檔備份，存於網際網路檔案館）

## 參見

* 序列比對