在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用。 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切关键字匹配的结果。
虽然关键字搜索对于简化信息检索非常有价值,但它也有其局限性。 主要缺点之一在于它对词汇匹配的依赖。 关键字搜索将查询中的每个单词视为独立的实体,通常会导致结果可能与用户的意图不完全一致。 此外,不明确的查询可能会产生不同的解释,从而导致混合或不准确的结果。
当处理上下文严重影响含义的语言时,会出现另一个关键限制。 词语的含义在很大程度上取决于具体情况。 单独使用关键字可能无法正确捕获这些查询,这可能会导致误解。
随着我们的数字环境不断发展,我们对更精致、更直观的搜索体验的期望也在不断变化。 这为语义搜索的出现铺平了道路,语义搜索是一种旨在超越传统基于关键字的方法的局限性的方法。 通过关注搜索查询的意图和上下文含义,语义搜索为关键字搜索带来的挑战提供了一种有前景的解决方案。
如上面的图片所示,如果我们通过 keyword 来进行搜索,我们想搜索的是 apple 水果,但是我们最终可能得到是关于 apple(苹果)公司的有关信息。其实它并不是我们想要的。
语义搜索是在互联网上搜索内容的高级方式。 它不仅仅是匹配单词,而是理解你真正在寻找的内容。 它能找出你的话背后的含义以及它们之间的关系。
这项技术使用人工智能和理解人类语言等技术。 几乎就像它在说人类一样! 它着眼于大局,检查具有相似含义的单词以及与你所问问题相关的其他想法。
基本上,语义搜索可以帮助你从互联网上的大量内容中准确获取所需的内容。 这就像与一个超级聪明的搜索引擎交谈,它不仅可以获取你所说的单词,还可以获取你真正想要查找的内容。 这使得它非常适合做研究、查找信息,甚至获得符合你兴趣的建议。
Elastic Search 提供语义搜索,重点关注搜索查询的含义和上下文,而不仅仅是匹配关键字。 它使用自然语言处理(NLP)和向量搜索来实现这一目标。 Elastic 有自己的预训练表示模型,称为 Elastic Learned Sparse EncodeR (ELSER)。
在进入 ELSER 之前,让我们更多地了解 NLP 和向量搜索。
自然语言处理是人工智能的一个分支,致力于使计算机能够以有价值且有用的方式理解、解释和生成人类语言。
NLP 涉及一组允许计算机处理和分析大量自然语言数据的技术和算法。 这包括以下任务:
向量搜索是一种涉及将数据点或信息表示为多维空间中的向量的技术。 空间的每个维度代表文档或数据点的不同特征或属性。
在这个向量空间中,相似的文档或数据点彼此距离更近。 这允许有效的基于相似性的搜索。 例如,如果你正在搜索与给定文档相似的文档,则可以计算表示文档的向量之间的相似度以查找最接近的匹配项。
向量搜索广泛用于各种应用,包括:
1)Vector embedding:
在此步骤中,NLP 涉及将文本数据转换为数值向量。 使用词嵌入等技术将文本中的每个单词转换为高维向量
2.相似度分数:
引擎将向量化查询与向量化文档进行比较以确定它们的相似性。
3)人工神经网络算法:
近似最近邻 (ANN) 算法可有效查找高维空间中的近似最近邻。
4)查询处理:
用户的查询经历与文档类似的处理以生成向量表示。
5)距离计算:
引擎计算向量化查询和文档之间的距离(相似度分数)。
6)最近邻搜索:
引擎查找嵌入最接近查询嵌入的文档。
7)排名结果:
结果根据相似度分数进行排名。
ELSER 是一个经过专门设计的预训练模型,可以出色地理解上下文和意图,而无需进行复杂的微调。 ELSER 目前仅适用于英语,其开箱即用的适应性使其成为各种自然语言处理任务的宝贵工具。 它对稀疏向量表示的利用提高了处理文本数据的效率。 ELSER 的词汇表中包含约 30,000 个术语,通过用上下文相关的对应项替换术语来优化查询,确保精确而全面的搜索结果。
让我们深入探讨如何利用 ELSER 的潜力来增强 Elasticsearch 中的搜索能力。你可以参考文章 “Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR” 来配置自己的 ELSER。
PUT
{
"mappings": {
"properties": {
"ml.tokens": {
"type": "rank_features"
},
"name": {
"type": "text"
}
}
}
}
PUT _ingest/pipeline/
{
"processors": [
{
"inference": {
"model_id": ".elser_model_1",
"target_field": "ml",
"field_map": {
"text": "text_field"
},
"inference_config": {
"text_expansion": {
"results_field": "tokens"
}
}
}
}
]
}
curl -X POST 'https:////_doc?pipeline='
-d '{
"name" : "How to Adapt Crucial Conversations to Global Audiences"
}'
摄取管道作用于传入数据并将相关 token 添加到文档中:
{
"name" : "How to Adapt Crucial Conversations to Global Audiences",
"ml":{
"tokens": {
"voice": 0.057680283,
"education": 0.18481751,
"questions": 0.4389099,
"adaptation": 0.6029656,
"language": 0.4136539,
"quest": 0.082507774,
"presentation": 0.035054933,
"context": 0.2709603,
"talk": 0.17953876,
"communication": 1.0619682,
"international": 0.38651025,
"different": 0.25769454,
"conversation": 1.03593,
"train": 0.021380302,
"audience": 0.97641367,
"development": 0.33928272,
"adapt": 0.90020984,
"certification": 0.45675382,
"cultural": 0.63132435,
"distraction": 0.38943478,
"success": 0.09179027,
"cultures": 0.82463825,
"essay": 0.2730616,
"institute": 0.21582486,
},
"model_id":".elser_model_1"
}
}
GET /_search
{
"query":{
"text_expansion":{
"ml.tokens":{
"model_id":".elser_model_1",
"model_text":
}
}
}
}
GET my-index/_search
{
"query": {
"bool": {
"should": [
{
"text_expansion": {
"ml.tokens": {
"model_text": ,
"model_id": ".elser_model_1",
}
}
},
{
"query_string": {
"query": ,
}
}
]
}
}
}
我们还可以将 text_expansion 与复合查询中的其他查询结合起来,以获得更精细的结果。
与 Elasticsearch 中的其他查询相比,text_expansion 查询通常会产生更高的分数。 我们可以使用 boost 参数调整相关性分数。
更多阅读:
Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR
Elasticsearch:使用 ELSER 进行语义搜索
Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR