我试图制作一个搜索系统,然后我知道Okapi bm25哪个是像 tf-idf 这样的排名函数。您可以为您的语料库创建索引,然后检索与您的查询类似的文档。
我导入了一个python 库 rank_bm25并创建了一个搜索系统,结果令人满意。
然后我看到了一个叫做Non-metric space library 的东西。我知道它是一个类似于 kNN 算法的相似性搜索库。
我看到一个例子,一个人试图使用nmslib. 他做了以下事情:-
- 对文档进行标记
- 将标记传递给
fastText模型以创建词向量 - 然后将这些词向量与 bm25 权重组合
- 然后将组合传递到 nmslib
- 进行了搜索。
如果上面的链接没有打开文档,只需在隐身模式下打开它。
它非常快,但结果并不令人满意,我的意思是即使我从文档中复制粘贴任何确切的查询,它也不会返回该文档。但是我使用 rank_bm25 制作的搜索系统给出了很好的结果。所以结论是
bm25给出了很好的结果并nmslib给出了更快的结果。
我的问题是
- 它们(bm25,nmslib)有何不同?
- 如何将 bm25 权重传递给 nmslib 以创建更好更快的搜索引擎?
- 简而言之,如何结合 bm25 和 nmslib 的优点?