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 минуты).
Как я могу ускорить этот процесс?(Возможно, не сохраняя в моей базе данных сходство каждой пары предметов)