返回首页

TransformersPHP:PHP 中的 Transformer,无需 Python

TransformersPHP 允许在无需 Python 的 PHP 中运行 Transformer 模型推理。支持本地 ONNX Runtime 的嵌入、分类和语义搜索。通过 Docker 安装和后端集成的示例。

PHP 中的 Transformers:后端 TransformersPHP
Advertisement 728x90

# TransformersPHP:在 PHP 后端的本地 Transformer 推理

TransformersPHP 可以让你直接在 PHP 应用中通过 ONNX Runtime 运行像 BERT 和 DistilBERT 这样的预训练 Transformer 模型。该库支持本地推理,无需 Python、网络 API 或外部服务。它处理嵌入生成、文本分类和语义搜索任务,响应时间可预测,且数据完全由你掌控。

后端关键优势:无网络调用延迟,模型加载后支持离线模式,保障数据隐私。它支持标准 NLP 任务——从情感分析到语义相似度计算。

要求与环境搭建

上手需要 PHP 8.1+、Composer、FFI 扩展和 ONNX Runtime。建议启用 JIT 以获得更好性能,并适当增加 memory_limit。

Google AdInline article slot

项目结构:

/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
        }
    }
}

运行命令:

Google AdInline article slot
  • docker compose build --pull
  • docker compose up -d
  • docker 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

Google AdInline article slot

输出:

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

Advertisement 728x90

继续阅读