Volver al inicio

TransformersPHP: transformers en PHP sin Python

TransformersPHP permite ejecutar inferencia de modelos transformer en PHP sin Python. Soporta embeddings, clasificación y búsqueda semántica con ONNX Runtime local. Ejemplos de instalación vía Docker e integración en backend.

Transformers en PHP: TransformersPHP para backend
Advertisement 728x90

# TransformersPHP en PHP: Inferencia local de transformadores para el backend

TransformersPHP te permite ejecutar modelos de transformadores preentrenados como BERT y DistilBERT directamente en aplicaciones PHP mediante ONNX Runtime. La biblioteca permite inferencia local sin Python, APIs de red ni servicios externos. Maneja tareas de embedding, clasificación de texto y búsqueda semántica con tiempos de respuesta predecibles y control total de los datos.

Ventajas clave en el backend: sin latencia por llamadas de red, modo offline tras cargar el modelo, privacidad de datos. Soporta tareas estándar de NLP: desde análisis de sentimientos hasta similitud semántica.

Requisitos y configuración del entorno

Para empezar, necesitarás PHP 8.1+, Composer, la extensión FFI y ONNX Runtime. Se recomienda JIT para un mejor rendimiento, junto con un memory_limit aumentado.

Google AdInline article slot

Estructura del proyecto:

/project/
  ├── app/
  │    ├── demo.php
  │    ├── semantic-search.php
  ├── docker/
  │    ├── Dockerfile
  ├── docker-compose.yml
  ├── composer.json

La instalación vía Docker simplifica el despliegue. Archivo composer.json:

{
    "type": "project",
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "codewithkyrian/transformers": "~0.6.2"
    },
    "config": {
        "allow-plugins": {
            "codewithkyrian/platform-package-installer": true
        }
    }
}

Comandos para ejecutar:

Google AdInline article slot
  • docker compose build --pull
  • docker compose up -d
  • docker compose exec app composer install

El Dockerfile configura FFI, ONNX Runtime 1.17.1 y extensiones de PHP (zip, pdo_mysql, bcmath, ffi, y otras).

Primer ejemplo: Análisis de sentimientos

La demo básica demuestra la API de pipeline. Crea 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);

Ejecuta: docker compose exec app php app/demo.php

Google AdInline article slot

Salida:

I love transformers!
Array ( 
  [label] => POSITIVE 
  [score] => 0.99978870153427 
)

I hate transformers!
Array ( 
  [label] => NEGATIVE 
  [score] => 0.99863630533218 
)

El pipeline abstrae la carga del modelo, tokenización e inferencia. La primera llamada almacena el modelo en caché.

Búsqueda semántica para eventos

Escenario del mundo real: búsqueda semántica en un feed de eventos. Los textos de eventos no contienen la frase exacta de la consulta (sinónimos, morfología).

Datos de ejemplo:

  • Nuevas restricciones introducidas respecto a corporaciones tecnológicas
  • Países de la región aumentando inversiones en programas satelitales
  • Escalada de conflicto por motivos políticos

Consulta: «carrera espacial entre países de la región».

Solución vía embeddings: representaciones vectoriales de textos, similitud coseno para el ranking.

Ejecuta el ejemplo: docker compose exec app php app/semantic-search.php

El código usa pipeline('feature-extraction') para embeddings y calcula similitud semántica sin palabras clave.

Rol arquitectónico en el backend PHP

TransformersPHP se integra como un servicio en un monolito o microservicio:

  • Generación de embeddings para búsqueda
  • Clasificación de logs/solicitudes
  • Detección de duplicados
  • NER local sin 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
    }
}

Ventajas sobre las APIs:

  • Latencia estable (<100 ms en CPU)
  • Sin cuotas ni costes
  • Offline tras la inicialización
  • Control total del modelo

Optimización de rendimiento

  • JIT en PHP 8.2+ acelera la inferencia un 20-30%
  • Caché de modelos en Redis
  • Agrupación de solicitudes
  • Optimizaciones ONNX (cuantización)

Probado en DistilBERT: ~50 ms para un embedding de 512 tokens (i7, 16 GB).

Para producción: monitoreo de memoria (modelos de 100-500 MB), fallback elegante a API.

Conclusiones clave

  • TransformersPHP: para inferencia, no para entrenamiento de modelos.
  • La inferencia local resuelve el 80% de tareas de NLP en backend sin ciencia de datos.
  • Se integra como paquete Composer, sin infraestructura Python.
  • Adecuado para entornos sensibles a la privacidad (GDPR).
  • Escala mediante agrupación y caché.

— Editorial Team

Advertisement 728x90

Leer después