您好!欢迎来到静学网! 注册 登入
  • 致力中国及国外独立搜索引擎技术及第三方网站搜索引擎SEO排名研究

如何建立一个搜索引擎,BM5算法的奥妙之处及算法实现

课程目录 教育推动者 次浏览

搜索的价值

 
搜索数据的能力是我们认为理所当然的事情。现代搜索引擎现在是如此复杂,以至于我们的大多数搜索 "只是在工作需要的时候"。事实上,我们往往只有在网站或应用程序上的搜索不不到问题时才会注意到它。我们对这一领域的期望从未如此之高。
 
搜索引擎的智能化程度一直在提高,原因很简单,一个有效的搜索工具能给企业带来的价值是巨大的,也是知识产权的关键部分。通常情况下,搜索栏是客户和企业之间的主要界面。因此,一个好的搜索引擎可以通过提供更好的用户体验来创造一个强有力的竞争优势。
 
据MckKinsey估计,在2009年,这一价值在全球范围内的总和达到了7800亿美元。这将使每次搜索的价值达到0.50美元。当然,自2009年以来,这一价值无疑已经大大增加......
 
考虑到这一点,你要知道,创建一个现代搜索引擎对大多数开发团队来说是遥不可及的,需要巨大的资源和复杂的算法。然而,有点令人惊讶的是,大量的企业商业搜索引擎实际上是由非常简单和直观的规则驱动的,可以使用开源软件轻松实现。
 
例如,Uber、Udemy Slack和Shopify(以及其他3000家企业和组织)都使用Elasticsearch。这个搜索引擎,直到2016年都是由简单的术语频率、反向文档频率(或tf-idf)单词得分驱动的。
 
在这之后,它改用了更复杂(但仍然非常简单)的BM25,至今仍在使用。这也是在Azure Cognitive Search中实现的算法。
 
BM25:你从未听说过的最重要的算法
 
那么什么是BM25呢?它是 " Best match 25 "的缩写(其他24次尝试显然都不太成功)。它于1994年在第三届文本检索会议上发布,是的,真的有一个专门讨论文本检索的会议......
 
它可能被认为是 " on steroids "的TF-IDF,实现了两个关键的改进。
 
术语频率饱和:BM25提供了与文档匹配的术语数量的递减回报。这是相当直观的,如果你想搜索一个在文档中非常常见的特定术语,那么应该有一个点,这个术语的出现次数对搜索的作用会越来越小。
 
文件长度:BM25在匹配过程中考虑了文档的长度。这也是很直观的;如果一篇较短的文章所包含的匹配术语的数量与一篇较长的文章相同,那么较短的文章就可能是更相关。
 
这些改进还引入了两个超参数来调整这些项目对排名函数的影响。”k“用于调整术语饱和度的影响,"b"用于调整文档长度。
 
将这一切结合起来,BM25的计算方法是:
 

BM25算法
 
术语解释:

IDF:
 
反向文档频率

这减少了所有文件中常见的术语的权重。

log(numDocs / (docFreq+1))

(K+1)tf:
 
术语频率 ,更多的术语有更高的权重,但只限于最大的'k'值
 
 
文件的重量:较短的文件将有一个较高的权重。dl_adl'表示当前文档长度除以所有文档的平均长度。'b'是一个参数,用于调整文档长度的影响
 
 
BM25算法的简化
 
 
实现BM25,一个工作实例
 
实现BM25是令人难以置信的简单。多亏了rank-bm25 Python库,只需几行代码就可以实现。
 
在我们的例子中,我们将创建一个搜索引擎来查询由英国公共部门组织发布的合同公告。
 
我们的起点是一个日期集,它包含了合同通知的标题、描述以及通知本身的链接。为了保持简单,我们将标题和描述结合起来,在数据集中创建 "文本 "列。我们将用这一列来进行搜索。我们想要搜索的文件有50,000份。
 
第一组:
 
URL:
 
https://www.contractsfinder.service.gov.uk/Published/Notice/releases/6e4cfac6-cb44-495a-a58e-c57b2e14b842.json
 
title:
 
Tender for Lift Maintenance and Associated Works(电梯维修及相关工程招标书)
 
Description:


Modification Notice\r\n Original description:Provision of a Fixed Mechanical Equipment, Repairs and Maintenance Service\r\n Description of the modifications\r\n Fixed
 
 
第二组:
 
URL:https://www.contractsfinder.service.gov.uk/Published/Notice/releases/51934652-4f81-4a43-82d2-4ac4b4dd76f2.json
 
title:
 
Deployed Force Radiation Detechtion Monitoring Equipment Replacement(DFRDME)
 
Description:
 
Modification Notice\r\n Original description:Provide passenger lift maintenance and associated works for a 5year period\r\n Description of the modifications……
 
 
(将在搜索引擎中使用的数据格式(50,000中的前两行))
 
这个练习的第一步是提取这个数据集的 "文本 "列中的所有单词,创建一个由每个文档和其中的单词组成的 "列表"。这被称为标记化,可以由优秀的spaCy库处理。
 

import spacy
from rank_bm25 import BM25Okapi
from tqdm import tqdm
nlp = spacy.load("en_core_web_sm")text_list = df.text.str.lower().values
tok_text=[] # for our tokenised corpus
 
#Tokenising using SpaCy:
 
for doc in tqdm(nlp.pipe(text_list, disable=["tagger", "parser","ner"])):
   tok = [t.text for t in doc if t.is_alpha]
   tok_text.append(tok)

 
构建一个BM25指数可以通过一行代码完成。
 

bm25 = BM25Okapi(tok_text)
 
查询这个索引只需要一个搜索输入,这个输入也已经被标记化:
 

query = "Flood Defence"
tokenized_query = query.lower().split(" ")import
timet0 = time.time()
results = bm25.get_top_n(tokenized_query, df.text.values, n=3)
t1 = time.time()
print(f'Searched 50,000 records in {round(t1-t0,3) } seconds \n')
for i in results:
   print(i)

 
这将返回以下前3个结果,这些结果显然与“Flood Defence”的搜索查询高度相关:
 
Searched 50,000 records in 0.061 seconds:
 
Forge Island Flood Defence and Public Realm Works Award of Flood defence and public realm works along the canal embankment at Forge Island, Market Street, Rotherham as part of the Rotherham Renaissance Flood Alleviation Scheme.
 
Flood defence maintenance works for Lewisham and Southwark College **AWARD** Following RfQ NCG contracted with T Gunning for Flood defence maintenance works for Lewisham and Southwark College
 
Freckleton St Byrom Street River Walls Freckleton St Byrom Street River Walls, Strengthening of existing river wall parapets to provide flood defence measures
 
我们可以根据执行搜索的用户的预期偏好来微调“k”和“b”的值,但是默认值k=1.5和b=0.75在这里似乎工作得很好。
 
最后
 
希望这个示例能够突出显示在Python中实现健壮的全文搜索是多么简单。这可以很容易地用于为简单的web应用程序或智能文档搜索工具提供动力。还有很大的空间可以进一步提高这方面的性能,这将后面的文章中介绍!



静学网 , 版权所有丨如未注明 , 均为原创丨转载请注明如何建立一个搜索引擎,BM5算法的奥妙之处及算法实现
顶一下
(0)
踩一下
(0)
畅所欲言
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论
友情链接:
网站优化
本网站所刊载信息,不代表静学网观点。 刊用本网站稿件,务经书面授权或注明来源。 未经授权禁止转载、摘编、复制及建立镜像,违者将依法追究法律责任。 投稿邮箱:1870447831@qq.com | 举报邮箱:1870447831@qq.com