Okapi bm25 和 NMSLIB 有什么区别?

数据挖掘 nlp python-3.x 信息检索 搜索引擎
2022-03-13 03:04:47

我试图制作一个搜索系统,然后我知道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 的优点?
1个回答

请注意,我不知道 nmslib,而且我一般不熟悉搜索优化。但是我知道 Okapi BM25 权重。

它们(bm25,nmslib)有何不同?

这是两个完全不同的东西:

  • Okapi BM25 是一种加权方案,它比众所周知的 TFIDF 加权方案具有更好的理论基础。这两种方法都旨在根据单词在文档集合的上下文中的“重要性”程度来对单词进行评分,主要是通过对很少出现的单词给予更多的权重。作为一种加权方案,Okapi BM25 仅提供文档/查询的表示,您如何使用它取决于您。
  • nmslib 是一个优化的相似性搜索库。我假设它将文档和查询的任何向量集作为输入。因此,可以为他们提供由原始频率、TFIDF 或其他任何东西组成的向量。它所做的只是使用提供的任何文档表示来计算(尽可能快地)与查询最相似的文档。

如何将 bm25 权重传递给 nmslib 以创建更好更快的搜索引擎?

由于您提到基于 BM25 的结果令人满意,这意味着质量损失是由于 nmslib 搜索优化造成的。没有魔法,让事情变得更快的唯一方法是减少比较,有时这意味着错误地丢弃一个潜在的好候选人。所以问题不在于传递 BM25 权重,而在于理解和调整 nmslib 的参数:当然有一些参数允许用户在速度和质量之间选择适当的折衷。