結合 PHP?ORT 構建推薦系統的核心思想是:使用 ONNX 格式的機器學習模型,在 PHP 中本地執行推理,實時給出推薦結果。下面是一個完整的架構設計與實現路徑,適合你快速上手。
🎯 場景目標
你想在一個 PHP 網站中實現推薦功能,比如:
- 商品推薦(基于用戶瀏覽歷史)
- 視頻推薦(基于興趣標簽)
- 內容排序(基于點擊率預測)
使用 PHP?ORT 的好處是:本地執行推薦模型推理,延遲低,無需依賴 Python 或外部服務。
🧱 推薦系統架構(使用 PHP?ORT)
┌────────────┐│ 客戶端 │└────┬───────┘│▼┌─────────────────────┐│ PHP 應用后端 ││ ┌─────────────────┐ ││ │ 收集用戶行為數據│ ││ └─────────────────┘ ││ ┌─────────────────┐ ││ │ 調用 PHP-ORT 推理 │ ?───────┐│ └─────────────────┘ │ │└─────────────────────┘ │▲ ││ │┌───────┴──────┐ ┌────┴────┐│ PHP-ORT 加載 │ │ ONNX 推薦模型 │└──────────────┘ └─────────┘
🔧 實現步驟詳解
第一步:準備推薦模型(ONNX)
在 Python 中使用推薦算法(如 LightFM、XGBoost、NeuralCF)訓練模型,并導出為 .onnx
格式:
import skl2onnx
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType# 假設用 XGBoost 訓練好了點擊率模型
model = ... # 訓練好的模型
initial_type = [('input', FloatTensorType([None, 10]))]
onnx_model = convert_sklearn(model, initial_types=initial_type)with open("recommender.onnx", "wb") as f:f.write(onnx_model.SerializeToString())
第二步:PHP 中加載模型
在 PHP 安裝好 php-ort
擴展后,加載模型:
use Ort\Runtime;
use Ort\Model;
use Ort\Tensor;$modelPath = __DIR__ . '/recommender.onnx';$runtime = new Runtime();
$model = $runtime->loadModelFromFile($modelPath);
第三步:構建用戶行為特征輸入(Tensor)
假設你使用的是 10 個特征值(如用戶性別、年齡、最近瀏覽品類、瀏覽時間段等),構造一個輸入張量:
$features = [[1.0, 25.0, 0.0, 1.0, 0.0, 0.5, 0.3, 0.0, 1.0, 0.2] // float32[]
];$inputTensor = Tensor::fromArray($features, [1, 10]); // 1 行 10 列
第四步:執行模型推理
$output = $model->run([$inputTensor]);// 輸出可能是推薦分數、概率等
$resultTensor = $output[0];
$scores = $resultTensor->toArray();$topItemId = array_keys($scores, max($scores))[0];
第五步:推薦結果反饋到業務系統
$recommendedItem = getItemById($topItemId);
return json_encode(['recommend' => $recommendedItem
]);
? 技術優勢
優勢 | 描述 |
---|---|
? 性能好 | SIMD 加速,低延遲推理 |
💡 可嵌入 | 不需要調用外部 Python 微服務 |
🔐 安全 | 本地部署,不暴露模型接口 |
🔁 可擴展 | 模型可以替換 / 多模型共存 |
🛠? 提示與建議
- 使用
ONNX Runtime
導出模型時選擇小模型、輕量網絡(如 XGBoost、MLP); - 輸入張量必須為 float32 類型,PHP 端預處理必須精準;
- 模型更新時無需重啟 PHP,只需重新加載 ONNX 文件;
- 對于并發調用,可用
RuntimePool
復用模型實例,避免重復加載。
🎁 示例模型推薦(可用于試驗)
模型 | 推薦用途 | 是否支持 ONNX 導出 |
---|---|---|
XGBoost | 點擊率預估 / 排序 | ? |
LightFM | 協同過濾推薦 | ? |
MLP | 特征學習推薦 | ? |
CatBoost | 分類推薦 | ? |
📦 最終你會得到
在 PHP 中完成以下任務:
- 接收用戶請求
- 收集用戶畫像特征
- 構造輸入張量并推理
- 輸出推薦結果
不依賴外部服務,全棧純 PHP 完成推薦系統。