要構建一個 Pipeline(流水線),首先需要定義 Pipeline 中的各個 Stage,如指標提取和轉換模型訓練等。
<br/>
有了這些處理特定問題的 Transformer 和 Estimator,我們就可以按照具體的處理邏輯來有序地組織 Stage 并創建一個 Pipeline。
<br/>
流水線由一系列有順序的階段指定,每個狀態的運行是有順序的,輸人的 DataFrame 通過每個階段進行改變。在轉換器階段,`transform()` 方法被調用于 DataFrame 上。對于估計器階段,`fit()`方法被調用來產生一個轉換器,然后該轉換器的 `transform()`方法被調用在 DataFrame 上。下圖簡單說明了文檔處理工作流的運行過程。
:-: 
文檔處理工作流的運行過程
在上圖中,第一行代表流水線處理的三個階段。第一、二個階段是轉換器,第三個邏輯回歸是估計器。底下一行代表流水線中的數據流,圓簡指 DataFrame。
<br/>
`pipeline.fit()` 方法被源 DataFrame 調用,里面包含原始的文檔和標簽。
`Tokenizer.transform()`方法將原始文檔分為詞語,添加新的詞語列到DataFrame 中。
`HashingTF.transform()`方法將詞語列轉換為特征向量,添加新的向量列到DataFrame 中。然后,因為邏輯回歸是估計器,流水線先調用邏輯回歸的 `fit()`方法來產生邏輯回歸模型。如果流水線還有其他更多階段,在將 DataFrame 傳入下一個階段之前,流水線會先調用邏輯回歸模型的 `transform()`方法。整個流水線是一個估計器。所以當流水線的 fit()方法運行后,會產生一個流水線模型,流水線模型是轉換器。流水線模型會在測試時被調用,下圖說明了它的用法。
:-: 
流水線模型圖
在上圖中,流水線模型和原始流水線有同樣數目的階段,然而原始流水線中的估計器此時變為了轉換器。當流水線模型的 transform()方法被調用于測試數據集時,數據依次經過流水線的各個階段。
<br/>
每個階段的 transform()方法更新數據集,并將之傳到下個階段。流水線和流水線模型有助于確認訓練數據和測試數據經過同樣的特征處理流程。以上兩圖如果合并為一圖,可用下圖來表達。
:-: 
管道處理流程