# TransformersPHP:在 PHP 后端的本地 Transformer 推理
TransformersPHP 可以让你直接在 PHP 应用中通过 ONNX Runtime 运行像 BERT 和 DistilBERT 这样的预训练 Transformer 模型。该库支持本地推理,无需 Python、网络 API 或外部服务。它处理嵌入生成、文本分类和语义搜索任务,响应时间可预测,且数据完全由你掌控。
后端关键优势:无网络调用延迟,模型加载后支持离线模式,保障数据隐私。它支持标准 NLP 任务——从情感分析到语义相似度计算。
要求与环境搭建
上手需要 PHP 8.1+、Composer、FFI 扩展和 ONNX Runtime。建议启用 JIT 以获得更好性能,并适当增加 memory_limit。
项目结构:
/project/
├── app/
│ ├── demo.php
│ ├── semantic-search.php
├── docker/
│ ├── Dockerfile
├── docker-compose.yml
├── composer.json
通过 Docker 安装可简化部署。composer.json 文件内容:
{
"type": "project",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"codewithkyrian/transformers": "~0.6.2"
},
"config": {
"allow-plugins": {
"codewithkyrian/platform-package-installer": true
}
}
}
运行命令:
docker compose build --pulldocker compose up -ddocker compose exec app composer install
Dockerfile 配置了 FFI、ONNX Runtime 1.17.1,以及 PHP 扩展(zip、pdo_mysql、bcmath、ffi 等)。
首个示例:情感分析
基本演示展示了 pipeline API。创建 app/demo.php:
require_once __DIR__ . '/../vendor/autoload.php';
use function Codewithkyrian\Transformers\Pipelines\pipeline;
// Konveyer for sentiment-analysis
$classifier = pipeline('sentiment-analysis');
$out = $classifier(['I love transformers!']);
echo 'I love transformers!\n';
echo print_r($out, true);
$out = $classifier(['I hate transformers!']);
echo 'I hate transformers!\n';
echo print_r($out, true);
运行:docker compose exec app php app/demo.php
输出:
I love transformers!
Array (
[label] => POSITIVE
[score] => 0.99978870153427
)
I hate transformers!
Array (
[label] => NEGATIVE
[score] => 0.99863630533218
)
Pipeline 封装了模型加载、分词和推理过程。首次调用会缓存模型。
事件语义搜索
实际场景:在事件流中进行语义搜索。事件文本往往不包含查询的确切表述(如同义词、形态变化)。
示例数据:
- 针对科技公司的全新限制措施
- 该地区各国加大卫星计划投资
- 政治原因导致冲突升级
查询:“该地区国家间的太空竞赛”。
通过嵌入解决:文本的向量表示,使用余弦相似度进行排名。
运行示例:docker compose exec app php app/semantic-search.php
代码使用 pipeline('feature-extraction') 生成嵌入,并计算无关键词依赖的语义相似度。
在 PHP 后端中的架构作用
TransformersPHP 可作为单体应用或微服务中的服务集成:
- 搜索用的嵌入生成
- 日志/请求分类
- 重复内容检测
- 无 API 的本地 NER
// Example integration in servis
class SemanticSearchService {
private $embedder;
public function __construct() {
$this->embedder = pipeline('feature-extraction');
}
public function findSimilar(string $query, array $documents): array {
// Embeddingi + cosine similarity
}
}
相较 API 的优势:
- 稳定延迟(CPU 上 <100ms)
- 无配额/费用限制
- 初始化后支持离线
- 完全掌控模型
性能优化
- PHP 8.2+ 中的 JIT 可加速推理 20-30%
- Redis 中的模型缓存
- 请求批处理
- ONNX 优化(量化)
在 DistilBERT 上测试:512 token 嵌入耗时约 50ms(i7, 16GB)。
生产环境建议:监控内存(模型 100-500MB),实现优雅降级到 API。
关键要点
- TransformersPHP——用于推理,非模型训练。
- 本地推理无需数据科学团队即可解决 80% 后端 NLP 任务。
- 以 Composer 包形式集成,无需 Python 基础设施。
- 适用于隐私敏感环境(GDPR)。
- 通过批处理和缓存实现扩展。
— Editorial Team
暂无评论。