3 puntos por GN⁺ 2024-07-28 | 1 comentarios | Compartir por WhatsApp
  • sgrep es una herramienta de línea de comandos que realiza búsquedas semánticas sobre texto usando embeddings de palabras
    • Va más allá de la coincidencia simple de cadenas y encuentra coincidencias semánticamente similares a la consulta
    • Está diseñada para ofrecer una experiencia similar a grep
  • Funciones
    • Búsqueda semántica usando embeddings de Word2Vec
    • Posibilidad de configurar un umbral de similitud
    • Muestra el contexto antes y después de las líneas coincidentes
    • Salida con códigos de color para las palabras coincidentes y los números de línea
    • Soporte para leer desde archivos o desde la entrada estándar
    • Configuración posible mediante archivos JSON y argumentos de línea de comandos
  • Ejemplo de uso
    • Buscar palabras similares a "death" en "El viejo y el mar" de Hemingway, con contexto y números de línea:
      curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \
      | sgrep -C 2 -n -threshold 0.55 death  
      
    • Este comando hace lo siguiente:
      • Obtiene el texto de "El viejo y el mar" desde Project Gutenberg Canada
      • Envía el texto por tubería a sgrep
      • Busca palabras semánticamente similares a "death"
      • Establece el umbral de similitud en 0.55 (-threshold 0.55)
      • Muestra 2 líneas de contexto antes y después de cada coincidencia (-C 2)
      • Muestra los números de línea (-n)
    • La salida muestra el puntaje de similitud, las palabras resaltadas, el contexto y los números de línea
  • Modelo Word2Vec
    • sgrep requiere un modelo Word2Vec en formato binario. Puedes usar un modelo preentrenado, como el de Google Word2Vec, o entrenar uno tú mismo con herramientas como gensim
    • Descarga el archivo .bin localmente y actualiza config.json
    • download-model.sh es un script auxiliar simple que guarda un modelo pequeño de word2vec alojado por eyaler en el directorio models/googlenews-slim/

Resumen de GN⁺

  • sgrep es una herramienta para buscar palabras semánticamente similares en texto usando embeddings de palabras
  • Ofrece una experiencia de uso parecida a grep, pero con capacidades que van más allá de la coincidencia simple de cadenas
  • Usa modelos Word2Vec para determinar similitud y puede utilizarse de forma flexible mediante varias opciones de configuración
  • Puede ser útil en tareas de análisis de texto y procesamiento de lenguaje natural, especialmente cuando se necesita búsqueda basada en contexto

1 comentarios

 
GN⁺ 2024-07-28
Comentarios en Hacker News
  • Mientras leía el código, compartió algunos consejos pequeños

    • Se pueden leer los vectores de una sola vez
    • Se puede usar BLAS para calcular la similitud más rápido
    • Si se normalizan los vectores al cargarlos, la similitud coseno se convierte en el producto punto de los vectores
    • Se pregunta si puede dar soporte a varios CPU
    • El repositorio de word2vec excedió la cuota de datos
    • Propone Stack Overflow y Hugging Face como fuentes alternativas
  • Esta idea parece muy útil y se pregunta por qué no se le ocurrió antes

  • Ya existe una herramienta y una empresa llamadas semgrep

  • Esta herramienta sería muy útil si pudiera manejar frases descriptivas o compuestas

    • Actualmente, la mayor desventaja de los motores de búsqueda es la búsqueda de un solo acierto
  • Es una herramienta muy genial

    • Parece que divide cada línea en palabras y usa el embedding de cada palabra
    • Se pregunta si puede buscar semánticamente secuencias de texto largas
    • Usar vectores de palabras sería más rápido y ligero que usar modelos Transformer
    • También podría considerarse una forma de detectar palabras que no están bien separadas y encontrar todas las palabras que aparecen como subcadenas
  • Esta herramienta está muy buena y le gustaría probarla sí o sí

    • La búsqueda semántica en todo el texto ofrecería una mejor experiencia de usuario en muchas aplicaciones
  • Propone fltr como una herramienta similar

    • Es parecido a grep para preguntas en lenguaje natural
  • Está muy bueno, y se pregunta si también puede buscar nombres de archivos

  • Le parece una herramienta muy genial

    • Como semgrep ya está en uso, habría que considerar otro nombre