Elasticsearch:使用 ELSER 进行语义搜索

这篇具有很好参考价值的文章主要介绍了Elasticsearch:使用 ELSER 进行语义搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elastic Learned Sparse EncodeR(或 ELSER)是一种由 Elastic 训练的 NLP 模型,使你能够使用稀疏向量表示来执行语义搜索。 语义搜索不是根据搜索词进行字面匹配,而是根据搜索查询的意图和上下文含义检索结果。

Elasticsearch:使用 ELSER 进行语义搜索

Elasticsearch:使用 ELSER 进行语义搜索

本教程中的说明向你展示了如何使用 ELSER 对数据执行语义搜索。

提示:在使用 ELSER v1 进行语义搜索期间,仅考虑每个字段的前 512 个提取的标记。 有关详细信息,请参阅此页面。

要求

要使用 ELSER 执行语义搜索,你必须在集群中部署 NLP 模型。 请参阅 ELSER 文档以了解如何下载和部署模型。

创建索引映射

首先,必须创建目标索引的映射 —— 包含模型根据你的文本创建的标记的索引。 目标索引必须有一个具有 rank_features 字段类型的字段来索引 ELSER 输出。

PUT my-index
{
  "mappings": {
    "properties": {
      "ml.tokens": {
        "type": "rank_features" 
      },
      "text_field": {
        "type": "text" 
      }
    }
  }
}

注意:

  • 包含预测的字段是 rank_features 字段。
  • 用于创建稀疏向量表示的 text 字段。

有关 rank_features 字段的使用,请详细阅读文章 “Elasticsearch:Rank feature query - 排名功能查询”。

使用推理处理器创建摄取管道

创建一个带有推理处理器的摄取管道,以使用 ELSER 对管道中摄取的数据进行推理。

PUT _ingest/pipeline/elser-v1-test
{
  "processors": [
    {
      "inference": {
        "model_id": ".elser_model_1",
        "target_field": "ml",
        "field_map": {
          "text": "text_field"
        },
        "inference_config": {
          "text_expansion": { 
            "results_field": "tokens"
          }
        }
      }
    }
  ]
}

text_expansion 推理类型需要在推理摄取处理器中使用。

加载数据

在此步骤中,你将加载稍后在推理摄取管道中使用的数据,以从中提取 token。

使用 msmarco-passagetest2019-top1000 数据集,它是 MS MACRO Passage Ranking 数据集的子集。 它包含 200 个查询,每个查询都附有相关文本段落的列表。 所有独特的段落及其 ID 都已从该数据集中提取并编译成一个 tsv 文件。

使用机器学习 UI 中的数据可视化工具下载文件并将其上传到你的集群。 将名称 id 分配给第一列,将 text 分配给第二列。 索引名称是 test-data。 上传完成后,n你可以看到一个名为 test-data 的索引,其中包含 182469 个文档。

关于如何加载这个数据,请详细阅读文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。

Elasticsearch:使用 ELSER 进行语义搜索

Elasticsearch:使用 ELSER 进行语义搜索

通过推理摄取管道摄取数据

通过使用 ELSER 作为推理模型的推理管道重新索引数据,从文本创建 tokens。

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "test-data"
  },
  "dest": {
    "index": "my-index",
    "pipeline": "elser-v1-test"
  }
}

该调用返回一个任务 ID 以监控进度:

GET _tasks/<task_id>

你还可以打开经过训练的模型 UI,选择 ELSER 下的 Pipelines 选项卡以跟踪进度。 完成该过程可能需要几分钟时间。

Elasticsearch:使用 ELSER 进行语义搜索

Elasticsearch:使用 ELSER 进行语义搜索

我们通过如下的命令来查看被写入的文档:

GET my-index/_search

Elasticsearch:使用 ELSER 进行语义搜索

使用 text_expansion 查询进行语义搜索

要执行语义搜索,请使用 text_expansion 查询,并提供查询文本和 ELSER 模型 ID。 下面的示例使用查询文本 “How to avoid muscle soreness after running?”: 

GET my-index/_search
{
   "query":{
      "text_expansion":{
         "ml.tokens":{
            "model_id":".elser_model_1",
            "model_text":"How to avoid muscle soreness after running?"
         }
      }
   }
}

上面搜索的结果是:

Elasticsearch:使用 ELSER 进行语义搜索

Elasticsearch:使用 ELSER 进行语义搜索

结果是根据相关性排序的 my-index 索引中与你的查询文本含义最接近的前 10 个文档。 结果还包含为每个相关搜索结果提取的 token 及其权重。

"hits":[
   {
      "_index":"my-index",
      "_id":"978UAYgBKCQMet06sLEy",
      "_score":18.612831,
      "_ignored":[
         "text.keyword"
      ],
      "_source":{
         "id":7361587,
         "text":"For example, if you go for a run, you will mostly use the muscles in your lower body. Give yourself 2 days to rest those muscles so they have a chance to heal before you exercise them again. Not giving your muscles enough time to rest can cause muscle damage, rather than muscle development.",
         "ml":{
            "tokens":{
               "muscular":0.075696334,
               "mostly":0.52380747,
               "practice":0.23430172,
               "rehab":0.3673556,
               "cycling":0.13947526,
               "your":0.35725075,
               "years":0.69484913,
               "soon":0.005317828,
               "leg":0.41748235,
               "fatigue":0.3157955,
               "rehabilitation":0.13636169,
               "muscles":1.302141,
               "exercises":0.36694175,
               (...)
            },
            "model_id":".elser_model_1"
         }
      }
   },
   (...)
]

将语义搜索与其他查询相结合

你可以将 text_expansion 与复合查询中的其他查询结合使用。 例如,在布尔或全文查询中使用过滤器子句,可能会或可能不会使用与 text_expansion 查询相同的查询文本。 这使你能够合并来自两个查询的搜索结果。

来自 text_expansion 查询的搜索命中往往得分高于其他 Elasticsearch 查询。 这些分数可以通过使用 boost 参数增加或减少每个查询的相关性分数来规范化。 text_expansion 查询的召回率可能很高,因为相关性较低的结果很长。 使用 min_score 参数修剪那些不太相关的文档。

GET my-index/_search
{
  "query": {
    "bool": { 
      "should": [
        {
          "text_expansion": {
            "ml.tokens": {
              "model_text": "How to avoid muscle soreness after running?",
              "model_id": ".elser_model_1",
              "boost": 1 
            }
          }
        },
        {
          "query_string": {
            "query": "toxins",
            "boost": 4 
          }
        }
      ]
    }
  },
  "min_score": 10 
}

Elasticsearch:使用 ELSER 进行语义搜索

说明文章来源地址https://www.toymoban.com/news/detail-500101.html

  • text_expansion 和 query_string 查询都在 bool 查询的 should 子句中。
  • text_expansion 查询的提升值为 1,这是默认值。 这意味着该查询结果的相关性分数没有提高。
  • query_string 查询的提升值为 4。 此查询结果的相关性分数增加,导致它们在搜索结果中排名更高。
  • 仅显示分数等于或高于 10 的结果。

到了这里,关于Elasticsearch:使用 ELSER 进行语义搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:使用 Transformers 和 Elasticsearch 进行语义搜索

    什么语义搜索( semantic search )呢?根据搜索查询的意图和上下文含义(而不仅仅是)检索结果。语义/向量搜索是一种强大的技术,可以大大提高搜索结果的准确性和相关性。 与传统的基于的搜索方法不同,语义搜索使用单词的含义和上下文来理解查询背后的意

    2024年02月08日
    浏览(53)
  • 使用 Elasticsearch、OpenAI 和 LangChain 进行语义搜索

    在本教程中,我将引导您使用 Elasticsearch、OpenAI、LangChain 和 FastAPI 构建语义搜索服务。 LangChain 是这个领域的新酷孩子。 它是一个旨在帮助你与大型语言模型 (LLM) 交互的库。 LangChain 简化了与 LLMs 相关的许多日常任务,例如从文档中提取文本或在向量数据库中对它们建立索引

    2024年02月08日
    浏览(41)
  • Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR

    警告 :此功能处于技术预览阶段,可能会在未来的版本中更改或删除。 Elastic 将尽最大努力修复任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。 Elastic Learned Sparse EncodeR - 或 ELSER - 是由 Elastic 训练的检索模型,使你能够执行语义搜索以检索更相关的搜索结果

    2024年02月09日
    浏览(34)
  • Elasticsearch:升级索引以使用 ELSER 最新的模型

    在此 notebook 中,我们将看到有关如何使用 Reindex API 将索引升级到 ELSER 模型 .elser_model_2 的示例。 注意:或者,你也可以通过 update_by_query 来更新索引以使用 ELSER。 在本笔记本中,我们将看到使用 Reindex API 的示例。 我们将在本笔记本中看到的场景: 将未生成 text_expansion 字段

    2024年02月03日
    浏览(56)
  • Elasticsearch:如何在 Elastic 中实现图片相似度搜索

    作者:Radovan Ondas 在本文章,我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境,然后导入 NLP 模型,最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 Elasticsearch:如何在 Elastic 中实现图片相似度搜索 第一步是为你的应用程序设

    2024年01月22日
    浏览(48)
  • Elasticsearch:多语言语义搜索

    在此示例中,我们将使用多语言嵌入模型 multilingual-e5-base 对混合语言文档的 toy 数据集执行搜索。 使用这个模型,我们可以通过两种方式进行搜索: 跨语言,例如使用德语查询来查找英语文档 在非英语语言中,例如使用德语查询来查找德语文档 虽然此示例仅使用密集检索,

    2024年02月08日
    浏览(42)
  • Elasticsearch:语义搜索即服务处于卓越搜索的中心

    作者:来自 Elastic Sherry Ger, Stephen Brown 对于许多企业来说,搜索卓越中心(center of excellence - COE)向其用户提供搜索服务,从不同的数据源中整理知识,并将搜索功能集成到其内部和外部应用程序中。Elasticsearch,这个 “支撑着互联网上大约 90% 的搜索栏” 的分布式搜索平台,

    2024年04月11日
    浏览(34)
  • Elastic 发布 Elasticsearch Relevance Engine™ — 为 AI 革命提供高级搜索能力

    作者:Matt Riley 今天我们将向大家介绍 Elasticsearch Relevance Engine™(ESRE™) ,这是一种创建高度相关的 AI 搜索应用程序的新功能。ESRE 建立在 Elastic 在搜索领域的领导地位以及超过两年的机器学习研究和开发基础之上。Elasticsearch Relevance Engine 结合了 AI 的最佳实践和 Elastic 的文

    2024年02月06日
    浏览(38)
  • Django中使用Elasticsearch进行搜索

    Django是一个流行的Python Web框架,Elasticsearch是一个流行的开源搜索引擎。结合Django和Elasticsearch,可以构建一个强大的搜索引擎。 下面是如何在Django中使用Elasticsearch进行搜索的步骤: 安装Elasticsearch和elasticsearch-py 首先,需要在本地安装Elasticsearch和elasticsearch-py。可以通过官网

    2024年02月11日
    浏览(42)
  • Elasticsearch:使用 fuzziness 来进行搜索

    在我之前的文章 “Elasticsearch:fuzzy 搜索 (模糊搜索)”,我详细描述了模糊搜索。尽管那篇文章已经很详尽了,但是还是有 auto 这个配置没有完全覆盖到。在今天的文章中,我们来进一步对这个进行讲解一下。 Fuzziness 参数存在于某些查询中,使用它时,你将受益于根据术

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包