I'm working on a project that involves building a news recommendation system. I've come as far as quantifying user interaction with different articles on the site into user's affinity towards atopic using a bayesian function. I also have quantified the recent articles using LDA into the proportion an article talk about each topic.
my users topic-affinity for a user x looks like this(target-x):
user_id interest-topic-0 interest-topic-1 interest-topic-2 interest-topic-3 interest-topic-4 interest-topic-5 interest-topic-6 interest-topic-7 interest-topic-8 interest-topic-9 0 0.0257 0.2956 0.0386 0.0643 0.1285 0.0000 0.0 0.0257 0.0386 0.1671
My quantified articles looks something like this(vectors-v):
post_id topic-0 topic-1 topic-2 topic-3 topic-4 topic-5 topic-6 topic-7 topic-8 topic-9 x 0.055048 0.000000 0.742544 0.032286 0.059630 0.000000 0.000000 0.01173 0.0 0.095441 y 0.000000 0.051172 0.000000 0.000000 0.158314 0.042632 0.022281 0.00000 0.0 0.720676 z 0.028615 0.000000 0.020919 0.000000 0.000000 0.018940 0.882862 0.00000 0.0 0.046078
The shape of target will always be (10,)
The shape of vectors will always be (num_articles, 10)
Both vectors do not follow the same distribution.
Now I'm trying to figure out the best way to recommend articles from vectors v, for a target user x, given x and v. I've tried distance similarity functions like cosine similarity to find the distance between vectors. The results are satisfactory but I'm looking for a better function/metric to pick out top n recommendations for a user.