# TransformersPHP w PHP: lokalna inferencja transformerów dla backendu
TransformersPHP umożliwia uruchamianie pretrenowanych modeli transformerów, takich jak BERT i DistilBERT, bezpośrednio w aplikacjach PHP za pośrednictwem ONNX Runtime. Biblioteka zapewnia lokalną inferencję bez Pythona, sieciowych API i zewnętrznych usług. Rozwiązuje to zadania embeddingów, klasyfikacji tekstu i semantycznego wyszukiwania z przewidywalnym czasem odpowiedzi i kontrolą danych.
Kluczowe zalety dla backendu: brak opóźnień od wywołań sieciowych, tryb offline po załadowaniu modelu, prywatność danych. Obsługiwane są typowe zadania NLP — od analizy sentymentu po semantyczne podobieństwo.
Wymagania i konfiguracja środowiska
Do pracy potrzebne są PHP 8.1+, Composer, rozszerzenie FFI i ONNX Runtime. Zalecany jest JIT dla wydajności oraz zwiększony memory_limit.
Struktura projektu:
/project/
├── app/
│ ├── demo.php
│ ├── semantic-search.php
├── docker/
│ ├── Dockerfile
├── docker-compose.yml
├── composer.json
Instalacja przez Docker ułatwia wdrożenie. Plik composer.json:
{
"type": "project",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"codewithkyrian/transformers": "~0.6.2"
},
"config": {
"allow-plugins": {
"codewithkyrian/platform-package-installer": true
}
}
}
Polecenia uruchomienia:
docker compose build --pulldocker compose up -ddocker compose exec app composer install
Dockerfile konfiguruje FFI, ONNX Runtime 1.17.1 oraz rozszerzenia PHP (zip, pdo_mysql, bcmath, ffi itp.).
Pierwszy przykład: analiza sentymentu
Podstawowy demo pokazuje pipeline API. Utwórz app/demo.php:
require_once __DIR__ . '/../vendor/autoload.php';
use function Codewithkyrian\Transformers\Pipelines\pipeline;
// Konveyer dla 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);
Uruchomienie: docker compose exec app php app/demo.php
Wynik:
I love transformers!
Array (
[label] => POSITIVE
[score] => 0.99978870153427
)
I hate transformers!
Array (
[label] => NEGATIVE
[score] => 0.99863630533218
)
Pipeline abstraktuje ładowanie modelu, tokenizację i inferencję. Pierwsze wywołanie cachuje model.
Semantyczne wyszukiwanie wydarzeń
Rzeczywisty scenariusz: wyszukiwanie po znaczeniu w feedzie wydarzeń. Teksty wydarzeń nie zawierają dokładnych sformułowań zapytania (synonimy, morfologia).
Przykładowe dane:
- wprowadzono nowe ograniczenia wobec korporacji technologicznych
- kraje regionu zwiększają inwestycje w programy satelitarne
- zaostrzenie konfliktu na tle politycznym
Zapytanie: „wyścig kosmiczny wśród krajów regionu”.
Rozwiązanie przez embeddingi: wektorowe reprezentacje tekstów, cosine similarity do rangowania.
Uruchomienie przykładu: docker compose exec app php app/semantic-search.php
Kod używa pipeline('feature-extraction') do embeddingów i oblicza semantyczne podobieństwo bez słów kluczowych.
Rola architektoniczna w backendzie PHP
TransformersPHP integruje się jako usługa w monolit lub mikrousługę:
- Generowanie embeddingów do wyszukiwania
- Klasyfikacja logów/zapytań
- Detekcja duplikatów
- Lokalny NER bez API
// Przykład integracji w usługę
class SemanticSearchService {
private $embedder;
public function __construct() {
$this->embedder = pipeline('feature-extraction');
}
public function findSimilar(string $query, array $documents): array {
// Embeddingi + cosine similarity
}
}
Zalety nad API:
- Stabilne opóźnienia (<100ms na CPU)
- Brak limitów/kosztów
- Offline po inicjalizacji
- Pełna kontrola modelu
Optymalizacja wydajności
- JIT w PHP 8.2+ przyspiesza inferencję o 20-30%
- Cachowanie modeli w Redis
- Batchowanie zapytań
- Optymalizacje ONNX (quantization)
Testowane na DistilBERT: ~50ms na embedding 512 tokenów (i7, 16GB).
Do produkcji: monitorowanie pamięci (modele 100-500MB), graceful fallback na API.
Co ważne
- TransformersPHP — do inferencji, nie trenowania modeli.
- Lokalna inferencja rozwiązuje 80% zadań NLP backendu bez data science.
- Integracja jako pakiet Composer, bez infrastruktury Python.
- Nadaje się do środowisk wrażliwych na prywatność (GDPR).
- Skaluje się przez batching i cache.
— Editorial Team
Brak komentarzy.