Zurück zur Startseite

TransformersPHP: Transformers in PHP ohne Python

TransformersPHP ermöglicht das Ausführen von Inferenz von Transformer-Modellen in PHP ohne Python. Unterstützt Embeddings, Klassifikation und semantische Suche mit lokalem ONNX Runtime. Beispiele für Installation via Docker und Backend-Integration.

Transformers in PHP: TransformersPHP für Backend
Advertisement 728x90

# 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.

Google AdInline article slot

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:

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

Google AdInline article slot

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

Advertisement 728x90

Weiterlesen