$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Este estudo foi conduzido de acordo com as diretrizes do Comitê de Ética em Pesquisa da Universidade Nacional da Malásia (UKM) e aprovado sob o número de aprovação UKM FST/2025-AI/023. O consentimento informado por escrito foi obtido de todos os participantes antes da coleta de consultas do chatbot. Todos os dados foram anonimizados para garantir a confidencialidade e privacidade dos participantes
Visão geral do estudo
A visão geral do sistema de restauração inteligente proposto assistido por tecnologias de IA é mostrada na Figura 1. Conforme ilustrado, a entrada do cliente é pré-processada com as técnicas de NLP, como incorporação de palavras, lematização e tokenização para extrair as tags. Em seguida, o modelo de ML chamado LDA foi aplicado à modelagem de tags de clientes para fornecer serviço sem contato a eles. A sugestão alimentar é realizada por meio de um modelo Conv-RNN. Com base na sequência de fluxo registrada a partir das escolhas do cliente anterior, o alimento é sugerido ao cliente de forma inteligente. Por fim, o nível de satisfação do cliente é previsto usando um modelo Conv-LSTM otimizado para melhoria adicional nos serviços do restaurante. O desempenho dos modelos de IA propostos é avaliado sob as várias métricas de avaliação.

Figura 1: Modelo de sistema proposto para serviços de catering inteligentes (ICS). A arquitetura integra interação do usuário, pré-processamento de dados, detecção de intenção, recomendação de alimentos e mecanismos de feedback. Clique aqui para ver uma versão maior desta figura.
Conjunto de dados usado
Para criar o sistema de catering inteligente, reunimos 283 solicitações de um restaurante próximo usando um chatbot. Essas perguntas, que incluíam uma ampla variedade de consultas de clientes, desde detalhes do menu até horários de funcionamento, foram divididas manualmente em 15 grupos de intenções diferentes. Isso garante uma cobertura completa de todas as possíveis interações do usuário com o sistema. Saudações, despedidas, apreciação, catering, horários, configuração, informações de contato, perguntas sobre pagamentos, menu de hoje, alternativas de entrega, perguntas do menu, processos de pedidos, ofertas especiais, reservas, opções de bebidas e acessibilidade para sentar ao ar livre são apenas alguns dos aspectos específicos das consultas dos clientes que as classes de intenção foram feitas para registrar. A Tabela 1 mostra a frequência das perguntas em cada um dos grupos de propósito e a classificação de acordo com a substância temática das perguntas. Por exemplo, a categoria Informações de contato teve as maiores consultas, sugerindo que os clientes estão muito interessados em saber como entrar em contato com o restaurante. Por outro lado, as categorias Assentos e Bebidas foram as que receberam menos consultas, o que pode indicar que há menos interesse do consumidor por esses assuntos ou que já há mais esclarecimentos sobre eles.
Serviço sem contato usando NLP com LDA
A entrada do usuário que inicia a atividade da estrutura é inicialmente pré-processada para padronizar o texto e eliminar o ruído. Tokenização, eliminação de palavras irrelevantes e lematização são exemplos dessa preparação, que prepara os dados para análises adicionais. Após o processamento preliminar, as consultas dos usuários são convertidas em representações numéricas. Ligações semânticas e relevância contextual estão entre as características linguísticas capturadas por essas representações. Vários classificadores de aprendizado de máquina foram usados para treinar essas representações vetoriais de consultas de usuários para a classificação de 16 classes predefinidas (intenções/tags). O modelo busca a resposta relacionada predeterminada e a retorna ao usuário depois de prever com precisão as intenções de consulta do usuário.
Pré-processamento
A confiabilidade de nossa análise é bastante aprimorada pelas consultas pré-processadas, que verificam se os dados recebidos estão formatados de forma consistente e relevante para o procedimento de classificação a seguir. Os padrões de intenção (por exemplo, saudações como oi, olá, ei) foram coletados e pré-processados convertendo texto em minúsculas, removendo palavras de parada e aplicando tokenização usando o kit de ferramentas NLTK33. A Tabela 2 mostra as etapas de pré-processamento seguidas por este estudo.
Modelagem de tags baseada em LDA
O sistema classifica as tags do usuário usando a Regressão de Vetor de Suporte (SVR) para que as saudações do usuário sejam reconhecidas pelo sistema. Para melhorar a capacidade do sistema de antecipar a intenção do usuário, examinamos minuciosamente os métodos de processamento de texto convencionais e de ponta, além dos modelos de Machine Learning (ML) e Deep Learning (DL). Construir um algoritmo altamente preciso que pudesse compreender uma ampla gama de perguntas do usuário era nosso objetivo. Este estudo empregou as estratégias fundamentais do Bag of Words (BoW) e do TF-IDF devido à sua facilidade de uso e potência em enfatizar a frequência das palavras e a importância das palavras no texto. A capacidade de Glove e Word2Vec de produzir incorporações de palavras de acordo com o uso de palavras juntas permitiu que eles fornecessem conhecimento dos significados e do contexto das palavras22.
Depois que os dados são preparados, as consultas de intenções são classificadas usando o método de alocação latente de Dirichlet (LDA). O objetivo é usar a mineração de texto com o método LDA para analisar as conexões entre os termos e identificar padrões em suas estruturas34,35. Não supervisionado e de natureza probabilística, o LDA assume que cada documento em um corpus é composto por um número predeterminado de temas definidos manualmente. Cada documento no LDA tem o mesmo peso e tem um saco de palavras. Presume-se que as palavras de cada documento não sejam ordenadas. Um tópico também é descrito usando uma função de massa de probabilidade de palavras. Cada documento usa uma função de massa de probabilidade para escolher temas. Para classificação de intenção, a Alocação Latente de Dirichlet (LDA) foi aplicada usando a biblioteca GensimPython34.
No LDA, as intenções são vistas como a distribuição sobre o latente que é denotada pelo ar de distribuição LDA chamado
. Um padrão é selecionado com base na distribuição de intenção, que é denotada como θ (multinomial) que define a intenção dada, a probabilidade de I pertence à classe C dada. Uma distribuição de Dirichlet está relacionada a β que codifica o padrão em um saco de palavras. Dada a α e β, é definida como a distribuição multivariada com N palavras relacionadas a M padrões com z intenções. O grupo de N termos é denotado como W, que é dado como36:
(1)
Ao integrar sobre θ, a soma é declarada como Z, e o produto é tomado das probabilidades da marginal das intenções individuais, e toda a probabilidade da intenção é calculada como,
(2)
Os padrões, incluindo as variações de intenção para saudações, são oi, olá, Ei, Bom dia/meio-dia/véspera e hola. Ao receber esses padrões, o sistema encontra a intenção do usuário como saudações e responde a elas consequentemente com a frase definida, como O que posso ajudá-lo? ou Como posso ajudá-lo? Se a consulta não for reconhecida pelo sistema com as 15 classes predefinidas, o sistema fornecerá informações sobre o restaurante e sugerirá que o usuário se comunique com o atendimento ao cliente. O resultado da modelagem de tags baseada em LDA de consultas de usuário relacionadas a saudações é mostrado na Figura 2. Da mesma forma, as respostas são realizadas para todas as 15 classes relacionadas às intenções do usuário (Consultas). O modelo LDA tem os seguintes parâmetros. O número de tópicos (k) é declarado como 40, Alfa é fixado como 0,05, o valor Beta é 0,04 e o número de iterações é declarado como 100.
Sugestão de alimentos usando Bi-NN para ICS
No Sistema de Catering Inteligente (ICS), os alimentos são sistematicamente categorizados para apoiar recomendações precisas. Cada entrada do menu pode representar um único item (por exemplo, hambúrguer, lanche, bebida) ou uma combinação de itens, como um conjunto de refeições (por exemplo, frango frito com uma bebida gelada). Esses itens são agrupados em seis categorias principais: frango, hambúrguer, lanche, bebida, terno e tiffin. Para maior clareza, o terno refere-se a conjuntos de refeições embalados, enquanto o tiffin representa as refeições tradicionais com vários itens. Cada alimento é definido por três características principais: seu preço, sua categoria e um vetor de conteúdo que descreve sua composição. Essa categorização estruturada permite que o modelo de recomendação analise os históricos de compras do cliente nos níveis de item e categoria, melhorando a capacidade do sistema de sugerir refeições e combos relevantes que se alinhem às preferências do usuário. Todos os alimentos no ICS são um conjunto denotado como,
onde N denota o número total de itens alimentares no ICS. Para cada produto
alimentício em F,
consiste em detalhes das características do alimento, e é denotado como,
(3)
onde,
denota os preços dos alimentos,
denota a categoria dos itens alimentares onde
, C denota as categorias.
denota o número de menus onde
onde M denota os menus
denota o vetor de conteúdo de comida, onde
onde
é o elemento do vetor de conteúdo e representa frango, hambúrguer, lanche, bebida, terno e Tiffin, respectivamente.
Os dados do usuário consistem em detalhes sobre o usuário para denotar os recursos do usuário que podem ser obtidos do aplicativo ou do fluxo de uso. Para cada usuário
, os recursos são indicados como,
(4)
onde
, denota os detalhes sobre o usuário, como idade e sexo.
denota o evento de clique do usuário, que é um vetor de comprimento variável em
que e t declara a hora do evento de clique recente,
é o número positivo e
denota toda a sequência de fluxo que denota toda a compra realizada pelo usuário.
Denota a lista de alimentos comprados pelo cliente, onde
, k denota a quantidade total de alimentos comprados pelo usuário.
Com o uso de F e U, que denotam itens alimentares e dados do usuário, respectivamente, o sistema de recomendação é enquadrado no ICS. O objetivo deste sistema é melhorar a precisão para aumentar a intenção de compra do usuário. O problema do ICS é formulado como,
(5)
A Equação (5) denota o objetivo do problema de encontrar resultados de precisão aprimorados no problema ICS, reduzindo a função de perda que é denotada na Equação (6).
(6)
onde,
é o resultado previsto e
é o resultado real. O modelo tem melhor desempenho quando o valor da função de perda é menor. A função de perda é empregada para determinar a discrepância entre o valor previsto do modelo e o valor real Y. Neste,
(7)
onde
(8)
(9)
Neste, r denota os dados de treinamento em X e s é o número do item de alimento comprado de um dado de treinamento. O ICS desenvolvido empregou a entropia cruzada como uma função de perda, que é descrita na seção a seguir.
Recomendação alimentar baseada em Conv-RNN
Ao analisar os atributos do produto, classificações de usuários e perfis de usuários, um sistema de recomendação baseado em Conv-RNN fornece aos usuários recomendações com base em seus interesses. A Figura 3 mostra o projeto CRNN proposto. Os modelos Conv-RNN frequentemente consideram ou adicionam automaticamente informações específicas sobre o contexto temporal do usuário ao fazer sugestões. No entanto, o quão bem um sistema de recomendação compreende e utiliza o contexto fornecido pelas solicitações de sugestão geralmente determina sua eficácia. O Conv-RNN calcula as classificações de previsão com base nos recursos e atributos dinâmicos do item e no contexto de tempo atual do usuário para fornecer recomendações adequadas para um usuário específico. É inevitável que as pessoas que estão passando por coisas semelhantes ao mesmo tempo tenham preferências semelhantes. A eficácia de um sistema de reconhecimento de tempo baseado na CNN para recomendações depende de sua capacidade de encontrar usuários que sejam mais comparáveis ao receptor pretendido e compartilhem o mesmo contexto temporal. Assim, a CNN registra o contexto temporal, que são as informações sensíveis ao tempo sobre a atividade do usuário. A camada de entrada da CNN foi então alimentada com os atributos do usuário, características do item e informações de tempo para reconstruir a matriz original. Um método para calcular a saída final é dado uma vez que a camada de convolução tenha sido usada para extrair recursos da matriz.
A partir das camadas de convolução, os eventos de clique de alimentos são extraídos usando Eqn (10)
(10)
onde O é o tamanho da saída, X é o tamanho dos dados de entrada, F é o tamanho do kernel convolucional, a é para preencher os dados de entrada e S é maior que 1 e S é o passo do kernel. A rede neural pode modelar modelos mais complexos do que se estivesse restrita a simular cálculos entre camadas vizinhas da rede, o que faz usando uniformidade, mas apenas operação linear, porque a função de ativação dentro da camada de estimulação é usada para realizar operações não lineares. Em uma rede neural, a comunicação camada a camada é estritamente sequencial. Em Conv-RNN, as funções de ativação foram as mais prevalentes. O Tanh convencional, sigmóide e outros tipos de funções de ativação não possuem um gradiente e têm intervalos de intervalo pequenos e práticos. Quando uma operação não linear eficiente em termos de recursos também é usada, as funções de unidade linear retificada (ReLU) tornam-se o principal instrumento para superar esses dois problemas.
Para eficiência computacional, a camada de pooling reduz a amostragem e processa esparsamente os dados de recursos. Os métodos de pooling máximo e médio são dois exemplos bem conhecidos de algoritmos de pooling; MaxPooling fornece melhores resultados de seleção de recursos. MaxPooling selecionou os seguintes recursos:
(11)
O Conv-RNN então emprega a camada totalmente conectada usando duas abordagens densas para treinar novamente a cauda do Conv-RNN com menos perda de informações de recursos. As camadas recorrentes são comumente usadas em redes neurais para a análise de dados sequenciais. Por causa das conexões que permitem manter uma memória interna de entradas anteriores, as camadas recorrentes lidam com cada entrada separadamente, ao contrário das camadas feedforward tradicionais. Isso torna as camadas recorrentes particularmente adequadas para tarefas que envolvem sequências, dados de séries temporais ou qualquer tipo de informação em que a ordem das entradas seja importante. A unidade fundamental de uma camada recorrente é o neurônio recorrente, muitas vezes conhecido como célula RNN. À medida que as células RNN lidam com as entradas uma de cada vez, elas mantêm um estado interno que contém dados de entradas anteriores. Sua condição interna é alterada a cada passo de tempo, o que influencia o processamento de entradas subsequentes. A camada de saída mostra ao usuário os resultados após usar o classificador SoftMax. Antes de usar os campos, cujas características são categorizadas como o índice da matriz incorporada, eles devem primeiro ser convertidos em números inteiros.
A função de perda de entropia cruzada categórica, que quantifica a diferença entre os rótulos de classe verdadeiros y e a distribuição de probabilidade projetada y', foi usada para treinar o modelo de recomendação Conv-RNN. O gradiente descendente estocástico (SGD) com estimativa de momento adaptativo (Adam) foi usado para melhorar os parâmetros do modelo θ (pesos e vieses). Os parâmetros foram modificados da seguinte forma em cada iteração de treinamento t:
(12)
onde, η é a taxa de aprendizado,
é o gradiente da função de perda em relação a θ.
As seguintes táticas foram usadas para evitar o overfitting. Durante o treinamento, a regularização de abandono (ρ = 0,3) é usada em camadas totalmente ligadas para desativar neurônios aleatoriamente. Quando nenhuma melhora foi observada por 15 épocas consecutivas, o treinamento foi interrompido precocemente com base na perda de validação.
Validação cruzada dividida em cinco vezes para confirmar o desempenho da generalização
Usando uma pesquisa em grade no conjunto de validação, o ajuste de hiperparâmetro foi realizado. Incluídos no espaço de pesquisa estavam o número de filtros para a camada de convolução, 64, o tamanho do kernel, 3 x 3, o número de camadas recorrentes como 100, o tamanho do lote, taxa de abandono 0,2 e taxa de aprendizado 0,002. O otimizador usado é o ADAM. Finalmente, a camada de saída retorna os resultados dos alimentos recomendados como um vetor de codificação one-hot, onde os alimentos sugeridos são indicados por um e outras saídas serão denotadas como 0.
Previsão de satisfação do cliente usando Conv-LSTM
Este estudo utilizou a Memória de Longo Curto Prazo de Convolução (Conv-LSTM) para prever a satisfação do cliente depois de terminar o serviço de bufê. A estrutura do Conv-LSTM é mostrada na Figura 4. A arquitetura da CNN inclui neurônios de entrada, uma série de camadas convolucionais, pooling, camadas completamente conectadas e camadas de normalização37. As células nervosas da camada de convolução estão conectadas à camada acima dela por meio de uma região estreita, enquanto os neurônios de ativação das camadas totalmente ligadas estão totalmente relacionados às camadas abaixo delas. As entradas Conv-LSTM definem explicitamente as formas tensoriais e a granularidade temporal. Cada sequência de entrada é estruturada por sessão de pedido do cliente (intervalo de tempo = por pedido), onde a lista de compras é codificada como um vetor multi-hot e o nível de satisfação associado é representado como uma pontuação numérica. O tensor resultante tem a forma (tamanho do lote × comprimento da sequência × dimensão do recurso).
A transmissão reversa para frente e para trás de uma função na CNN geralmente separa os fatores em diferentes grupos com base em sua entrada. Numerosos projetos da CNN surgiram como resultado de recentes avanços de pesquisa. Conforme mostrado na Equação (15), três pesos, iw, rw e b, denotam peso de entrada, peso recorrente e viés, respectivamente, que foram empregados em cada bloco LSTM.
(13)
A seguir está uma declaração do estado da célula na etapa de tempo t:
(14)
onde o produto Hadamard é denotado por . O código para o estado oculto Ht de t é,
(15)
Os hiperparâmetros e seus valores de Conv-LSTM são declarados da seguinte forma: O número de filtros para a camada de convolução é 64, o tamanho do kernel é 3 x 3, as unidades LSTM são 100 com uma taxa de desistência de 0,2, o tamanho do lote é 64, a taxa de aprendizado é 0,002 e o número de intervalos de tempo é 50 com o otimizador Adam.
Diagrama UML e pseudocódigo para interação com o cliente
O fluxo dinâmico de interações no sistema sugerido é representado no diagrama de sequência UML (Figura 5). O módulo NLP–LDA processa a solicitação do usuário (como um pedido de refeição ou consulta) para modelagem de tópicos e extração de intenção. Após o processamento, o mecanismo de recomendação (Conv-RNN) recebe a solicitação e produz uma recomendação personalizada. Por fim, o usuário recebe uma resposta em tempo real do sistema. Essa sequência garante transparência na conversão da entrada do usuário em saídas de serviço inteligentes e enfatiza a interação modular dos componentes.
O algoritmo de recomendação Conv-RNN recebeu pseudocódigo para melhorar a reprodutibilidade. Ele fornece uma visão geral da lógica computacional sequencial, que inclui o pré-processamento da solicitação do usuário, usando camadas convolucionais e recorrentes para modelagem de sequência e extração de recursos, regularização e uma camada de saída softmax para gerar uma sugestão. Esse pseudocódigo oferece uma visão clara do fluxo de trabalho do modelo em nível de implementação, o que aprimora as formulações matemáticas.
Pseudocódigo: Algoritmo de recomendação Conv-RNN
Entrada: solicitação do usuário U, sequência de interação histórica H
Saída: Item de alimento recomendado R
- Pré-processe U → tokenize, incorpore com Word2Vec
- Construa a sequência de entrada S = [H, U]
- Aplicar camada convolucional:
S_conv = Conv1D(S, filtros, kernel_size)
- Passagem pela camada recorrente (RNN/GRU):
S_RNN = RNN(S_conv, hidden_units)
- Aplicar Dropout para regularização
- Camada densa com ativação Softmax:
P = Softmax(W xS_rnn + b)
- Selecione a recomendação:
R = argmax (P)
- Retornar R para o usuário