Construindo uma API de categorização de texto com TensorFlow.NET no ASP.NET Core
Introdução
No design de aplicações web modernas, a categorização de texto é um recurso crucial que pode ajudar a organizar, filtrar e compreender grandes volumes de dados textuais. Este tutorial guiará você na criação de uma API de categorização de texto poderosa usando TensorFlow.NET e ASP.NET Core. Ao final, você terá uma API funcional que pode categorizar texto usando um modelo TensorFlow pré-treinado.
Pré-requisitos
Antes de entrarmos, certifique-se de ter o seguinte:
- Conhecimento básico do ASP.NET Core.
- Uma instalação funcional do .NET SDK.
- Python (para treinar o modelo TensorFlow).
Etapa 1: Configurar seu projeto de API Web ASP.NET Core
Comece criando um novo projeto ASP.NET Core Web API:
dotnet new webapi -n TextCategorizationApi
cd TextCategorizationApi
Abra o projeto no seu IDE preferido (por exemplo, Visual Studio ou Visual Studio Code).
Etapa 2: Adicionar os pacotes necessários
Em seguida, instale o TensorFlow.NET e as dependências necessárias:
dotnet add package TensorFlow.NET
dotnet add package SciSharp.TensorFlow.Redist
Etapa 3: Prepare seu modelo TensorFlow
Se você não tiver um modelo TensorFlow pré-treinado, poderá treinar um usando Python. Aqui está um script de exemplo para treinar e salvar um modelo de classificação de texto:
import tensorflow as tf
de tensorflow . keras . pré-processamento . importação de texto Tokenizer
de tensorflow . keras . pré-processamento . sequência importar pad_sequences
de tensorflow . keras . modelos importar sequencial
de tensorflow . keras . camadas importar Incorporação , LSTM , Denso
importar numpy como np
# Dados de treinamento de exemplo
textos = [ "Isto é positivo" , "Isto é negativo" , "Muito feliz" , "Muito triste" ]
rótulos = [ 1 , 0 , 1 , 0 ]
tokenizer = Tokenizador ( num_words = 1000 )
tokenizador . fit_on_texts ( textos )
sequências = tokenizador . textos_para_sequências ( textos )
dados = pad_sequences ( sequências , maxlen = 10 )
rótulos = np . array ( rótulos )
modelo = Sequencial ( [
Incorporação ( 1000 , 64 , input_length = 10 ) ,
LSTM ( 64 ) ,
Denso ( 1 , ativação = 'sigmoide' )
] )
modelo . compilar ( otimizador = 'adam' , perda = 'binary_crossentropy' , métricas = [ 'precisão' ] )
modelo . ajuste ( dados , rótulos , épocas = 5 )
# Salvar o modelo
modelo . salvar ( 'modelo_de_categorização_de_texto' )
Converta e salve o modelo no formato TensorFlow SavedModel:
model . save ( 'saved_model' )
Etapa 4: implementar o serviço TensorFlow no ASP.NET Core
Crie um serviço para carregar e usar o modelo TensorFlow:
// Services/TensorFlowService.cs
using System ;
usando System . Linq ;
usando NumSharp ;
usando Tensorflow ;
usando Tensorflow estático . Vinculação ;
usando TextCategorizationApi . Modelos ;
classe pública TensorFlowService
{
string privada somente leitura _modelPath ;
Sessão privada somente leitura _session ;
privado somente leitura Gráfico _gráfico ;
TensorFlowService público ( string modelPath )
{
_modelPath = caminho do modelo ;
_graph = novo gráfico ( ) . como padrão ( ) ;
_session = tf . Sessão ( _graph ) ;
TF . trem . import_meta_graph ( $" { _modelPath } /saved_model.meta" ) ;
TF . trem . Economizador ( ) . restaurar ( _session , _modelPath ) ;
}
string pública PredictCategory ( string texto )
{
// Tokenize e preencha o texto de entrada como no script de treinamento
var tokens = TokenizeAndPad ( texto ) ;
var inputTensor = _graph . OperationByName ( "input_1" ) ; // Ajuste de acordo com o nome de entrada do seu modelo
var outputTensor = _graph . OperationByName ( "dense_2/Sigmoid" ) ; // Ajuste de acordo com o nome de saída do seu modelo
var resultado = _session . executar ( outputTensor , novo FeedItem ( inputTensor , tokens ) ) ;
// Assume classificação binária: 0 ou 1
retornar resultado [ 0 ] . ToString ( ) == "1" ? "Positivo" : "Negativo" ;
}
NDArray privado TokenizeAndPad ( string texto )
{
// Implemente a mesma lógica de tokenização e preenchimento do script Python
// Esta é uma versão simplificada, você pode precisar ajustá-la com base no seu tokenizador atual
var tokens = texto . Dividir ( '' ) . Selecionar ( palavra => ( float ) palavra . ObterHashCode ( ) % 1000 ) . ToArray ( ) ;
var paddedTokens = new float [ 10 ] ; // Ajuste para o comprimento máximo da sua sequência
Matriz . Copiar ( tokens , paddedTokens , Math . Min ( tokens . Length , paddedTokens . Length ) ) ;
retornar np . array ( novo [ ] { paddedTokens } ) ;
}
}
Etapa 5: Registre o serviço TensorFlow em Startup.cs
Adicione o seguinte código para registrar o serviço TensorFlow:
public void ConfigureServices ( IServiceCollection services )
{
serviços . AddControllers ( ) ;
var modelPath = "caminho_para_seu_modelo" ;
serviços . AddSingleton ( novo TensorFlowService ( modelPath ) ) ;
}
Etapa 6: Crie um controlador para usar o serviço TensorFlow
Crie um controlador para lidar com previsões:
// Controllers/PredictController.cs
using Microsoft.AspNetCore.Mvc;
using TextCategorizationApi.Models;
using TextCategorizationApi.Services;
[ Rota ( "api/[controlador]" ) ]
[ ApiController ]
classe pública PredictController : ControllerBase
{
TensorFlowService privado somente leitura _tensorFlowService ;
público PredictController ( TensorFlowService tensorFlowService )
{
_tensorFlowService = tensorFlowService ;
}
[ HttpPost ]
public ActionResult Predict ( [ FromBody ] TextData entrada )
{
var categoria = _tensorFlowService . PredictCategory ( entrada . Texto ) ;
retornar Ok ( novo { entrada . Texto , Categoria = categoria } ) ;
}
}
Etapa 7: Teste sua API
Execute sua API:
dotnet run
Use uma ferramenta como Postman ou cURL para enviar solicitações ao seu endpoint de API:
Exemplo de solicitação usando o Postman:
-
URL:
http://localhost:5000/api/predict
- Método: PUBLICAR
-
Corpo:
{ "text" : "This is a sample text to categorize." }
Conclusão
Neste artigo, explicamos como criar uma API de categorização de texto usando TensorFlow.NET e ASP.NET Core. Aproveitando o poder dos recursos de aprendizado de máquina do TensorFlow, você pode aprimorar seus aplicativos .NET com recursos avançados de análise de texto. Seja para organizar o feedback do usuário, filtrar conteúdo ou obter insights de dados textuais, esta API fornece uma base sólida para suas necessidades de categorização de texto.