Insights a partir de dados não estruturados usando SQL Text Search
O que é Dados Não Estruturados?
Dados não estruturados referem-se a informações que não possuem um modelo de dados ou organização predefinidos. Em contraste com os dados estruturados encontrados em bancos de dados com estruturas claras (por exemplo, tabelas e campos), os dados não estruturados não possuem um esquema fixo. Esse tipo de dado inclui textos, imagens, vídeos, arquivos de áudio, postagens em redes sociais, e-mails e muito mais.
Por que Insights de Dados Não Estruturados São Importantes?
De acordo com um relatório da IDC (International Data Corporation), projeta-se que 80% dos dados mundiais serão não estruturados até 2025, representando uma preocupação significativa para 95% das empresas. Artigo Forbes
Como o Mundo da IA Está Abordando Esta Questão?
No campo da IA, a IA Generativa desempenha um papel crucial em fornecer soluções para dados não estruturados. Ela se destaca em tarefas como extração de informações valiosas de textos/imagens/vídeos, resumo de textos e interação com documentos.
Solução da InterSystems para Dados Não Estruturados
O InterSystems IRIS apresenta uma solução excepcional conhecida como "SQL Text Search" para pesquisa em dados não estruturados. Esse recurso facilita buscas com contexto semântico em dados de texto não estruturados em múltiplos idiomas.
Quais são as vantagens ao usar o SQL Text Search?
Pesquisa Rápida: O SQL Search do InterSystems IRIS navega rapidamente por grandes volumes de dados utilizando geração de índices otimizada, evitando buscas sequenciais nos próprios dados.
Pesquisa Sensível a Palavras: Diferente de uma busca básica por strings, o SQL Search se baseia em estruturas semânticas dentro do texto, tratando a palavra como unidade fundamental. Essa abordagem minimiza falsos positivos provenientes de strings embutidas ou strings que atravessam duas palavras.
Pesquisa Sensível a Entidades: O SQL Search considera relações semânticas para agrupar múltiplas palavras em entidades. Ele pode buscar sequências específicas de palavras, palavras próximas (independentemente da ordem) e palavras no início ou no fim de uma entidade, permitindo buscas contextuais precisas.
Pesquisa Sensível ao Idioma: O reconhecimento das relações semânticas é específico para cada idioma, e o SQL Search incorpora modelos de linguagem para dez idiomas naturais. Também suporta outros idiomas sem necessidade de criação de dicionário ou ontologia.
Correspondência de Padrão: O SQL Search oferece correspondência com wildcard e expressões regulares (RegEx) para padrões de caracteres.
Correspondência Aproximada (Fuzzy): O SQL Search inclui capacidades de busca aproximada para correspondências próximas, considerando um grau calculado de variação em relação à string de busca. Isso facilita correspondências mesmo em casos de erros ortográficos.
Correspondência Derivada: O SQL Search emprega decompounding para corresponder palavras raiz e componentes, e utiliza tabelas de sinônimos para corresponder palavras e frases sinônimas.
Como Implementar SQL Text Search com Dados Não Estruturados: Um Exemplo Prático com MIND
Para demonstrar a implementação do SQL Text Search com dados não estruturados, usaremos o Microsoft News Dataset (MIND) como exemplo, focando em um pequeno conjunto de treinamento.
Observação: Os exemplos fornecidos utilizam o namespace User, mas você pode substituí-lo por qualquer namespace adequado, garantindo que todas as operações ocorram dentro do mesmo namespace.
Passo 1: Baixar e Extrair o Conjunto de Dados de Treinamento
Baixe o dataset de treinamento MIND MIND (msnews.github.io) e extraia o arquivo news.tsv do arquivo compactado. O arquivo é delimitado por tabulação, e vamos focar principalmente nos campos "category", "title" e "description".
Passo 2: Criar uma Classe Persistente
Crie uma classe persistente chamada Test.JSON com as propriedades: "Title" (String), "Category" (String) e "Description" (String). Crie um índice %Find.Basic especificamente para a propriedade "Description" para melhorar o desempenho da pesquisa de texto. Após criar o índice, compile a classe.
Passo 3: Carregar o Dataset MIND
Carregue o dataset MIND na classe recém-criada. Você pode popular a tabela usando métodos de classe e objeto ou SQL. O código a seguir demonstra o carregamento do dataset usando métodos de classe e objeto.
Passo 4: Verificar o Carregamento do Dataset
Após carregar o dataset, consulte a tabela para garantir que ela contenha corretamente as linhas esperadas. Você pode usar o SQL Management Portal ou o SQL Shell no Terminal para essa verificação.
Passo 5: Utilizar o Índice para Consultas
Agora, aproveite o índice específico para criar consultas e extrair insights. Por exemplo, você pode usar as seguintes consultas:
Recupera notícias da empresa Microsoft:
SELECT %iFind.Highlight(Description,'"microsoft*"') FROM Test.JSON WHERE %ID %FIND search_index(DescriptionIdx,'"microsoft*"',0,'en')
Recuperar notícias da empresa Google:
SELECT %iFind.Highlight(Description,'"google*"') FROM Test.JSON WHERE %ID %FIND search_index(DescriptionIdx,'"google*"',0,'en')
Recuperar notícias combinadas do Google e Microsoft:
SELECT %iFind.Highlight(Description,'"microsoft*" "google*"') FROM Test.JSON WHERE %ID %FIND search_index(DescriptionIdx,'"microsoft*" "google*"',0,'en')Aviso:
É crucial estar ciente de que os índices de Semantic e Analytic SQL Search utilizam o Natural Language Processing (NLP) do InterSystems IRIS, que a InterSystems descontinuou. Na versão mais recente da community edition (2023.3.0), esse recurso ainda funciona, mas pode ser removido em versões futuras. Use o SQL Text Search por sua própria conta e risco.
Escreverei a continuação deste artigo com opções alternativas para o SQL Text Search descontinuado. Se você gostou do meu artigo, por favor, vote e forneça suas valiosas sugestões abaixo. Obrigado!