CoolFace
Apppublic

akshaymudmal/vectorsearch

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
streamlit_app.py76 linesDownload Raw Back to src
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