在Elasticsearch中使用NLP技术,提升搜索相关性

在当下,如果说我们要选出你朋友圈中的Top 1的主题,那如果不是疫情开发,那么几乎肯定就是chatGPT了。

chatGPT 是一种机器学习技术,它使用了大量的训练数据来学习如何进行自然语言处理。它可以识别文本中的语义和结构,并能够进行语言合成和语言识别,实现非常拟人化的人机对话。chatGPT 可以用来做一些复杂的任务,如问答系统、对话机器人和信息检索等。它的优点在于能够快速理解输入信息,并根据上下文提供准确的回复。通过不断训练和改进,chatGPT 可以逐渐提高它的准确性和效率,为用户提供更好的服务。

机器学习技术能取代搜索引擎技术吗?

因此,有很多人不禁会问,chatGPT能够取代搜索引擎吗?

可以肯定的是,由于其较高质量的回答、高效获取信息的方式以及上瘾式的交互体验,chatGPT这种类型的产品一定会占据一片新的市场。但因为其能力主要是建立在虚拟的训练文本上的,它能提供的更像是知识,而非信息。而类似谷歌等搜索引擎,能够实时获取信息与焦点,能够进行更多的过滤,筛选,精准定位需求,因此,在提供信息这个维度,它是永远不可能替代谷歌的。

Elasticsearch所代表的私域信息的搜索,比如商品,订单,企业内部的非机构化的数据等,更是不可能通过chatGPT来得到。

因此,正如ChatGPT自己给出的回答:"ChatGPT并不是搜索引擎。它的目的不是提供信息搜索。相对于搜索引擎通过索引网页并匹配搜索词来提供信息,ChatGPT则是通过对自然语言问题的回答来帮助用户解决问题。因此,它们之间没有直接的竞争关系,并不能相互颠覆。"

但我们需要接着提问,chatGPT这种机器学习技术能够帮助我们优化搜索引擎吗?答案是肯定的。

机器学习技术能优化搜索引擎技术吗?

关注我们技术的同学应该都或多或少的听说过,随着Elastic 8.0 的发布,Elastic将更多机器学习 (ML) 功能引入Elastic Search Platform的内核中,从而让我们能在 Elasticsearch 中启用自然语言处理 (NLP) 应用程序,例如情感分析、实体识别和文本分类。这些技术将使团队能够以更少的时间和精力构建复杂的支持 ML 的体验,并为如何使用相关性开辟无限的可能性。

机器学习之于Elasticsearch

对于在ML领域有经验的人来说,围绕一个信息建立上下文的能力对于确保NLP模型的准确训练和为一个特定事件检索正确的信息是至关重要的。考虑一个例子。考虑一个您想要比较两个短语的示例:

  • I need to do my homework before I go to school.
  • I need to go to school before I do my homework.

这些句子具有不同的上下文含义,但是如果您使用基于分词的关键字表示来比较它们,这两个句子分出的词是一模一样的。但是,从语义的角度,这两个句子则代表的是完全相反的意思。

缺乏上下文与语义的理解阻碍了搜索搜索的进一步提高准确性,而基于深度神经网络机器学习技术的现代NLP却能几乎完美的解决这个问题。

通过NLP技术解决上下文和语义理解的问题

NLP有很长的历史,40多年来,随着我们所拥有的数据,以及计算能力增长,NLP的方法也在不断变化。但无论怎么变化,在2018年前,大多数NLP还是使用规则集、字典、正则表达式和一些经典的机器学习技术来进行的。而现代NLP的分水岭出现在这之后。在这一年,谷歌发布了 "BERT",它使用了一种叫做Transformer的新型深度神经网络架构。

Transformer模型主要通过使用注意力机制来学习输入序列中词语之间的关系,并使用这些信息来生成文本。这是GPT类型的聊天机器人的基础,并且被广泛应用于并且在自然语言处理的各种领域。

而在搜索领域,我们可以借助BERT进行迁移学习,让机器学习的模型能够从无需标注的互联网级别的数据上学习,并具备理解通用语言的能力。在此基础上,我们只需要少量的标注数据,就可以生成特定专业领域的语言模型

相比于之前以专业词库为基础,仍然依赖于分词之后的关键字匹配的技术。让搜索引擎能够“理解”我们的问题与数据库中的答案,根据上下文语义的判断我们的意图,更能够提升我们搜索的准确度。

为了构建上下文相关性并提高准确性,Elasticsearch自7.3开始,就提供了Multidimensional vector(多维字符串数组)。但需要在Elasticsearch之外去处理向量相关的计算

而借助 Elastic 8.0,用户可以直接在Elasticsearch当中部署NLP 模型,以及来自PyTorch的机器学习模型,从而可以更轻松地将这些模型集成到已经由 Elastic 提供支持的应用程序中,而无需任何复杂的配置。

由于所有工作现在都在 Elasticsearch 中进行,因此处理非常高效,不再需要额外的集成。 

在Elasticsearch当中向量化文档与查询

自然语言处理任务的目的通常是将文本数据转换为机器可以理解的形式。因此,在处理自然语言数据时,需要将文本转换成向量表示,以便用于模型的训练和预测。在命名实体识别,情感分析,语义查询这些最基本的NLPR任务中,都需要进行这一步转换。转换后的向量可能包含文本中的语义信息,并可以用于模型学习和理解向量中的模式(比如实体,情感信息等)。因此,对数据进行向量化是自然语言处理任务的关键步骤。

现在,我们可以在Elasticsearch中部署各种NLP模型:

对模型进行管理和监控:

同时,对任意索引构建机器学习的推理管道:

以进行数据的机器学习处理:

通过集成NLP的技术,我们就可以借此提升搜索中的相关性和准确度。

全文检索和向量检索并重的搜索能力

而在通常的生产实践当中,在搜索精度和搜索效率的平衡中,我们通常会结合全文检索和向量检索来为用户提供更准确的搜索结果。通常会以全文检索为主,以向量检索为辅。对于精确匹配能够解决的问题,比如简单的过滤就能做初步的筛选的,我们优先执行,以减少后面向量运算的工作量。

而筛选出来的结果,我们也需要结合BM2.5的相关性搜索算法找出的结果和基于向量相似性的匹配找出的结果进行一个综合的排序,以便我们能够通过灵活的参数调整,来获得期望中的搜索准确性

合并搜索的示意图

在8.4版本的elasticsearch当中,我们可以使用原有的_search API,在无需代码架构和接口变动的情况下,实现向量搜索对全文搜索的准确性赋能:

样例代码

搜索准确性和吞吐的权衡

对比与通过词典,索引,跳表,在数据分片中快速定位关键字与文档的全文检索技术,向量检索在512维起步,动辄到2048维甚至更高维度的两个向量值之间的计算,其所需要的计算资源和时间明显不是在一个量级的。

在早期的elasticsearch版本中(7.3), 我们提供的是Brute Force的蛮力计算方式,即通过暴力比对每一条向量的距离来判断两个向量的相似性。这种方法虽然可以通过SIMD的方式进行加速,但无论如何,其效率是非常低的,就像我们吐槽RMDB在搜索时所需要做全表扫描一样。

鉴于我们对搜索速度和吞吐的需求是与准确性并重的。甚至在大多数情况下,响应速度对于用户来说是更直观的用户体验。我们就需要考虑如何提高在向量相似方面的计算速度。

业内的解决方案普遍是通过ANN 算法(近似K临近,不一定会召回全部的最近点)来代替KNN算法。在牺牲一定精度的情况下,获得更快的响应和更大的吞吐。在8.4版本的Elasticsearch当中,我们提供的ANN 算法是HNSW(Hierarchical Navigable Small World,中文译为分层可导航小世界),HNSW是一种数据结构和算法,用于高维空间中的最近邻搜索。它是一种基于图的索引结构,可用于快速查找数据集中与给定查询项相似的项,基于某种相似度度量。HNSW在相似性搜索、聚类和推荐系统等应用中特别有用,可以提供比其他方法更好的性能。

如上图,它通过构建一个层次网络来实现快速搜索。该网络由若干层组成,每一层都包含一组点。在搜索过程中,算法会从第一层开始搜索,并逐层向下遍历。每一层中的点都会与查询的目标点进行距离计算,把与目标点距离最近的点挑选出来。然后,算法会沿着这些点的连接线继续向下遍历,直到找到最近邻点为止。

在elasticsearch当中,HNSW 与传统的 KNN 算法相比,具有更高的搜索速度和更小的内存占用。

因此,当我们在elasticsearch中使用knn搜索的时候,在不显式的指定brute force算法,默认是HNSW算法。并且,这两种算法之间,我们会提供一个自动转换机制。比如,在KNN搜索中,我们会与filter集成,搜索会首先运行过滤,如果在用HNSW遍历图时超过匹配过滤器的文档数,我们就转向brute force算法。

在这种设计中,我们即简化了用户的配置,又提高了搜索的吞吐,降低了延时。

开始吧

Elastic 持续投资开发工具,使我们的客户能够轻松创建非凡的搜索解决方案,无论是用于网络、移动还是后端服务。随着 Elastic 8.0 中机器学习的进步,客户将拥有更好的工具,为他们带来竞争优势。我们迫不及待地想看到您使用 Elastic 解决方案构建的鼓舞人心的东西。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...