Вы можете использовать torch.nn.functional.cosine_simility функцию для вычисления косинусного сходства. И torch.argsort для извлечения топ 1000.
Вот пример:
x = torch.rand(10000,300)
y = torch.rand(1,300)
dist = F.cosine_similarity(x,y)
index_sorted = torch.argsort(dist)
top_1000 = index_sorted[:1000]
Обратите внимание на форму y
, не забудьте изменить форму перед вызовом функции подобия. Также обратите внимание, что argsort
просто возвращает индексы ближайших векторов. Чтобы получить доступ к самим этим векторам, просто напишите x[top_1000]
, который вернет матрицу в форме (1000,300)
.