Ir para o conteúdo principal
  1. Os meus escritos/

Por Baixo do Capô: A Implementação Técnica do Sistema de PLN e RDF do NomNom

À medida que continuamos a desenvolver o NomNom, o nosso chatbot inteligente de receitas, estamos entusiasmados em partilhar alguns dos detalhes técnicos por trás da sua implementação. No seu núcleo, o NomNom combina técnicas avançadas de Processamento de Linguagem Natural (PLN) com um robusto grafo de conhecimento baseado em RDF para proporcionar uma experiência fluida de pesquisa conversacional de receitas.

O Pipeline de PLN: Da Entrada do Utilizador à Consulta Estruturada #

O nosso pipeline de PLN foi concebido para transformar consultas em linguagem natural dos utilizadores em representações estruturadas que podem ser utilizadas para consultar o nosso grafo de conhecimento RDF. Eis uma descrição dos componentes principais:

  1. Tokenização: Utilizamos o Natural Language Toolkit (NLTK) para Python para dividir a entrada do utilizador em tokens individuais. Este passo é crucial para o processamento posterior.

  2. Etiquetagem de Partes do Discurso: Aplicamos o etiquetador de partes do discurso do NLTK para identificar o papel gramatical de cada palavra na consulta. Isto ajuda a compreender a estrutura do pedido do utilizador.

  3. Reconhecimento de Entidades Nomeadas (REN): Desenvolvemos um modelo REN personalizado utilizando o Stanford NER e dados de treino adicionais específicos para o domínio culinário. Isto permite-nos identificar ingredientes, métodos de cozinha, cozinhas e outras entidades relevantes na consulta do utilizador.

  4. Análise de Dependências: Utilizamos o Stanford Parser para compreender as relações entre diferentes partes da consulta, o que é particularmente útil para pedidos complexos.

  5. Classificação de Intenções: Implementámos um modelo de classificação multi-classe utilizando o scikit-learn para categorizar as consultas dos utilizadores em intenções como pesquisa de receitas, inquérito nutricional ou explicação de técnicas de cozinha.

  6. Geração de Consultas: Com base nas entidades extraídas, intenção identificada e estrutura analisada, geramos uma consulta SPARQL que pode ser executada no nosso grafo de conhecimento RDF.

Grafo de Conhecimento RDF: O Cérebro do NomNom #

O nosso grafo de conhecimento RDF é construído e gerido utilizando a framework Apache Jena. Eis como estruturámos e implementámos este componente crucial:

  1. Design da Ontologia: Desenvolvemos uma ontologia OWL personalizada que define classes e propriedades para receitas, ingredientes, métodos de cozinha, informação nutricional e mais. Esta ontologia serve como esquema para o nosso grafo de conhecimento.

  2. Ingestão de Dados: Criámos scripts Python que transformam dados de receitas de várias fontes (websites, livros de cozinha, submissões de utilizadores) em triplos RDF em conformidade com a nossa ontologia.

  3. Armazenamento de Triplos: Utilizamos o Apache Jena TDB como o nosso armazenamento de triplos, que fornece armazenamento e consulta eficientes de dados RDF.

  4. Endpoint SPARQL: Configurámos um servidor Fuseki para fornecer um endpoint SPARQL, permitindo que o nosso sistema de PLN consulte o grafo de conhecimento.

  5. Motor de Inferência: Aproveitamos as capacidades de inferência incorporadas do Jena para derivar factos e relações adicionais, melhorando a riqueza do nosso grafo de conhecimento.

Ligação entre PLN e RDF: Execução de Consultas e Geração de Respostas #

Uma vez que temos uma consulta SPARQL gerada a partir da entrada do utilizador, o processo continua da seguinte forma:

  1. Execução da Consulta: A consulta SPARQL é enviada para o nosso servidor Fuseki e executada no grafo de conhecimento RDF.

  2. Processamento de Resultados: Os resultados da consulta, devolvidos como RDF, são processados e transformados num formato mais utilizável para o nosso sistema de geração de respostas.

  3. Geração de Respostas: Utilizamos um sistema baseado em modelos, implementado em Python, para gerar respostas em linguagem natural com base nos resultados da consulta e na intenção original do utilizador.

  4. Gestão de Diálogo: Uma máquina de estados simples mantém o controlo do contexto da conversa, permitindo perguntas de acompanhamento e esclarecimentos.

Desafios e Soluções #

O desenvolvimento do NomNom não foi isento de desafios. Eis alguns que encontrámos e como os abordámos:

  1. Complexidade das Consultas: Alguns pedidos dos utilizadores podem ser bastante complexos. Implementámos um sistema de decomposição de consultas que divide consultas complexas em sub-consultas mais simples.

  2. Resolução de Ambiguidades: Os termos culinários podem frequentemente ser ambíguos. Utilizamos uma combinação de análise de contexto e solicitações de esclarecimento ao utilizador para resolver ambiguidades.

  3. Otimização de Desempenho: À medida que o nosso grafo de conhecimento cresce, o desempenho das consultas pode ser afetado. Implementámos mecanismos de cache e técnicas de otimização de consultas para manter a capacidade de resposta.

  4. Suporte Multilingue: Para atender a um público global, estamos a trabalhar na extensão do nosso pipeline de PLN para suportar múltiplos idiomas, começando com espanhol e francês.

Melhorias Técnicas Futuras #

Ao olhar para o futuro, estamos entusiasmados com várias melhorias técnicas no nosso roteiro:

  1. Aprendizagem Profunda para PLN: Estamos a explorar o uso de modelos de aprendizagem profunda, particularmente redes LSTM, para melhorar as nossas capacidades de PLN.

  2. Grafo de Conhecimento Distribuído: Para lidar com volumes de dados crescentes, estamos a investigar soluções de armazenamento RDF distribuído como o Apache Rya.

  3. Integração de Dados em Tempo Real: Estamos a desenvolver um sistema para atualizar dinamicamente o nosso grafo de conhecimento com novas receitas e conteúdo gerado pelos utilizadores.

  4. Raciocínio Semântico: Planeamos aproveitar capacidades de raciocínio semântico mais avançadas para fornecer recomendações de receitas e substituições ainda mais inteligentes.

O NomNom representa uma interseção emocionante de PLN, tecnologias da web semântica e inteligência artificial. Ao combinar estas tecnologias de ponta, estamos a criar um chatbot que não só compreende receitas, mas também pode envolver-se em conversas culinárias significativas com os utilizadores.

Fiquem atentos para mais análises técnicas aprofundadas à medida que continuamos a melhorar e expandir as capacidades do NomNom!