# TransformersPHP in PHP: Lokale Transformer-Inferenz für das Backend
TransformersPHP ermöglicht es, vortrainierte Transformer-Modelle wie BERT und DistilBERT direkt in PHP-Anwendungen über ONNX Runtime auszuführen. Die Bibliothek erlaubt lokale Inferenz ohne Python, Netzwerk-APIs oder externe Dienste. Sie bewältigt Embedding-Aufgaben, Textklassifikation und semantische Suche mit vorhersagbaren Reaktionszeiten und vollständiger Datenkontrolle.
Wichtige Backend-Vorteile: keine Latenz durch Netzwerkaufrufe, Offline-Modus nach dem Laden des Modells, Datenschutz. Sie unterstützt Standard-NLP-Aufgaben – von Stimmungsanalyse bis semantischer Ähnlichkeit.
Anforderungen und Umgebungseinrichtung
Zum Einstieg benötigen Sie PHP 8.1+, Composer, die FFI-Erweiterung und ONNX Runtime. JIT wird für bessere Performance empfohlen, ergänzt durch eine erhöhte memory_limit.
Projektstruktur:
/project/
├── app/
│ ├── demo.php
│ ├── semantic-search.php
├── docker/
│ ├── Dockerfile
├── docker-compose.yml
├── composer.json
Installation über Docker vereinfacht den Einsatz. Datei composer.json:
{
"type": "project",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"codewithkyrian/transformers": "~0.6.2"
},
"config": {
"allow-plugins": {
"codewithkyrian/platform-package-installer": true
}
}
}
Befehle zum Ausführen:
docker compose build --pulldocker compose up -ddocker compose exec app composer install
Dockerfile richtet FFI, ONNX Runtime 1.17.1 und PHP-Erweiterungen (zip, pdo_mysql, bcmath, ffi und weitere) ein.
Erstes Beispiel: Stimmungsanalyse
Die Basis-Demo demonstriert die Pipeline-API. Erstellen Sie 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);
Ausführen: docker compose exec app php app/demo.php
Ausgabe:
I love transformers!
Array (
[label] => POSITIVE
[score] => 0.99978870153427
)
I hate transformers!
Array (
[label] => NEGATIVE
[score] => 0.99863630533218
)
Pipeline abstrahiert das Laden des Modells, die Tokenisierung und die Inferenz. Der erste Aufruf cached das Modell.
Semantische Suche für Events
Szenario aus der Praxis: semantische Suche in einem Event-Feed. Event-Texte enthalten selten die exakte Formulierung der Query (Synonyme, Morphologie).
Beispieldaten:
- Neue Einschränkungen hinsichtlich Technologieunternehmen eingeführt
- Länder der Region steigern Investitionen in Satellitenprogramme
- Eskalation eines Konflikts aus politischen Gründen
Query: „Wettlauf ins All zwischen Ländern der Region“.
Lösung über Embeddings: Vektordarstellungen von Texten, Cosinus-Ähnlichkeit für das Ranking.
Beispiel ausführen: docker compose exec app php app/semantic-search.php
Der Code verwendet pipeline('feature-extraction') für Embeddings und berechnet semantische Ähnlichkeit ohne Keywords.
Architekturelle Rolle im PHP-Backend
TransformersPHP integriert sich als Service in einem Monolithen oder Microservice:
- Erzeugung von Embeddings für Suche
- Klassifikation von Logs/Anfragen
- Duplikatenerkennung
- Lokale NER ohne API
// 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
}
}
Vorteile gegenüber APIs:
- Stabile Latenz (<100 ms auf CPU)
- Keine Quoten/Kosten
- Offline nach Initialisierung
- Volle Modellkontrolle
Performance-Optimierung
- JIT in PHP 8.2+ beschleunigt Inferenz um 20-30 %
- Modell-Caching in Redis
- Anfragen-Batching
- ONNX-Optimierungen (Quantisierung)
Getestet mit DistilBERT: ~50 ms für ein 512-Token-Embedding (i7, 16 GB).
Für Produktion: Speichermonitoring (Modelle 100-500 MB), sanfter Fallback auf API.
Wichtige Erkenntnisse
- TransformersPHP – für Inferenz, nicht für Modelltraining.
- Lokale Inferenz löst 80 % der Backend-NLP-Aufgaben ohne Data Science.
- Integriert als Composer-Paket, keine Python-Infrastruktur.
- Geeignet für datenschutzsensitive Umgebungen (GDPR).
- Skaliert über Batching und Caching.
— Editorial Team
Noch keine Kommentare.