PHP에서의 TransformersPHP: 백엔드용 로컬 트랜스포머 추론
TransformersPHP는 ONNX Runtime을 통해 PHP 애플리케이션에서 BERT나 DistilBERT 같은 사전 훈련된 트랜스포머 모델을 직접 실행할 수 있게 해줍니다. 이 라이브러리는 Python이나 네트워크 API, 외부 서비스 없이 로컬 추론을 지원하며, 임베딩 작업, 텍스트 분류, 의미 검색 등을 예측 가능한 응답 시간과 완전한 데이터 제어로 처리합니다.
백엔드 주요 장점: 네트워크 호출 지연 없음, 모델 로딩 후 오프라인 모드, 데이터 프라이버시. 감성 분석부터 의미 유사도 계산까지 표준 자연어 처리 작업을 지원합니다.
요구 사항 및 환경 설정
시작하려면 PHP 8.1 이상, Composer, FFI 확장, ONNX Runtime이 필요합니다. 더 나은 성능을 위해 JIT를 권장하며 memory_limit 증가도 추천합니다.
프로젝트 구조:
/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
}
}
}
실행할 명령어:
docker compose build --pulldocker compose up -ddocker 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
출력:
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
아직 댓글이 없습니다.