以多维向量形式表示的文档的高效检索

Efficient retrieval of documents represented in the form of multi-dimensional vectors

我训练了一个基于深度神经网络的信息检索模型。最后,我的模型以 128 维向量的形式表示文档。文档的语义表示类似于单词的词嵌入表示(word2vec 算法)。当我对我的模型进行查询时,它也在同一个 128 维向量 space 中表示查询。现在,我想从整个向量 space 中检索最接近同一向量 space 中表示的查询向量的前 k 个文档。

相似度度量是余弦相似度,其定义如下:

sim(Q, D) = np.dot(Q.T, D)/(np.linalg.norm(Q) * np.linalg.norm(D))

其中sim(Q, D)表示query Q和document D的相似度,简单来说就是query和document的单位向量的点积。
现在我大约有 3600 万份文档,因此计算所有文档的余弦相似度并对它们进行排序不是高效检索的可行选择。我想有效地为相同 128 维向量 space 中表示的任何查询向量搜索最相似的 k 个文档。

使用近似最近邻 (ANN) 搜索库,例如 nmslib. These libraries would allow you to index dense vectors and retrieve a list of such indexed vectors given a query. Some example ipython notebooks can be found here

您可以使用 Faiss 库。它有一个很好的文档,也被用在很多项目中。 Faiss 是用 C++ 编写的,具有 Python/numpy.

的完整包装器