![Os 5 principais recursos JavaScript subutilizados](https://optimuscloud.com.br/wp-content/uploads/2024/04/1713297607_Os-5-principais-recursos-JavaScript-subutilizados-150x150.jpg)
Os 5 principais recursos JavaScript subutilizados
16 de abril de 2024![Como um programador construiu um FAQ interativo baseado em IA](https://optimuscloud.com.br/wp-content/uploads/2024/04/1713301204_Como-um-programador-construiu-um-FAQ-interativo-baseado-em-IA-150x150.jpg)
Como um programador construiu um FAQ interativo baseado em IA
16 de abril de 2024A previsão de texto é algo que usamos todos os dias. Nós o usamos quando enviamos mensagens de texto, e-mails e qualquer outro lugar onde você possa escrever. Tornou-se tão comum que é um recurso esperado na maioria das plataformas. Dada a sua onipresença, fiquei curioso para ver como foi difícil criar meu próprio modelo de previsão de texto. Eu não esperava que fosse perfeito, como nem mesmo os principais modelos de previsão de texto são, mas achei que seria um projeto divertido aprender mais sobre aprendizado de máquina e processamento de linguagem natural.
O tutorial mostrará como fazer um modelo simples de previsão baseado em texto baseado em “Orgulho e Preconceito” de Jane Austen. Devido aos dados de treinamento serem baseados em um romance romântico, eu esperava que o texto preditivo resultante fosse muito distorcido para os temas de amor e casamento. Testaremos essa teoria no final.
A interface para isso será uma API. Serão necessárias consultas de previsão e retornará as três palavras mais prováveis que virão depois. Implantaremos a API na nuvem para que ela possa ser usada como uma API de terceiros em outros aplicativos, como um aplicativo de bate-papo ou em qualquer outro lugar onde você queira incorporar texto preditivo. Se quiser ir até o final e implantá-lo sozinho, você pode encontrar o código-fonte completo em nosso repositório de exemplos.
Python será a linguagem base porque o ecossistema de aprendizado de máquina (ML) em torno do Python é fantástico, permitindo-nos usar ferramentas como TensorFlow, Keras e NumPy. O TensorFlow atua como uma espécie de caixa de ferramentas de ML. Existem muitas opções, mas devemos usar a ferramenta certa para o trabalho.
O uso de uma rede neural recorrente de memória bidirecional de longo curto prazo (Bi-LSTM) é ideal para nosso problema de previsão de texto. Esse tipo de rede neural, além de ter um nome muito longo, também possui a capacidade única de armazenar contexto de longo e curto prazo. Precisaremos de memória de curto prazo para armazenar as palavras anteriores na frase e memória de longo prazo para armazenar o contexto de como essas palavras foram usadas em frases anteriores.
Passo 1 – Configurar o Projeto
Usaremos as seguintes ferramentas:
- Pipenv para gerenciamento simplificado de dependências
- O Nitric CLI para infraestrutura simples de back-end em nuvem
- (opcional) Sua escolha entre uma conta AWS, Google Cloud Platform (GCP) ou Microsoft Azure.
Comece criando um novo projeto para nossa API.
nitricnewprediction-apipython-starter
Em seguida, abra o projeto no editor de sua preferência e resolva as dependências usando Pipenv.
pipenvinstall--dev
Passo 2 – Prepare o conjunto de dados
O Project Gutenberg fornece o texto “Orgulho e Preconceito”, para que você possa baixar o arquivo de lá ou usar os dados pré-limpos de nosso repositório de exemplo, que é a abordagem recomendada. Este arquivo de texto formará a base de nossos dados de treinamento e dará às nossas previsões um toque de Jane Austen.
Antes de começarmos a treinar nosso modelo, queremos ter certeza de que exploramos e pré-processamos os dados de treinamento para limpá-los para um treinamento de qualidade. Examinando o texto “Orgulho e Preconceito”, descobrimos que o Project Gutenberg adiciona um cabeçalho e um rodapé aos dados. Existem também cabeçalhos de volume, títulos de capítulos, pontuação e contrações que iremos remover. Também converteremos todos os números em palavras – “8” em “oito”. Essa limpeza permite que nossos dados de treinamento sejam tão versáteis quanto possível, para que as previsões sejam mais coesas.
Agora que limpamos nossos dados, vamos tokenizá-los para que possam ser processados pelo modelo. Para tokenizar os dados, usaremos o módulo de pré-processamento Keras, portanto precisaremos instalar o módulo Keras.
pipenvinstallkeras==2.15.0
Podemos então criar e ajustar o tokenizer ao texto. Inicializaremos o token Out of Vocabulary (OOV) como <oov>
. Depois de ajustado ao texto, iremos salvá-lo para podermos utilizá-lo posteriormente.
Agora estamos prontos para começar a treinar nosso modelo.
Passo 3 – Treine o Modelo
Para treinar o modelo, usaremos um Bi-LSTM. Este tipo de rede neural recorrente é ideal para este problema, pois permite que a rede neural armazene o contexto das palavras anteriores da frase.
Comece carregando o tokenizer que criamos na fase de pré-processamento.
Em seguida, criaremos as sequências de entrada para treinar nosso modelo. Isso funciona obtendo cada combinação de seis palavras no texto. Primeiro, adicione NumPy como dependência.
pipenvinstallnumpy
Em seguida, escreveremos a função para criar as sequências de entrada a partir dos dados.
Em seguida, dividiremos as sequências de entrada em rótulos, dados de treinamento e teste.
A próxima parte é ajustar, compilar e treinar o modelo. Passaremos os dados de treinamento, que dividimos em dados de treinamento e teste. Podemos usar o retorno de chamada do ponto de verificação do modelo, que salvará a melhor iteração do nosso modelo em cada época. Para otimizar nossa velocidade de treinamento, também adicionaremos um otimizador de estimativa de momento adaptativo (ADAM) e uma taxa de aprendizado reduzida no retorno de chamada de platô.
Em seguida, adicionaremos camadas ao modelo sequencial.
Finalmente, podemos juntar tudo e compilar o modelo usando os dados de treinamento.
Com todos os serviços definidos, podemos treinar nosso modelo com os dados limpos.
O retorno de chamada de salvamento do ponto de verificação do modelo salvará o modelo como model.keras
. Poderemos então carregar o modelo quando criarmos nossa API.
Passo 4 – Escreva a função de previsão de texto
Estamos prontos para começar a prever o texto. Começando com o hello.py
arquivo, primeiro escreveremos funções para carregar o modelo e o tokenizer.
Escreveremos então uma função para prever as próximas três palavras mais prováveis. Isso usa o tokenizer para criar a mesma lista de tokens usada para treinar o modelo. Podemos então obter uma previsão de todas as palavras mais prováveis, que reduziremos para três. Em seguida, obteremos a palavra real do mapa de tokens, encontrando a palavra no dicionário. O índice da palavra tokenizer está no formato { "word": token_num }
como { "the": 1, "and": 2 }
. As previsões que receberemos serão uma série de números simbólicos.
Passo 5 – Crie a API
Usando a função de previsão de texto, podemos criar nossa API. Usarei a estrutura Nitric para isso, pois ela torna a implantação de nossa API muito simples e nos dá a escolha de qual nuvem queremos usar no final.
Primeiro, importaremos os módulos necessários para o Nitric SDK.
Em seguida, definiremos a API e nossa primeira rota.
Dentro deste bloco funcional, queremos definir o código que será executado em uma solicitação. Aceitaremos a solicitação para prever por meio dos parâmetros de consulta. Isso significa que as solicitações estão no formato: /predictions?prompt=
.
Agora que extraímos o prompt do usuário, podemos passá-lo para o modelo de previsão. Isso produzirá as três próximas palavras mais prováveis e as retornará ao usuário.
Isso é tudo que há para fazer. Para testar a função localmente, iniciaremos o servidor Nitric.
nitricstart
Você pode então fazer uma solicitação à API usando qualquer cliente HTTP. Dado o prompt “O que devo”, ele retorna as respostas mais prováveis: “ter”, “pensar” e “dizer”.
Você descobrirá que as previsões se concentram muito na família e nos casamentos. Isto mostra que os dados de treinamento, cortesia de Jane Austen, têm um grande efeito no tipo de previsões produzidas. Você pode ver esses temas nos exemplos abaixo, onde começamos com uma frase de duas palavras e vemos o que o texto preditivo produz.
Passo 6 – Implantar na nuvem
Você pode implantar em sua nuvem para permitir o uso da API por outros projetos. Primeiro, configure suas credenciais e qualquer outra configuração específica da nuvem:
- AWS
- Azul
- GCP
Crie sua pilha. Este é um arquivo de configuração de ambiente para o provedor de nuvem onde seu projeto será implantado. Para este projeto, usei Google Cloud; no entanto, funcionará perfeitamente se você preferir AWS ou Azure.
nitricstacknew
Este projeto será executado conforme esperado com uma configuração de memória padrão de 512 MB. No entanto, para obter previsões instantâneas, alteraremos a memória para 1 GB. Isso significa apenas adicionar alguma configuração ao arquivo de pilha recém-criado.
Você pode então implantar usando o seguinte comando:
nitricup
Quando a implantação for concluída, você obterá um endpoint para poder testar sua API na nuvem.
Se você estiver apenas testando por enquanto, poderá desmontar a pilha com o seguinte comando:
nitricdown
Se você quiser saber mais sobre como usar o Nitric para implantar rapidamente Python e outros aplicativos de linguagem em sua nuvem, confira a sessão que Anmol Krishan Sachdeva e Kingsley Madikaegbu do Google estão liderando no Open Source Summit North America: “Thinking Beyond IaC: an OSS Abordagem à infraestrutura agnóstica em nuvem. Gestão Usando Infra. do Código (IfC).
A postagem Tutorial Python: use o TensorFlow para gerar texto preditivo apareceu pela primeira vez em The New Stack.