Skip to content

AI 模型訓練資料與自動化爬蟲系統

類別:AI · Data Engineering · iOS技術棧:Python · Selenium · BeautifulSoup · RegEx · PyTorch Lite · iOS · Objective-C


背景

公司核心競爭力來自自家 AI 模型,而模型品質直接取決於訓練資料的量與質。我負責的是整個資料生命週期中最前端的環節:資料蒐集與最終模型落地

這個專案貫穿了從原始資料獲取到模型在 iOS 裝置上實際執行的完整過程。


資料蒐集:合規爬取策略

在開始爬取之前,合規性是第一優先。我的原則是:

  1. 先遵循 robots.txt,確認可爬取範圍
  2. 優先串接官方 API,若有公開 API 就直接使用,更穩定也更合規
  3. 無 API 才考慮爬蟲

針對沒有 API 的網站,我會先分析目標頁面的渲染方式:

  • 靜態頁面 → 使用 requests 直接取得 HTML,速度快、資源消耗低
  • 動態渲染(JavaScript 驅動) → 改用 Selenium 模擬真實瀏覽器行為,處理 SPA 或需要互動操作的頁面
  • 有反爬機制 → 分析機制類型(UA 偵測、行為分析、頻率限制),對症調整策略

資料解析與清洗

拿到原始 HTML 後,進入解析與萃取:

BeautifulSoup 結構解析 先理解頁面 DOM 結構,定位目標節點,再用 BS4 選擇器提取。

正則表達式精準萃取 這是確保資料純淨的關鍵。例如在抓取音檔連結時,我會用精確的 RegEx 只篩選 .wav 格式:

python
import re
wav_links = re.findall(r'https?://[^\s"\']+\.wav', html_content)

這樣可以確保進入訓練流程的資料沒有雜訊,格式完全對齊後端的資料集建置系統。


模型落地:iOS 端部署

模型訓練完成後,由我負責將其部署到 iOS 手機上實際運行。

格式校準 PyTorch 模型對輸入格式非常敏感。在部署前,我嚴格校準了音檔的取樣率、聲道數、位元深度,確保與訓練時的預處理完全一致。輸入格式偏差會直接導致推論結果失準。

Objective-C 底層串接 iOS 的底層 API 是 Objective-C,而 PyTorch Mobile(LibTorch)的 C++ API 需要透過 Objective-C 橋接才能在 iOS 原生環境中調用:

objc
// 載入模型
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"ptl"];
auto module = torch::jit::load(modelPath.UTF8String);

// 執行推論
auto output = module.forward({inputTensor});

這個過程需要同時掌握 PyTorch C++ API 與 iOS 原生開發知識,兩個領域缺一不可。


成果

  • 建立了可重複執行的資料蒐集流程,支援多個資料來源的擴充
  • 資料純淨率高,進入訓練管線的音檔格式一致,減少後處理工作量
  • 模型成功在 iOS 裝置上穩定推論,驗證了從資料工程到邊緣部署的完整能力

反思

這個專案讓我意識到:資料品質決定模型天花板。再好的模型架構,如果訓練資料有雜訊或格式不一致,效果都會打折。而能夠把模型一路落地到手機端運行,對一個工程師來說更是需要跨越多個技術層的挑戰。