Saturday, 18 January 2025

Hour 5 - Working with Vector Databases

Lecture Notes: 


1. Concepts

What is a Vector Database?

  • A vector database is designed to store, manage, and query high-dimensional vector embeddings efficiently.
  • It enables similarity search and nearest neighbor queries, critical for working with embeddings generated by models like Ollama.

Key Features of Vector Databases:

  1. High-Dimensional Indexing: Stores embeddings (vectors) and enables fast searches.
  2. Similarity Search: Finds vectors closest to a given query vector using distance metrics like cosine similarity or Euclidean distance.
  3. Scalability: Handles large-scale data efficiently.
  4. Integration: Can work with other data structures (e.g., JSON metadata) for richer querying.

2. Key Aspects

Why Use a Vector Database?

  • Efficiency: Optimized for querying large-scale vector data.
  • Accuracy: Provides precise similarity results using advanced indexing algorithms like HNSW (Hierarchical Navigable Small World).
  • Real-World Use Cases: Image retrieval, semantic search, recommendation systems, chatbots.

Common Vector Databases:

  • Pinecone
  • Weaviate
  • Qdrant
  • Milvus

Querying Techniques:

  1. K-Nearest Neighbors (KNN): Finds top K vectors closest to the query vector.
  2. Hybrid Search: Combines vector similarity with traditional keyword-based searches.

3. Implementation

Setting Up a Vector Database

  1. Install and configure the database. Most vector databases provide cloud-hosted and local setups.
  2. Store embeddings: Use the embeddings generated by ollama embed.
  3. Query embeddings: Perform similarity searches to find relevant results.

4. CLI Commands for Working with Vector Databases

Command Description Example
ollama embed Generate embeddings for text or documents. ollama embed "example text" --format json
ollama run Use embeddings as part of a model query. ollama run mymodel --format json

5. Real-Life Example

Scenario: Build a Semantic Search Engine with a Vector Database

Suppose we want to search through a collection of customer reviews to find those most relevant to a user query. The embeddings of the reviews will be stored in a vector database and queried for similarity.


6. Code Examples

Step 1: Install Qdrant Vector Database

Qdrant is an easy-to-use vector database with local and cloud options.

# Install Qdrant locally via Docker
docker pull qdrant/qdrant
docker run -p 6333:6333 qdrant/qdrant

Step 2: Store Embeddings in Qdrant

import qdrant_client
from qdrant_client.models import PointStruct
import json

# Initialize Qdrant client
client = qdrant_client.QdrantClient(url="http://localhost:6333")

# Create a collection for embeddings
client.recreate_collection(
    collection_name="customer_reviews",
    vector_size=512,  # Dimension of embeddings
    distance="Cosine"
)

# Load embedding generated by Ollama
with open("review1_embedding.json", "r") as file:
    review1 = json.load(file)

with open("review2_embedding.json", "r") as file:
    review2 = json.load(file)

# Insert embeddings into the database
points = [
    PointStruct(id=1, vector=review1["embedding"], payload={"text": review1["text"]}),
    PointStruct(id=2, vector=review2["embedding"], payload={"text": review2["text"]}),
]

client.upsert(collection_name="customer_reviews", points=points)

Step 3: Query the Vector Database

# Simulate a user query
query = "What do customers say about product quality?"

# Generate query embedding (replace with actual embedding generated by Ollama)
query_embedding = [0.12, 0.34, ...]  # Placeholder example

# Perform similarity search
results = client.search(
    collection_name="customer_reviews",
    query_vector=query_embedding,
    limit=2  # Retrieve top 2 matches
)

# Display results
for result in results:
    print(f"Score: {result.score}")
    print(f"Review: {result.payload['text']}")

7. Summary

  • Concepts Covered: What vector databases are, why they're useful, and how they enable efficient similarity searches.
  • Key Aspects: High-dimensional indexing, similarity measures, and practical use cases.
  • CLI Commands: Use ollama embed to generate embeddings for storing in the database.
  • Real-Life Example: Semantic search through customer reviews using Qdrant.
  • Code Examples: Storing and querying embeddings in Qdrant.

8. Homework/Practice

  1. Install a vector database of your choice (e.g., Qdrant, Milvus).
  2. Generate embeddings for five text samples using ollama embed.
  3. Store these embeddings in the database.
  4. Implement a Python script to perform similarity searches and rank the results.
  5. Experiment with different distance metrics (e.g., Euclidean vs. Cosine).

This lecture introduces students to working with vector databases and includes a practical example with Qdrant, a widely-used vector database.

No comments:

Post a Comment

OpenWebUI - Beginner's Tutorial

  OpenWebUI Tutorial: Setting Up and Using Local Llama 3.2 with Ollama Introduction This tutorial provides a step-by-step guide to setting...