用于文档排序的各种BM25算法
rank-bm25的Python项目详细描述
rank-bm25:两行搜索引擎
查询一组文档并返回与查询最相关的文档的算法的集合。正如您可能已经猜到的,这些算法最常见的用例是创建搜索引擎。
到目前为止,已经实现的算法是:
- Okapi BM25
- BM25L
- BM25+
待办事项:
- BM25 ADPT
- BM25T
这些算法是从this paper中提取的,它给出了每个方法的一个很好的概述,并且还将它们相互作为基准。一个很好的例子是,他们比较了不同类型的预处理,比如词干处理与不词干处理、是否删除stopword等等。如果你对这个主题还不熟悉,那就好好读一读。
安装
安装此软件包的最简单方法是通过pip
,使用
pip install rank_bm25
如果您想确保获得最新版本,可以直接从github使用
pip install git+ssh://git@github.com/dorianbrown/rank_bm25.git
用法
对于本例,我们将使用BM25Okapi
算法,但其他算法的使用方式几乎相同。
初始化
首先要创建BM25类的实例,它在文本语料库中读取并对其进行索引:
fromrank_bm25importBM25Okapicorpus=["Hello there good man!","It is quite windy in London","How is the weather today?"]tokenized_corpus=[doc.split(" ")fordocincorpus]bm25=BM25Okapi(tokenized_corpus)# <rank_bm25.BM25Okapi at 0x1047881d0>
注意,这个包不做任何文本预处理。如果你想做像小写,停止字删除,词干等事情,你需要自己做。
唯一的要求是类接收字符串列表,这些字符串是文档标记。
文件排名
现在我们已经创建了文档索引,我们可以对其进行查询,并查看哪些文档最相关:
query="windy London"tokenized_query=query.split(" ")doc_scores=bm25.get_scores(tokenized_query)# array([0. , 0.93729472, 0. ])
值得注意的是,我们还需要标记我们的查询,并对文档应用相同的预处理步骤,以便进行苹果对苹果的比较
您还可以使用
bm25.get_top_n(tokenized_query,corpus,n=1)# ['It is quite windy in London']
就这样!