3 pontos por GN⁺ 2024-07-28 | 1 comentários | Compartilhar no WhatsApp
  • sgrep é uma ferramenta de linha de comando que realiza busca semântica para entradas de texto usando embeddings de palavras
    • Vai além da simples correspondência de strings e encontra ocorrências semanticamente semelhantes à consulta
    • Foi projetada para oferecer uma experiência semelhante ao grep
  • Funcionalidades
    • Busca semântica usando embeddings Word2Vec
    • Possibilidade de definir limite de similaridade
    • Exibição do contexto antes e depois das linhas correspondentes
    • Saída com código de cores para palavras correspondentes e números de linha
    • Suporte para leitura de arquivos ou da entrada padrão
    • Configuração por arquivo JSON e argumentos de linha de comando
  • Exemplo de uso
    • Buscar palavras semelhantes a "death" em O Velho e o Mar de Hemingway, com contexto e números de linha:
      curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \
      | sgrep -C 2 -n -threshold 0.55 death  
      
    • Este comando faz o seguinte:
      • Obtém o texto de O Velho e o Mar do Project Gutenberg Canada
      • Envia o texto por pipe para o sgrep
      • Busca palavras semanticamente semelhantes a "death"
      • Define o limite de similaridade como 0.55 (-threshold 0.55)
      • Mostra 2 linhas de contexto antes e depois de cada correspondência (-C 2)
      • Exibe os números de linha (-n)
    • A saída mostra a pontuação de similaridade, as palavras destacadas, o contexto e os números de linha
  • Modelo Word2Vec
    • O sgrep requer um modelo Word2Vec em formato binário. É possível usar um modelo pré-treinado, como o Word2Vec do Google, ou treinar o seu próprio com ferramentas como gensim
    • Baixe o arquivo .bin localmente e atualize o config.json
    • download-model.sh é um script auxiliar simples que salva um pequeno modelo word2vec hospedado por eyaler no diretório models/googlenews-slim/

Resumo do GN⁺

  • sgrep é uma ferramenta que usa embeddings de palavras para buscar termos semanticamente semelhantes em textos
  • Oferece uma experiência de uso parecida com a do grep, mas vai além da simples correspondência de strings
  • Usa um modelo Word2Vec para avaliar similaridade e pode ser usada de forma flexível com várias opções de configuração
  • Pode ser útil em tarefas de análise de texto e processamento de linguagem natural, especialmente quando é necessária busca baseada em contexto

1 comentários

 
GN⁺ 2024-07-28
Comentários no Hacker News
  • Compartilhando algumas pequenas dicas ao ler o código

    • é possível ler os vetores de uma só vez
    • é possível usar BLAS para calcular similaridade mais rapidamente
    • se normalizar os vetores ao carregá-los, a similaridade de cosseno se torna o produto interno dos vetores
    • fica a dúvida se é possível oferecer suporte a várias CPUs
    • o repositório do word2vec excedeu a cota de dados
    • sugere Stack Overflow e Hugging Face como fontes alternativas
  • Essa ideia parece muito útil e dá vontade de saber por que eu não pensei nisso antes

  • Já existe uma ferramenta e uma empresa chamadas semgrep

  • Isso seria muito útil se a ferramenta conseguisse lidar com frases descritivas ou compostas

    • atualmente, a maior desvantagem dos mecanismos de busca é a busca por ocorrência única
  • Ferramenta muito legal

    • parece dividir cada linha em palavras e usar os embeddings de cada palavra
    • fica a dúvida se ela consegue fazer busca semântica em sequências longas de texto
    • usar vetores de palavras provavelmente será mais rápido e leve do que usar um modelo Transformer
    • também daria para considerar uma forma de detectar palavras não bem separadas e encontrar todas as palavras que aparecem como substring
  • Essa ferramenta é muito legal e eu realmente quero experimentá-la

    • a busca semântica ao longo de todo o texto deve oferecer uma experiência de usuário melhor em muitos aplicativos
  • Sugere o fltr como ferramenta semelhante

    • é parecido com grep para perguntas em linguagem natural
  • Muito legal, e fica a dúvida se também é possível pesquisar nomes de arquivos

  • Acabei descobrindo uma ferramenta muito legal

    • como semgrep já está em uso, seria melhor considerar outro nome