# 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.
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í:
docker compose build --pulldocker compose up -ddocker 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
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
Zatím žádné komentáře.