3 points par GN⁺ 2024-07-28 | 1 commentaires | Partager sur WhatsApp
  • sgrep est un outil en ligne de commande qui effectue une recherche sémantique sur une entrée texte à l’aide d’embeddings de mots
    • Il va au-delà de la simple correspondance de chaînes pour trouver des correspondances sémantiquement similaires à la requête
    • Il est conçu pour offrir une expérience similaire à grep
  • Fonctionnalités
    • Recherche sémantique avec des embeddings Word2Vec
    • Possibilité de définir un seuil de similarité
    • Affichage du contexte avant et après les lignes correspondantes
    • Sortie en couleur pour les mots correspondants et les numéros de ligne
    • Prise en charge de la lecture depuis un fichier ou l’entrée standard
    • Configuration possible via un fichier JSON et des arguments en ligne de commande
  • Exemples d’utilisation
    • Rechercher, dans Le Vieil Homme et la Mer d’Hemingway, des mots similaires à "death" avec le contexte et les numéros de ligne :
      curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \  
      | sgrep -C 2 -n -threshold 0.55 death  
      
    • Cette commande effectue les opérations suivantes :
      • Récupère le texte de Le Vieil Homme et la Mer depuis Project Gutenberg Canada
      • Envoie le texte vers sgrep via un pipe
      • Recherche des mots sémantiquement similaires à "death"
      • Définit le seuil de similarité à 0.55 (-threshold 0.55)
      • Affiche 2 lignes de contexte avant et après chaque correspondance (-C 2)
      • Affiche les numéros de ligne (-n)
    • La sortie affiche le score de similarité, les mots mis en évidence, le contexte et les numéros de ligne
  • Modèle Word2Vec
    • sgrep nécessite un modèle Word2Vec au format binaire. Vous pouvez utiliser un modèle préentraîné comme celui de Google ou l’entraîner vous-même avec des outils comme gensim
    • Téléchargez le fichier .bin en local et mettez à jour config.json
    • download-model.sh est un petit script utilitaire qui enregistre un modèle word2vec compact hébergé par eyaler dans le répertoire models/googlenews-slim/

Résumé de GN⁺

  • sgrep est un outil qui utilise des embeddings de mots pour rechercher, dans un texte, des mots sémantiquement similaires
  • Il offre une expérience proche de grep tout en allant au-delà de la simple correspondance de chaînes
  • Il utilise un modèle Word2Vec pour évaluer la similarité et peut être utilisé de façon flexible grâce à diverses options de configuration
  • Il peut être utile pour l’analyse de texte et les tâches de traitement du langage naturel, en particulier lorsqu’une recherche fondée sur le contexte est nécessaire

1 commentaires

 
GN⁺ 2024-07-28
Avis Hacker News
  • En lisant le code, quelqu’un partage quelques petits conseils

    • les vecteurs peuvent être lus en une seule fois
    • on peut utiliser BLAS pour calculer la similarité plus rapidement
    • si l’on normalise les vecteurs au chargement, la similarité cosinus devient le produit scalaire des vecteurs
    • il se demande si plusieurs CPU peuvent être pris en charge
    • le dépôt word2vec a dépassé son quota de données
    • Stack Overflow et Hugging Face sont proposés comme sources alternatives
  • Cette idée semble très utile, au point de se demander pourquoi personne n’y a pensé plus tôt

  • Il existe déjà un outil et une entreprise appelés semgrep

  • Cet outil serait très utile s’il pouvait gérer des formulations descriptives ou composées

    • le plus gros défaut des moteurs de recherche actuels est la recherche à correspondance unique
  • Outil très sympa

    • il semble découper chaque ligne en mots et utiliser l’embedding de chaque mot
    • quelqu’un se demande s’il est possible d’effectuer une recherche sémantique sur de longues séquences de texte
    • utiliser des vecteurs de mots serait probablement plus rapide et plus léger que d’utiliser un modèle Transformer
    • on pourrait aussi envisager une méthode pour détecter les mots mal séparés et trouver tous les mots apparaissant comme sous-chaînes
  • Cet outil est vraiment très sympa et donne envie de l’essayer

    • la recherche sémantique sur l’ensemble d’un texte offrirait une meilleure expérience utilisateur dans de nombreuses applications
  • fltr est proposé comme outil similaire

    • c’est un équivalent de grep pour les questions en langage naturel
  • Très sympa, et quelqu’un se demande s’il peut aussi rechercher les noms de fichiers

  • Quelqu’un découvre un outil très sympa

    • comme semgrep est déjà utilisé, il faudrait envisager un autre nom