Django order_by косинус сходство быстрее - PullRequest
0 голосов
/ 19 октября 2018
class Item(models.Model):
    vector_repr = models.TextField(..., verbose_name='jsonified vector representation')

...
# My current solution:

def as_vector(item): return np.asarray(json.loads(item.vector_repr))

item = Item.objects.get(...)
item_vect = as_vector(item)

def cosine_similarity(other): return np.dot(item_vect, as_vector(other))

db_items = Item.objects.exclude(id=item.id)
similar_items = sorted(db_items, key=cosine_similarity) 

В основном я хочу отсортировать все элементы в базе данных MySQL, применяя косинусное сходство с данным элементом.

Проблема в том, что вектор, который представляет все элементы (vector_repr), очень большойи элементов в базе данных много, поэтому этот метод очень медленный (~ 2 минуты).

Как я могу ускорить этот процесс?(Возможно, не сохраняя в моей базе данных сходство каждой пары предметов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...