Powrót do strony głównej

TransformersPHP: transformery w PHP bez Python

TransformersPHP umożliwia wykonywanie inferencji modeli transformer w PHP bez Python. Obsługuje embeddingi, klasyfikację i wyszukiwanie semantyczne z lokalnym ONNX Runtime. Przykłady instalacji przez Docker i integracji w backendzie.

Transformery w PHP: TransformersPHP dla backendu
Advertisement 728x90

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

Google AdInline article slot

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:

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

Google AdInline article slot

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

Advertisement 728x90

Czytaj dalej