043_vector_databases - IUGO-Studio/tech-ia GitHub Wiki

Resumen general:

El video explica el concepto de bases de datos vectoriales y cómo utilizarlas, específicamente con Pinecone (una base de datos vectorial alojada). Se describe una base de datos vectorial como un tipo de base de datos optimizada para almacenar y buscar "embeddings" (representaciones vectoriales de datos, como texto), lo que permite buscar por similitud semántica en lugar de solo por palabras clave. Se utiliza un ejemplo práctico basado en un artículo de blog sobre "Generative Question Answering with Long-Term Memory" para demostrar cómo: 1) generar embeddings a partir de texto utilizando la API de OpenAI, 2) crear un índice en Pinecone, 3) insertar los embeddings en el índice, y 4) realizar consultas para recuperar información relevante basada en la similitud vectorial.

Conceptos clave:

  • Base de datos vectorial (Vector Database): Un tipo de base de datos optimizada para almacenar y buscar embeddings.
  • Embeddings: Representaciones vectoriales de datos (texto, imágenes, audio, etc.) que capturan su significado semántico.
  • Pinecone: Una base de datos vectorial alojada (servicio en la nube).
  • Similitud semántica: La medida en que dos fragmentos de texto (u otros datos) tienen un significado similar.
  • Índice (Index): Una estructura de datos que permite una búsqueda rápida y eficiente en una base de datos.
  • API de OpenAI: Una interfaz para acceder a los modelos de lenguaje de OpenAI, incluyendo la generación de embeddings.
  • Ventana de contexto (Context Window): Limite de tokens que un LLM puede procesar.
  • Alucinación (Hallucination): Cuando un LLM genera información falsa o incorrecta.
  • Stride: Técnica para crear solapamiento entre fragmentos de texto al generar embeddings, para evitar perder contexto.
  • Prompt Engineering: El arte de crear prompts.
  • LLM: Modelo de lenguaje extenso.

Ejemplos prácticos:

  1. Generación de embeddings:

    • Se utiliza la API de OpenAI para generar embeddings a partir de fragmentos de texto (en este caso, transcripciones de un video de YouTube).
    • Se muestra que los embeddings son vectores con una dimensionalidad específica (1536 dimensiones en el ejemplo).
  2. Creación de un índice en Pinecone:

    • Se utiliza la API de Pinecone para crear un índice, especificando la dimensionalidad de los embeddings y otras configuraciones.
  3. Inserción de embeddings en el índice:

    • Se procesa el conjunto de datos (transcripciones de YouTube) en lotes.
    • Se generan embeddings para cada lote de texto.
    • Se insertan los embeddings en el índice de Pinecone, junto con metadatos (como el texto original).
  4. Realización de consultas:

    • Se genera un embedding para la consulta del usuario.
    • Se utiliza la API de Pinecone para buscar en el índice los embeddings más similares al embedding de la consulta.
    • Se recuperan los fragmentos de texto correspondientes a los embeddings más similares.
    • Se utiliza el texto recuperado como contexto para responder a la pregunta del usuario, mejorando la precisión y reduciendo la alucinación.

Consejos y buenas prácticas:

  • Utiliza una base de datos vectorial para tareas que requieran búsqueda semántica: Si necesitas buscar información basada en el significado, en lugar de solo por palabras clave, una base de datos vectorial es una buena opción.
  • Considera el tamaño de los fragmentos de texto al generar embeddings: Fragmentos más pequeños (ej: oraciones) capturan mejor el significado específico, mientras que fragmentos más grandes (ej: párrafos) proporcionan más contexto.
  • Utiliza la técnica de "stride" para crear solapamiento entre fragmentos: Esto ayuda a evitar perder contexto al dividir el texto en fragmentos.
  • Gestiona el límite de la ventana de contexto: Asegúrate de que la cantidad total de texto (consulta + contexto) no exceda el límite del modelo.
  • Experimenta con diferentes parámetros: Ajusta el tamaño de los lotes, el "stride", el número de resultados recuperados, etc., para optimizar el rendimiento.
  • Documentación de OpenAI y Pinecone: Se hace referencia a la documentación, como fuente de información oficial sobre estas herramientas.

Dudas o preguntas:

  • ¿Cómo se puede utilizar una base de datos vectorial para otras tareas, además de la búsqueda de información? Investigación: Se puede utilizar para recomendación de contenido, clasificación de texto, detección de anomalías, agrupamiento (clustering) de datos, y otras tareas que se beneficien de la representación vectorial del significado.

  • ¿Qué otras bases de datos vectoriales existen, además de Pinecone? Investigación: Existen otras opciones como Faiss (de Facebook), Annoy (de Spotify), Weaviate, Qdrant, y Milvus.

  • ¿Cómo se puede evaluar la calidad de los embeddings y el rendimiento de la base de datos vectorial? Investigación: Se pueden utilizar métricas como la precisión, el recall, el F1-score, o métricas específicas para la recuperación de información, como el NDCG (Normalized Discounted Cumulative Gain).

  • ¿Cómo se relaciona el concepto de "memoria a largo plazo" en el título del artículo de blog con el uso de una base de datos vectorial? Investigación: La base de datos vectorial actúa como una "memoria a largo plazo" para el LLM, permitiéndole acceder a información que no está presente en su ventana de contexto actual. Esto es especialmente útil para conversaciones largas o para acceder a información de documentos extensos.

  • ¿Cuál es la diferencia entre "key value pair", "document store", "graph database" y "vector database"?

    • Key-value pair (Clave-valor):

      • Estructura: Almacena datos como pares de clave-valor. La clave es única y se usa para acceder al valor asociado.
      • Uso: Ideal para almacenar datos simples y acceder a ellos rápidamente mediante una clave conocida (ej: caché, configuración).
      • Ejemplo: { "usuario123": "datos_del_usuario" }
    • Document store (Almacén de documentos):

      • Estructura: Almacena datos como documentos, que suelen ser JSON o XML. Los documentos pueden tener diferentes estructuras.
      • Uso: Ideal para almacenar datos semiestructurados o no estructurados, donde la estructura puede variar (ej: contenido web, logs).
      • Ejemplo: Un documento JSON que representa un artículo de blog, con campos como título, autor, contenido, fecha, etc.
    • Graph database (Base de datos de grafos):

      • Estructura: Almacena datos como nodos y relaciones (aristas) entre ellos.
      • Uso: Ideal para modelar y consultar relaciones complejas entre entidades (ej: redes sociales, recomendaciones, análisis de redes).
      • Ejemplo: Nodos que representan personas y relaciones que representan amistades.
    • Vector database (Base de datos vectorial):

      • Estructura: Almacena datos como vectores (embeddings) y permite buscar vectores similares utilizando métricas de distancia (ej: similitud coseno).
      • Uso: Ideal para tareas que requieren búsqueda semántica, recomendación basada en similitud, y otras aplicaciones de IA que se basan en embeddings.
      • Ejemplo: Almacenar embeddings de texto para buscar documentos con significado similar a una consulta.
⚠️ **GitHub.com Fallback** ⚠️