Gerando embeddings com PHP e ONNX

jonas-elias

jonas-elias

Posted on July 15, 2024

Gerando embeddings com PHP e ONNX

IA e PHP

No campo da inteligência artificial (IA) e processamento de linguagem natural (NLP), embeddings são representações matemáticas de palavras, frases ou documentos que capturam seu significado semântico. Esses embeddings são utilizados para aplicações que incluem busca semântica, análise de sentimentos, entre outros. A criação de embeddings geralmente envolve técnicas de aprendizado de máquina que tradicionalmente são implementadas em linguagens como Python. No entanto, com a crescente popularidade da arquitetura Open Neural Network Exchange (ONNX), é possível integrar modelos pré-treinados em diferentes linguagens de programação, incluindo PHP.

Transformers PHP

Para utilização dos modelos de inteligência artificial visando a geração de embeddings no PHP, é possível utilizar a biblioteca TransformersPHP, no qual foi projetada para ser funcionalmente equivalente à biblioteca Transformers em Python, mantendo o mesmo nível de desempenho e facilidade de uso. O TransformersPHP utiliza o ONNX Runtime para executar os modelos pré-treinados.

Arquitetura Exemplo

A seguir, é possível observar visualmente o funcionamento da geração de embeddings a partir da biblioteca TransformersPHP:
Image description

Uso

Primeiramente, realize a configuração da imagem que será utilizada pelo container. Para utilização do TransformersPHP com suporte a geração de embeddings, é necessário o uso das extensões FFI e Imagick. A extensão FFI é a interface de integração entre código binário e a linguagem PHP. Já o Imagick é utilizado para o processamento dos modelos pré-treinados.

FROM php:8.3

RUN apt-get update && apt-get install -y libffi-dev \
        git \
        unzip \
        libmagickwand-dev \
        libmagickcore-dev      

RUN docker-php-ext-configure ffi --with-ffi \
    && docker-php-ext-install ffi

RUN pecl install imagick \
    && docker-php-ext-enable imagick

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN mkdir /embeddings

WORKDIR /embeddings

CMD ["/bin/bash"]
Enter fullscreen mode Exit fullscreen mode

Após isso, é possível realizar a criação da imagem:

docker build -t image-php-ffi .
Enter fullscreen mode Exit fullscreen mode

Seguida da execução do container:

docker run -it --rm --name container-php-ffi image-php-ffi
Enter fullscreen mode Exit fullscreen mode

Dentro do container, é necessário primeiramente adicionar a dependência codewithkyrian/transformers, logo deve-se executar:

composer require codewithkyrian/transformers
Enter fullscreen mode Exit fullscreen mode

Com isso, o ambiente está configurado e pronto para receber o código que fará a geração do embedding. Abaixo, é possível verificar que o código PHP faz referência ao modelo Xenova/bert-base-uncased, disponibilizado pela iniciativa Xenova, no qual oferece modelos pré-treinados a partir da arquitetura ONNX.

<?php

declare(strict_types=1);

require_once './vendor/autoload.php';

use Codewithkyrian\Transformers\Transformers;
use function Codewithkyrian\Transformers\Pipelines\pipeline;
use function Codewithkyrian\Transformers\Utils\{memoryUsage, timeUsage};

Transformers::setup()
    ->apply();

$extractor = pipeline('feature-extraction', 'Xenova/bert-base-uncased');

$embeddings = $extractor('The quick brown fox jumps over the lazy dog.', normalize: true, pooling: 'mean');

var_dump($embeddings[0]);

dd(memoryUsage(), timeUsage(milliseconds: true), count($embeddings[0]));
Enter fullscreen mode Exit fullscreen mode

Realize a criação de um novo arquivo PHP, copie o código acima e após isso, execute o arquivo com php nome_arquivo.php. A primeira execução pode requerer um tempo de processamento maior por conta do download do modelo pré-treinado.

Busca Semântica

A geração de embeddings pode ser benéfica para produzir sistemas de busca ao nível semântico, como abordo mais especificamente na palestra Palestra APIs e LLMs.

Desvantagens

Utilizar PHP e a arquitetura ONNX para gerar embeddings pode apresentar algumas desvantagens. A maioria dos modelos transformers são desenvolvidos com a arquitetura PyTorch, que é fortemente integrada à linguagem Python, limitando a realização de testes e desenvolvimento em outras linguagens. A conversão de modelos PyTorch para ONNX pode ser complexa ou até inviável, dependendo do suporte e das atualizações fornecidas pelos mantenedores dos modelos.

Conclusão

Integrar IA e NLP com PHP utilizando a arquitetura ONNX é uma abordagem promissora que permite a utilização de modelos pré-treinados em uma linguagem de programação amplamente usada no desenvolvimento web. A biblioteca TransformersPHP demonstra ser uma ferramenta funcionalmente equivalente à sua contraparte em Python, permitindo a geração de embeddings com facilidade e eficiência.

Embora existam desafios, como a complexidade na conversão de modelos e a necessidade de extensões específicas, a utilização de PHP para geração de embeddings pode abrir novas oportunidades para desenvolvedores web que desejam incorporar capacidades de NLP em suas aplicações sem a necessidade de migrar para outras linguagens.

Com a evolução contínua dessas tecnologias e o aumento do suporte da comunidade, espera-se que as barreiras atuais sejam progressivamente reduzidas, tornando essa abordagem cada vez mais acessível e eficaz para diversos desenvolvedores e aplicações.

Referências

💖 💪 🙅 🚩
jonas-elias
jonas-elias

Posted on July 15, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related