import pickle import numpy as np from sentence_transformers import SentenceTransformer from sklearn.metrics.pairwise import cosine_similarity # Load model embeddings with open("../models/product_embeddings.pkl", "rb") as f: data = pickle.load(f) # Load transformer model model = SentenceTransformer('all-MiniLM-L6-v2') def recommend_products(user_query, top_n=5): """Find similar products based on user search""" query_embedding = model.encode(user_query).reshape(1, -1) # Compute similarity scores similarities = cosine_similarity(query_embedding, data["embeddings"]) top_indices = np.argsort(similarities[0])[-top_n:][::-1] # Get top matches recommendations = [] for i in top_indices: recommendations.append({ "search_query": data["search_queries"][i], "product": data["product_names"][i], "score": float(similarities[0][i]) }) return recommendations # Example test if __name__ == "__main__": query = "gaming laptop" results = recommend_products(query) for r in results: print(f"🔹 {r['product']} (Score: {r['score']:.2f})")