add caching, most_similar