14 comments

[ 2.8 ms ] story [ 40.6 ms ] thread
I think this is awesome! However for me then most interesting thing is the tech behind it. Having worked in the same office as the team behind this and been to a few talks that Tom's given, here are a few things that HN might find interesting.

* Built by the same guy behind BayesHive: https://bayeshive.com/

* An example of probabilistic functional programming in the wild. (This let's you build programs where the variables are probability distributions.)

* Good example of something built in Haskell that really speaks to the strenghts of the language!

Maybe Tom could give us a brief synopsis of how this was built and how it works?

Thanks Ben.

On the programming side:

* 100% Haskell. Even our post-install script in the packages we build for the server are in Haskell.

* Use Spock and postgresql-simple

* 95% of functionality is in a library which is written in Nice Haskell - e.g. all functions are total, type safety where it makes sense.

* Library consists of data types, pure functions, and functions that live in a DB monad. All code is decoupled from the request-response server implementation.

* Front-end in AngularJS

On the statistics/learning side:

* We apply Bayes' theorem every time you press that green "Next" button. There is a statistical model for your choices based on your ultimate preferences, which we estimate.

* Lots of tricks to bring this inference down to 50ms on a modest CPU and to maximise information yield from user interaction.

More examples of this choice paradigm coming in the next few weeks.

Some observations from 6 testruns:

- works good when i "like" with a very broad category (i.e. click on all icons, landscape/city, maps, people - regardless whether i actually like the picture to hang on the wall or not)

- sometimes shows repeated images

- if a category has not enough pictures in it to show, it doesnt work (synthetic images / pop art)

- robbie williams and elvis presley portrait appear in result even when i liked landscape only, likewise neuschwanstein and beach oilpainting appear when i liked people portraits

for a poster buying decision i would enter "epic landscape", or "elvis presley" or "menger sponge render" into a textsearchengine and the result would be much more precise to what i actually like to see and much faster.

I see two usecases regarding buying a poster:

1. i am a robot and need some poster out of a predefined set of broad categorys

2. i am a tasteless human who enjoys klicking like and who needs to hide a hole in the wall with some semi-random image.

So my main problem with using this for a likeable-image decision is the constant collision of what the picture actually contains for me as a human to read into, and what the pixelbased train algo wants me to do (which i am unsure of what criteria it has).

But all the poster-buy-stuff application aside this is really interesting and for my understanding a difficult problem - nice work!

Thanks for your comments.

We try to respect the uncertainty in the calculation of preferences. For instance, if you click a blue Elvis poster, we don't know if it because you like blue or Elvis, hence we end up showing some items that may be far from what you are looking for.

That being said, there is without doubt room for improvement and we got a lot of data to help with that today. In the Bayesian lingo, this is all about fine-tuning the priors.

One of this things we are excited about is the use case where the user knows what they want, but don't know the word for it. For instance it may turn out that I may like Expressionism (this is in fact true) but I don't know the word for that.

If you know that you want an Elvis poster, there isn't much point in using Findmelike right now. I think it would be very cool to have both a text search box where you could enter what you know, and then get the Findmelike visual choice search on the matching items to narrow those down aesthetically.

yes, it is also likely that just my personal preferences are somewhat incompatible to this procedure, as i cannot imagine wanting something diffuse i have not even a general description for.

The mixture with a text input as basis for a visual choice sounds good. Also it could be nice if the orientation and aspect ratio of the liked images would be taken into account.

I used a pretty specific category for picking images (old fashioned style with a particular place name mentioned) and... it actually seemed to figure that out. I was impressed.
Really impressive, and I really liked it.

The search narrowed down pretty quickly to working out that I liked Kandinsky and Klimt. This is awesome accurate on the one hand, but annoying on the other hand. If I wanted to know which artists I like I'd just remember it. :-)

That's just me being "funny". It did bring up some nice pictures that I didn't know.

Very nice indeed, found something to hang in my living room ;) Nothing to add more, I'm just impressed.
The demo does not appear to do anything. I click on a poster, and a tick appears and that's it.
Sorry if this wasn't clear. After clicking a poster and the tick appear, click the green "Next" button to see posters like the ones you have clicked in the first place.
I assumed Next just showed another page of results. Maybe you should popup the next button only after the user has clicked on a poster? Also, after I clicked next, I got what appeared to be unrelated posters which is what made me think I was looking another page of random results.
Thanks for your feedback and your suggestion. Findmelike obviously didn't work so well in this case - we should be able to offer more accurate recommendations by refining our model based on the data we have obtained today. Also, we clearly have some UX work to do. Our mobile experience is not very convincing.
Love this tool and think it starts to get really interesting when you think of other applications beyond posters.
interesting idea but what others dont seem to talk about is the ui, small changes could give you big improvements i think. like the if you hoover outside of the original grid then it changes to the poster under it and not only if you leave the closeup box which has a lot of empty space.