# 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.
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:
docker compose build --pulldocker compose up -ddocker 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
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
Aún no hay comentarios.