Elasticsearch:一年中最神奇的时刻:利用语义搜索寻找最喜庆的哈利·波特时刻

这篇具有很好参考价值的文章主要介绍了Elasticsearch:一年中最神奇的时刻:利用语义搜索寻找最喜庆的哈利·波特时刻。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:iulia

Elasticsearch:一年中最神奇的时刻:利用语义搜索寻找最喜庆的哈利·波特时刻,AI,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,人工智能

霍格沃茨的圣诞节,有人吗?

我不了解你,但对我来说,圣诞节通常意味着开始(又一个)哈利·波特马拉松。 虽然我全年都是魔法世界的粉丝,但霍格沃茨的圣诞节还是有一些额外的节日气氛。

你是否曾经希望有办法找到该系列中最快乐、最愉快、最充满礼物的时刻,但您只是没有时间梳理所有 7 本书和 8 部电影? 输入 Elastic 语义搜索!

让我们踏上一段神奇的旅程,将《哈利·波特》书籍转变为 NLP 索引,并使用 Elastic Python 客户端和向量搜索功能进行一些非常酷、非常喜庆的搜索。

介绍哈利波特 Elasticsearch 索引 - 使用语义搜索来搜索哈利波特的节日时刻

神奇的搜索体验

这是通过结合几个关键概念来实现的:

  • 首先,我们做 Elastic 最擅长的事情,即搜索。
  • 更进一步,我们可以轻松地使用 eland 从 Hugging Face 导入支持的模型(例如情感分析),以便从文本中获得更多细微差别。
  • 最后,我们可以使用 ELSER 按含义进行搜索,而不是使用通常的关键字/过滤系统。 简单来说,我们用更人性化的理解或语言进行搜索。 (用奇特的术语来说,我们使用相似度分数找到将句子的嵌入空间表示作为向量之间的最小距离。- 但我们不要让圣诞节过于复杂化)

首先,我从 kaggle 数据集  中获取了书籍,并在 Python Notebook 中进行了一些额外的处理,以使它们的形状适合我们的索引。 我们重点关注前三本书中的这些示例。


我们将每个句子创建一个文档字典作为我们准备搜索的数据库。 看起来像这样:

[{'text_field': 'Mr and Mrs Dursley of number four Privet Drive were proud to say that they were perfectly normal thank you very much '},
 {'text_field': 'They were the last people youd expect to be involved in anything strange or mysterious because they just didnt hold with such nonsense '},
 {'text_field': 'Mr Dursley was the director of a firm called Grunnings which made drills '}]

我们在 Elastic 集群上创建一个简单的索引,并使用 python 客户端将每个句子/文档批量上传到其中。 你可以在此处查看存储库以获取完整的项目代码。 我们可以使用如下的命令来下载代码:

git clone https://github.com/iuliaferoli/harry-potter-search

我们已经可以进行一些简单的搜索,例如查找书中所有提到 “Christmas” 的内容:

现状 —— 关键词搜索

response = client.search(index = index, query={
    "match" : {
        "text_field" : "christmas"
    }
})
We get back 203 results, here are the top ones:
meeting before Christmas 
Merry Christmas said George 
See you at Christmas 
Come on Hermione its Christmas 
So Ive come for Christmas 

当我们搜索特定单词时,这很好; 但当我们试图记住书中的特定场景......或者是电影......以及具体的台词是什么......呃......类似 “Harry getting a present”。 那行得通吗?

We get back 10000 results, here are the top ones:
Have a present 
Ive got yeh a present 
Wow Harry He had just opened Harrys present a Chudley Cannon hat 
Particularly in present company ! ‘Present company ?repeated Snape sardonically 
Early Christmas present for you Harry he said 
Id be happier if a teacher were present 

好吧,所以模型并没有意识到 “being present/linving in the present” 并不是我正在寻找的节日氛围。 让我们为我们的搜索添加一些魔法。

通过情感分析和语义搜索丰富数据

借助 Eland,我们可以导入各种 ML 模型并将它们部署到 Elastic 环境中,从而使我们能够使用新数据对它们进行推理调用,或者丰富现有索引。 有大量兼容模型,但在本例中,我们将使用此处的情感分析文本分类器。

任何模型都可以通过 docker 导入,以获得更轻松的部署体验,并确保满足所有依赖项和版本。

docker run -it --rm elastic/eland \
    eland_import_hub_model \
      --cloud-id $CLOUD_ID \
      -u $USER -p $PASSWORD \
      --hub-model-id distilbert-base-uncased-finetuned-sst-2-english \
      --task-type text_classification \
      --start 

我们还可以导入 embedding 模型,使我们能够使用文本相似性进行搜索,以解释同义词或相关词。 这可以使用另一个导入的模型手动完成,或者我们可以使用 ELSER - 这是 Elastic 的开箱即用语义搜索模块。

将模型添加到你的 Elastic 集群后,你可以随时使用它们对文本数据运行推理。 例如,一个简单的调用如下所示:

model_id = "distilbert-base-uncased-finetuned-sst-2-english"
doc_test = {"text_field": "Harry Potter is the best Christmas movie in the world"}
result = MlClient.infer_trained_model(client, model_id =model_id, docs = doc_test)
print(result["inference_results"])
[{'predicted_value': 'POSITIVE', 'prediction_probability': 0.9998637678432463}]

惊人的! 我们现在可以在搜索中考虑情绪,毕竟我们正在寻找该系列中绝对最快乐的部分。

让我们加快这个过程 - 我们可以创建一个管道,使用情感和向量嵌入模型立即评估所有文档,从而丰富我们的整个索引。 所以书中的每个句子都会得到一个积极或消极的情感标签,以及一个向量表示,以帮助我们稍后使用语义搜索。

client.ingest.put_pipeline(
    id="sentiment_and_elser", 
    processors=[
    {
      "inference": {
        "model_id": "distilbert-base-uncased-finetuned-sst-2-english",
        "target_field" : "sentiment",
        "field_map": {
          "Sentence": "text_field"
        }
      }
    },
    {
      "inference": {
        "model_id": ".elser_model_1",
        "target_field": "ml",
        "field_map": {
          "Sentence": "text_field"
        },
        "inference_config": {
          "text_expansion": {
            "results_field": "tokens"
          }
        }
      }
    }
  ]
)
client.reindex(body={
      "source": {
          "index": "hp_books"},
      "dest": {"index": "hp_books_enriched", "pipeline" : "sentiment_and_elser"}
    }, wait_for_completion=False)

现在我们有了一个复杂的索引,其中包含各种 ML 字段,我们可以使用它们来进行神奇的搜索。让我们通过一些节日搜索来尝试一下。

一年中最神奇的时刻

我们现在可以使用添加的语义信息维度来运行相同的搜索。

result = client.search(
    index='hp_books_enriched', 
    size=5,
    query={
        "text_expansion": {
            "ml.tokens": {
                "model_id":".elser_model_1",
                "model_text":"christmas"
            }
        }
    },
    request_timeout=30
)

我们的新结果看起来比之前的搜索有趣得多 - 之前的搜索只是专注于在书中查找 “Christmas”一词,而不是为搜索捕获更多上下文。

Most unfortunate that it should happen on Christmas Day 
Christmas morning dawned cold and white 
What a jolly holiday its going to be 
Td invite you for Christmas but 
We can do all our Christmas shopping there !said Hermione 

现在的例子怎么样? 希望搜索结果中不再出现语法引起的歧义。

result = client.search(
    index='hp_books_enriched', 
    size=5,
    query={
        "text_expansion": {
            "ml.tokens": {
                "model_id":".elser_model_1",
                "model_text":"Harry getting a present"
            }
        }
    },
    request_timeout=30
)

现在我们得到:

but how else was I supposed to get Harrys present to him ?Stick it back in the trunk Harry advised as the Sneakoscope whistled piercingly 
Oy !Presents !Harry reached for his glasses and put them on squinting through the semidarkness to the foot of his bed where a small heap of parcels had appeared 
Harry opened the last present to find a new handknitted sweater from Mrs Weasley and a large plum cake 
There you go Ron yelled happily stuffing a fistful of gold coins into Harrys hand for the Omnioculars !Now youve got to buy me a Christmas present ha !T 
Early Christmas present for you Harry he said 

好多了! 充满节日气氛!

让我们添加一些情绪。 大多数结果看起来已经相当积极了 —— 所以让我们来挑战一下——我们能找到任何负面的赠送礼物的例子吗?

result = client.search(
    index='hp_books_enriched', 
    size=5,
    query={
        "bool": {
            "should": [{
                "text_expansion": {
                    "ml.tokens": {
                        "model_id":".elser_model_1",
                        "model_text":"Harry getting a present"
                    }
                },
            }],
            "must":[
            {
                "match" : {
                    "sentiment.predicted_value": "NEGATIVE"
                }
            }]}})
Yet another unusual thing about Harry was how little he looked forward to his birthdays 

哎哟。 好吧,我们不会再这样做了。 让我们以积极的态度离开吧。

该系列中最积极的段落是什么?
(表明我们也可以选择一次在搜索中仅使用其中一个模型,在本例中 - 仅使用情绪)

query={
    "match" : {
      "sentiment.predicted_value": "POSITIVE"
    }
  }

response = client.search(index = "hp_books_enriched",query=query, sort="sentiment.prediction_probability:desc")
The most positive sentences in the series:

A really really happy memory 
that means ‘great happiness 
it was incredible 
Dinner that night was a very enjoyable affair 
Relief warm sweeping glorious relief swept over Harry 
It was all delicious 
A powerful one 
Excellent !said Harry happily 
Brilliant mind 
Tonight will be an excellent time to do it 

啊 —— 现在心情很好,又去看电影了。

祝大家节日快乐,寻找愉快!文章来源地址https://www.toymoban.com/news/detail-827399.html

到了这里,关于Elasticsearch:一年中最神奇的时刻:利用语义搜索寻找最喜庆的哈利·波特时刻的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch:使用 ELSER 进行语义搜索

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

    2024年02月11日
    浏览(51)
  • Elasticsearch:使用 ELSER 文本扩展进行语义搜索

    在今天的文章里,我来详细地介绍如何使用 ELSER  进行文本扩展驱动的语义搜索。 如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的链接来进行安装: 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kiba

    2024年02月07日
    浏览(52)
  • Elasticsearch:使用 ELSER v2 进行语义搜索

    在我之前的文章 “Elasticsearch:使用 ELSER 进行语义搜索”,我们展示了如何使用 ELESR v1 来进行语义搜索。在使用 ELSER 之前,我们必须注意的是: 重要 :虽然 ELSER V2 已正式发布,但 ELSER V1 仍处于 [预览] 状态。此功能处于技术预览阶段,可能会在未来版本中更改或删除。 E

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

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

    2024年02月08日
    浏览(44)
  • 揭秘Vue 2中的$nextTick:等待DOM更新的神奇时刻!

    在 Vue 2 中, $nextTick 是一个异步方法,用于在下次 DOM 更新循环结束后执行回调函数。 它的原理可以解析如下: Vue 2 维护了一个队列,用于存储需要延迟执行的回调函数。 下面是一个简单的代码案例,演示了 Vue 2 中的 $nextTick 方法和队列机制: HTML: JavaScript: 在上述代码中,

    2024年02月12日
    浏览(39)
  • Elasticsearch:语义搜索 - Semantic Search in python

    当 OpenAI 于 2022 年 11 月发布 ChatGPT 时,引发了人们对人工智能和机器学习的新一波兴趣。 尽管必要的技术创新已经出现了近十年,而且基本原理的历史甚至更早,但这种巨大的转变引发了各种发展的“寒武纪大爆炸”,特别是在大型语言模型和生成 transfors 领域。 一些怀疑论

    2024年02月14日
    浏览(61)
  • Elasticsearch:语义搜索、知识图和向量数据库概述

    结合对你自己的私有数据执行语义搜索的概述 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。 这种方法基于这样的想法:搜索引擎不仅应该匹配查询中的,还应该尝试理解用户搜索的意图以及所使用的单

    2024年02月16日
    浏览(49)
  • 【NLP】什么是语义搜索以及如何实现 [Python、BERT、Elasticsearch]

    语义搜索是一种先进的信息检索技术,旨在通过理解搜索查询和搜索内容的上下文和含义来提高搜索结果的准确性和相关性。与依赖于匹配特定单词或短语的传统基于的搜索不同,语义搜索会考虑查询的意图、上下文和语义。 语义搜索在搜索结果的精度和相关性至关重

    2024年02月04日
    浏览(49)
  • Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

    在信息过载的时代,根据上下文含义和用户意图而不是精确的匹配来查找相关搜索结果已成为一项重大挑战。 传统的搜索引擎通常无法理解用户查询的语义上下文,从而导致相关性较低的结果。 在现代向量搜索之前,我们有 “传统”的 词袋(Bags of word - BOW)方法。

    2024年02月15日
    浏览(58)
  • 释放搜索潜力:基于ES(ElasticSearch)打造高效的语义搜索系统,让信息尽在掌握[2.项目讲解篇],支持Linux/Windows部署安装

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目

    2024年02月03日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包