←back to thread

76 points unixpickle | 1 comments | | HN request time: 0.267s | source

I made this website with my wife in mind; it makes it possible to browse for similar fashion products over many different retailers at once.

The backend is written in Swift, and is hosted on a single Mac Mini. It performs nearest neighbors on the GPU over ~3M product images.

No vector DB, just pure matrix multiplications. Since we aren't just doing approximate nearest neighbors but rather sorting all results by distance, it's possible to show different "variety" levels by changing the stride over the sorted search results.

Nearest neighbors are computed in a latent vector space. The model which produces the vectors is also something I trained in pure Swift.

The underlying data is about 2TB scraped from https://www.shopltk.com/.

All the code is at https://github.com/unixpickle/LTKlassifier

1. crusty ◴[] No.43374953[source]
This is interesting but seems price independent. I get that since nothing is final, they're all just more nodes, artificial restrictions based on price might limit the pathways to a match that might fit the users price parameters. But if a user has a budget, some items will only ever be intermediary nodes, while others are also potential purchases. I wonder if it would be computational trivial to highlight this distinction visually, so a user can easily distinguish between items to consider for purchase and items they will only see as refinement.

Our feels like there's a bit of a gamification in just clicking one more time, like "I like this, but if I click one more, maybe I'll like something in the next set even more." And repeat forever - like a great (window) shopping tool that doesn't result in much buying. But I'm not a shopper/consumer, so maybe my impression is not representative.