Skip to main content
All CollectionsBlog
Semantic Search: Milvus, Python & Vector Databases
Semantic Search: Milvus, Python & Vector Databases

A quick guide on getting Milvus, an open-source vector database, up and running with Python.

Updated over a week ago

Today, we're diving into a Python script that creates a semantic search engine using advanced NLP techniques and vector storage. This project combines the power of pre-trained language models, the Milvus vector database, and some clever text processing to enable concept-based searching of large text documents.

The Full Code can be Found at the Bottom


The Core Components

Our script relies on three main libraries:

  1. transformers for text embedding

  2. pymilvus for vector storage and retrieval

  3. textwrap for formatting output

1. Create a Virtual Environment

$ python -m venv myenv
$ pip install argparse transformers torch pymilvus textwrap3

2. Text Embedding

We use a pre-trained model to convert text into vector embeddings:

This code loads a pre-trained model and uses it to generate embeddings for our text chunks.

3. Text Chunking

To handle large documents, we split them into smaller, manageable chunks:

This function breaks our text into overlapping chunks, which helps maintain context across chunk boundaries.

4. Milvus Integration

We use Milvus to store and search our vector embeddings efficiently:

This code sets up a Milvus collection to store our text chunks and their corresponding embeddings.

5. Search Functionality

The heart of our search functionality lies in this section:

Here, we convert the user's query into an embedding and use Milvus to find the most similar text chunks.

The Magic of Vector Space Retrieval

The power of this approach comes from Vector Space Retrieval, which allows us to represent text as points in a high-dimensional space and find similar texts based on their proximity in this space. You can check out the math behind that here.

Running the Script

Before you run the script, head over to Project Gutenberg and download any book in a txt format. Save it to the same directory as your python script.

I'm using Homer's Odyssey

When you run the script, it first checks if a Milvus database already exists. If not, it processes the input text file, creating embeddings for each chunk and storing them in Milvus. Then it enters an interactive loop, allowing users to input queries and displaying the most relevant text chunks.

python main.py Odyssey.txt

This code provides a simple CLI for interacting with our search engine, formatting the results for easy reading.

Conclusion

This script demonstrates how to combine modern NLP techniques with efficient vector storage to create a powerful semantic search engine. By leveraging pre-trained models and vector databases, we can quickly build systems that understand the meaning behind text, not just keywords.

Whether you're working on a document retrieval system, a chatbot, or any application that requires understanding text, this code provides a solid foundation to build upon. The beauty of this approach is its flexibility - you can easily swap out the pre-trained model or adjust the chunking strategy to suit your specific needs.

Remember, the key to this system's power is in the vector representations of text. These dense vectors capture semantic meaning in a way that traditional keyword-based systems can't match. By using Milvus for efficient storage and retrieval of these vectors, we can quickly search through vast amounts of text to find conceptually similar passages.

This project opens up exciting possibilities for intelligent document analysis, improved search capabilities, and even question-answering systems. As you explore and build upon this code, you'll be tapping into some of the most powerful techniques in modern natural language processing. Oh and as promised, here's the full code. Happy coding!

Attachment icon
Did this answer your question?