当大多数计算机科学家如何考虑信息检索时,统计关键字算法如TF-IDF和BM25可能会想到。这些部署在开源系统中,例如Apache Lucene和Apache Solr。关键字搜索的云版本可以从Elasticsearch和Algolia等公司提供。
您可能不知道的是,自然语言处理(NLP)的进步,特别是在2017年引入变形金刚,已经迎来了一种新的信息检索的味道,以各种信息检索(短暂的短路)和语义搜索。这些系统的定义特征是它们应用神经网络以了解比关键字搜索更深入的语言。这使得它们能够表面更广泛的相关内容,同时显示更精确的结果。
神经红外系统在他们的初期,如果您对此领域的更深入了解,我建议使用Mitra和Craswell的神经信息介绍。 2020年初发布的亚马逊肯德拉是此类系统的第一个商业示例,而Microsoft语义搜索,于2021年4月发布,ZIR语义搜索是最近的。
在本文的其余部分,我们将建立一个小集合的搜索。我将使用Zir的语义搜索平台,因为它的设计简单且经济地集成到SaaS和PaaS产品中,并且具有独特的索引和搜索多种语言内容的能力。您可以从amin3141 / zir下载来自Github的本教程的源代码-souffle。
Importank DataSet酒店提供各地主要城市广泛的酒店点评。出于演示的目的,我们将建立在旧金山的三家最审查的酒店搜索:渔民喜来登托斯卡纳酒店,渔夫码头酒店,威斯汀酒店和圣弗朗西斯威斯汀酒店。
数据文件具有简单的标签分隔格式。第一列是审查日期,第二列是标题,第三列是实际文本:
2009年2009年的酒店已经访问了旧金山几次,这... 15 2009年的优越位置和我的朋友和我的朋友和我... 13 2009年的完美体验这家酒店非常完美。这是一个辉煌的位置......
首先,我们将对自己的JSON文档分开,并将其另存为单独的文件。我们将包括酒店的名称和审查日期,因为元数据(Zir语义搜索使用搜索结果自动返回元数据。)
{“DocumentId”:1036995557202582223269989080822232699890258222326998908822232699890,“metadatajson”:“{\”date \“2005年4月23日”,\“Hotel \”:\“best_western_tuscan_inn_fisherman_s_wharf_a_kimpton_hotel \”}“,”部分“:[{”text“ :“我们在托斯卡纳旅馆度过了六晚,只有这家酒店的狂欢评论位置是完美的。步行距离到缆车,码头,公共汽车47和F线。有友好的员工的大餐厅。每个人都很愉快,非常乐于助人。漂亮的干净房间和私下卫生间。我们急于返回!玛丽和杰克从Scituate Ma“}”,“Title”:“Great Hotel”}
文档ID是Murmur3 x64 128位哈希完全审查。返回搜索结果后,包含此ID,允许查询系统轻松检索完整文档。为了便于查找,实现此逻辑的ImportRank2json.py程序还创建了一个SQLite数据库,其中包含文件中的所有审查,由文档ID键入。
就像与Algolia和Elasticsearch这样的关键字搜索系统一样,您必须按下要搜索的内容,以便可以索引。除了基于UI的拖放之外,ZIR语义搜索还提供了基于GRPC的API,以支持快速原型设计。
使用左手菜单导航到语料库,并创建一个名为“酒店评论”的新语料库。语料库只是可以在以后查询的文档和文本材料集合。
点击并打开酒店评论语料库。将包含Review JSON文档的文件夹拖放到语料库中。
在附加的五到十分钟内,文件将可搜索。您可以通过在托管的UI选项卡上运行查询并检查正在返回的结果来验证这一点。
由于对该平台进行了身份验证,因此我们需要一个有效的用户来连接并运行查询。目前,我们将使用OAuth 2.0客户端凭据流动为方便起见。通常,当客户端在可信环境中运行时,您应该只使用此流程,并且凭据可以保持安全,例如在运行服务器中。
使用左手菜单,导航到身份验证→应用程序客户端,然后单击“创建App Client”按钮。
给它一个名字(例如,酒店 - CLI),将类型设置为客户端凭据,并输入回调和注册的任何URL(例如https://auth.zir.dev)。请注意客户端ID和客户端秘密,因为连接和运行查询时,您需要它们。
点击回到语料库中,单击授权选项卡,然后单击“创建角色”按钮。选择您在步骤二中创建的应用程序客户端,并在语料库上授予查询权限。
信息检索的神经方法围绕着单词,句子和段落的矢量化。神经网络是将短语作为输入的数学函数,并产生高维向量作为输出。这些矢量以这种方式代表了这种短语的语义,这种方式与相关语义的短语共享矢量空间中的几何结构。这些载体经常被称为嵌入。
由于这种抽象质量,神经系统对拼写错误和其他拼写错误系统的鲁棒性是强大的。相比之下,关键字系统通常必须配置停止字删除,单词源头和法术校正,以便获得良好的效果。
要保持本教程简单,我们将构建一个基于Python的命令行解释器,接受查询并返回前面添加的客户评论的顶级匹配结果。 ZIR语义搜索在每个结果中返回以下信息:
文档ID和元数据。客户端使用此信息将结果加入原始信息源,并在上下文中显示它。我们将使用文档ID查找完整审查并显示它。
相关片段。文档通常涵盖许多主题,因此搜索结果包括它标识为最相关的部分。作为一般规则,在向用户显示此代码段时显示一点点周围文本有助于。
分数。分数是一个与搜索结果信心相关的实数。重要的是,分数不是校准的概率,因此应该谨慎地解释。但是,它可以安全地使用,适用于下游机器学习型号,如重新登记。
我在宾馆实施了一个完整的客户。下面的代码显示了如何使用requests库提交查询。
下面的动画GIF显示了交互式语义搜索会话。第一个问题的结果,“房间是宽敞的”,证明了搜索了解宽敞的单词的语义,因此可以像“只有缺点是房间大小”一样返回结果。
第二个查询询问关于“附近的用餐”,搜索能够返回没有关键字重叠的相关结果,如“Alos [SiC],相邻餐厅的食物非常好!”
最后,第三个查询故意拼写拼写一个关键术语“早餐Bufet”,并搜索的搜索可供自助早餐甚至早上自助餐!
大量的研究已经建立了与抚摸和令人满意的用户相关的重要性。 例如,Microsoft的2012年研究展示了与Bing搜索中的用户参与中的劣化相关性和长期缩减之间的因果关系。 通过超越关键字,谷歌着名的Alta Vista,Lycos和其他人在排名搜索结果时融入有关网页链接结构的信息。 无论您的目标是提高用户订阅,还是您只想帮助您的用户快速找到最相关的信息,您每天都要以缺失和无关的搜索结果的形式支付高昂的关键字搜索。 作为电子商务,客户支持,企业搜索和法律电子发现的应用程序都可以从语义搜索技术的出现中受益,这是为了重新估计信息检索的景观。