홈으로 돌아가기

TransformersPHP: Python 없이 PHP의 트랜스포머

TransformersPHP는 Python 없이 PHP에서 트랜스포머 모델의 추론을 실행할 수 있게 합니다. 로컬 ONNX Runtime을 사용한 임베딩, 분류, 의미 검색 지원. Docker를 통한 설치 및 백엔드 통합 예제.

PHP의 트랜스포머: 백엔드용 TransformersPHP
Advertisement 728x90

PHP에서의 TransformersPHP: 백엔드용 로컬 트랜스포머 추론

TransformersPHP는 ONNX Runtime을 통해 PHP 애플리케이션에서 BERT나 DistilBERT 같은 사전 훈련된 트랜스포머 모델을 직접 실행할 수 있게 해줍니다. 이 라이브러리는 Python이나 네트워크 API, 외부 서비스 없이 로컬 추론을 지원하며, 임베딩 작업, 텍스트 분류, 의미 검색 등을 예측 가능한 응답 시간과 완전한 데이터 제어로 처리합니다.

백엔드 주요 장점: 네트워크 호출 지연 없음, 모델 로딩 후 오프라인 모드, 데이터 프라이버시. 감성 분석부터 의미 유사도 계산까지 표준 자연어 처리 작업을 지원합니다.

요구 사항 및 환경 설정

시작하려면 PHP 8.1 이상, Composer, FFI 확장, ONNX Runtime이 필요합니다. 더 나은 성능을 위해 JIT를 권장하며 memory_limit 증가도 추천합니다.

Google AdInline article slot

프로젝트 구조:

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

Docker를 통한 설치로 배포가 간편해집니다. composer.json 파일:

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

실행할 명령어:

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

Dockerfile은 FFI, ONNX Runtime 1.17.1, PHP 확장(zip, pdo_mysql, bcmath, ffi 등)을 설정합니다.

첫 번째 예제: 감성 분석

기본 데모는 pipeline API를 보여줍니다. 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);

실행: docker compose exec app php app/demo.php

Google AdInline article slot

출력:

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

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

Pipeline은 모델 로딩, 토큰화, 추론을 추상화합니다. 첫 호출 시 모델을 캐시합니다.

이벤트용 의미 검색

현실 시나리오: 이벤트 피드에서의 의미 검색. 이벤트 텍스트는 정확한 쿼리 표현(동의어, 형태소 변화)을 포함하지 않습니다.

예제 데이터:

  • 기술 기업 관련 새로운 제한 도입
  • 지역 국가들의 위성 프로그램 투자 확대
  • 정치적 이유로 인한 갈등 고조

쿼리: “지역 국가들 간의 우주 경쟁”.

임베딩을 통한 해결: 텍스트의 벡터 표현으로 코사인 유사도를 이용한 랭킹.

예제 실행: docker compose exec app php app/semantic-search.php

코드에서 pipeline('feature-extraction')을 사용해 임베딩을 생성하고 키워드 없이 의미 유사도를 계산합니다.

PHP 백엔드에서의 아키텍처 역할

TransformersPHP는 모놀리스나 마이크로서비스에서 서비스로 쉽게 통합됩니다:

  • 검색을 위한 임베딩 생성
  • 로그/요청 분류
  • 중복 감지
  • API 없이 로컬 NER
// 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
    }
}

API 대비 장점:

  • 안정적 지연 (CPU에서 <100ms)
  • 쿼터/비용 없음
  • 초기화 후 오프라인
  • 완전한 모델 제어

성능 최적화

  • PHP 8.2+ JIT로 추론 20-30% 가속
  • Redis 모델 캐싱
  • 요청 배칭
  • ONNX 최적화 (quantization)

DistilBERT 테스트: 512 토큰 임베딩 ~50ms (i7, 16GB).

프로덕션용: 메모리 모니터링 (모델 100-500MB), API로 우아한 폴백.

주요 요점

  • TransformersPHP — 모델 훈련이 아닌 추론용.
  • 로컬 추론으로 데이터 사이언스 없이 백엔드 자연어 처리 작업 80% 해결.
  • Composer 패키지로 통합, Python 인프라 불필요.
  • 프라이버시 민감 환경(GDPR)에 적합.
  • 배칭과 캐싱으로 확장.

— Editorial Team

Advertisement 728x90

다음 읽기