Zpět na domů

TransformersPHP: transformery v PHP bez Pythonu

TransformersPHP umožňuje provádět inferování transformerových modelů v PHP bez Pythonu. Podporuje embeddingy, klasifikaci a sémantické vyhledávání s lokálním ONNX Runtime. Příklady instalace přes Docker a integrace do backendu.

Transformery v PHP: TransformersPHP pro backend
Advertisement 728x90

# TransformersPHP v PHP: lokální inference transformerů pro backend

TransformersPHP umožňuje spouštět předtrénované modely transformerů jako BERT a DistilBERT přímo v PHP aplikacích prostřednictvím ONNX Runtime. Knihovna zajišťuje lokální inference bez Pythonu, síťových API a externích služeb. To řeší úkoly embeddingů, klasifikace textu a sémantického vyhledávání s předvídatelnou odezvou a kontrolou dat.

Klíčové výhody pro backend: absence latence ze síťových volání, offline režim po načtení modelu, soukromí dat. Podporovány jsou typické NLP úkoly – od analýzy sentimentu po sémantickou podobnost.

Požadavky a nastavení prostředí

Pro práci je potřeba PHP 8.1+, Composer, rozšíření FFI a ONNX Runtime. Doporučuje se JIT pro výkon a zvýšený memory_limit.

Google AdInline article slot

Projektová struktura:

/project/
  ├── app/
  │    ├── demo.php
  │    ├── semantic-search.php
  ├── docker/
  │    ├── Dockerfile
  ├── docker-compose.yml
  ├── composer.json

Instalace přes Docker zjednodušuje nasazení. Soubor composer.json:

{
    "type": "project",
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "codewithkyrian/transformers": "~0.6.2"
    },
    "config": {
        "allow-plugins": {
            "codewithkyrian/platform-package-installer": true
        }
    }
}

Příkazy spuštění:

Google AdInline article slot
  • docker compose build --pull
  • docker compose up -d
  • docker compose exec app composer install

Dockerfile nastavuje FFI, ONNX Runtime 1.17.1 a PHP rozšíření (zip, pdo_mysql, bcmath, ffi aj.).

První příklad: analýza sentimentu

Základní demo demonstruje pipeline API. Vytvořte app/demo.php:

require_once __DIR__ . '/../vendor/autoload.php';

use function Codewithkyrian\Transformers\Pipelines\pipeline;

// Konvejér pro 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);

Spouštění: docker compose exec app php app/demo.php

Google AdInline article slot

Výstup:

I love transformers!
Array ( 
  [label] => POSITIVE 
  [score] => 0.99978870153427 
)

I hate transformers!
Array ( 
  [label] => NEGATIVE 
  [score] => 0.99863630533218 
)

Pipeline abstrahuje načítání modelu, tokenizaci a inference. První volání cachuje model.

Sémantické vyhledávání podle událostí

Reálný scénář: vyhledávání podle smyslu v pásmu událostí. Texty událostí neobsahují přesné formulace dotazu (synonyma, morfologie).

Příklad dat:

  • zavedena nová omezení vůči technologickým korporacím
  • země regionu zvyšují investice do satelitních programů
  • eskalace konfliktu na politickém základě

Dotaz: „kosmická závod mezi zeměmi regionu“.

Řešení přes embeddingy: vektorovou reprezentaci textů, kosinovou podobnost pro řazení.

Spouštění příkladu: docker compose exec app php app/semantic-search.php

Kód používá pipeline('feature-extraction') pro embeddingy a počítá sémantickou podobnost bez klíčových slov.

Architektonická role v PHP backendu

TransformersPHP se integruje jako služba v monolitu nebo mikroslužbě:

  • Generování embeddingů pro vyhledávání
  • Klasifikace logů/dotazů
  • Detekce duplikátů
  • Lokální NER bez API
// Příklad integrace do služby
class SemanticSearchService {
    private $embedder;
    
    public function __construct() {
        $this->embedder = pipeline('feature-extraction');
    }
    
    public function findSimilar(string $query, array $documents): array {
        // Embeddingy + kosinová podobnost
    }
}

Výhody oproti API:

  • Stabilní latence (<100ms na CPU)
  • Žádné quota/náklady
  • Offline po inicializaci
  • Plná kontrola modelu

Optimalizace výkonu

  • JIT v PHP 8.2+ zrychluje inference o 20–30 %
  • Cachování modelů v Redis
  • Batching požadavků
  • Optimalizace ONNX (kvantizace)

Testováno na DistilBERT: ~50 ms na embedding 512 tokenů (i7, 16 GB).

Pro produkci: monitorování paměti (modely 100–500 MB), plynulý fallback na API.

Co je důležité

  • TransformersPHP – pro inference, ne trénink modelů.
  • Lokální inference řeší 80 % NLP úkolů backendu bez data science.
  • Integrace jako Composer balíček, bez Python infrastruktury.
  • Vhodné pro prostředí citlivá na soukromí (GDPR).
  • Škálovatelné přes batching a cache.

— Editorial Team

Advertisement 728x90

Číst dál