akshaymudmal/vectorsearch
0
1import streamlit as st2import numpy as np3from sklearn.feature_extraction.text import TfidfVectorizer4from sklearn.decomposition import PCA5import matplotlib.pyplot as plt6 7st.set_page_config(page_title="Mini Vector Search Demo", page_icon="๐")8 9st.title("๐ Vector Search & Visualization Demo")10st.write("This app demonstrates how vector search works using dot product similarity and visual clustering.")11 12# Step 1: Get dataset input13user_input = st.text_area(14 "Enter your words or short sentences (one per line):",15 "king\nqueen\napple\nbanana\nkingdom\nroyalty\nfruit\nthrone"16)17 18if user_input.strip():19 # Convert input into list20 data = [line.strip() for line in user_input.split("\n") if line.strip()]21 22 # Step 2: Generate vector embeddings23 vectorizer = TfidfVectorizer()24 vectors = vectorizer.fit_transform(data).toarray()25 26 st.subheader("Generated Vectors (Embeddings)")27 st.write(vectors)28 29 # Step 3: Visualize embeddings in 2D using PCA30 if len(data) > 1:31 pca = PCA(n_components=2)32 reduced_vectors = pca.fit_transform(vectors)33 34 fig, ax = plt.subplots(figsize=(6, 4))35 ax.scatter(reduced_vectors[:, 0], reduced_vectors[:, 1], color='blue')36 37 for i, word in enumerate(data):38 ax.text(reduced_vectors[i, 0] + 0.01, reduced_vectors[i, 1] + 0.01, word, fontsize=10)39 40 ax.set_title("2D Visualization of Word Embeddings (PCA)")41 ax.set_xlabel("Principal Component 1")42 ax.set_ylabel("Principal Component 2")43 st.pyplot(fig)44 45 # Step 4: Search Query46 search_query = st.text_input("Enter a keyword to search:")47 48 if search_query:49 # Convert search word into vector50 query_vec = vectorizer.transform([search_query]).toarray()[0]51 52 # Step 5: Compute dot product similarity53 similarities = np.dot(vectors, query_vec)54 55 # Step 6: Sort results by similarity56 ranked_indices = np.argsort(similarities)[::-1]57 st.subheader("Search Results (Sorted by Similarity)")58 59 for i in ranked_indices:60 st.write(f"**{data[i]}** โ Similarity: {similarities[i]:.4f}")61 62 # Highlight search query on scatter plot63 if len(data) > 1:64 query_vec_reduced = pca.transform([query_vec])[0]65 fig, ax = plt.subplots(figsize=(6, 4))66 ax.scatter(reduced_vectors[:, 0], reduced_vectors[:, 1], color='blue', label='Words')67 ax.scatter(query_vec_reduced[0], query_vec_reduced[1], color='red', label='Search Query')68 69 for i, word in enumerate(data):70 ax.text(reduced_vectors[i, 0] + 0.01, reduced_vectors[i, 1] + 0.01, word, fontsize=10)71 ax.text(query_vec_reduced[0] + 0.01, query_vec_reduced[1] + 0.01, search_query, color='red', fontsize=10)72 73 ax.set_title("Search Query vs Word Embeddings")74 ax.legend()75 st.pyplot(fig)76 