Elasticsearch:使用 NLP 问答模型与你喜欢的圣诞歌曲交谈

news2025/1/22 16:50:24

自然语言处理 (NLP) 是人工智能 (AI) 的一个分支,旨在通过将计算语言学与统计、机器学习和深度学习模型相结合,尽可能接近人类解释地理解人类语言。

NLP 的最大挑战之一是在考虑到各种语言表示的情况下预训练文本数据的过程。

2018 年,谷歌采购了一种称为 BERT(Bidirectional Encoder Representations from Transformers)的预训练 NLP 新技术,不再需要以任何固定顺序处理数据,从而允许在更大量的数据上进行训练,并提高理解上下文的能力和语言的歧义。

与任何其他预训练过程一样,数据越多越好。 因此,使用了未标记的文本数据集,例如整个英文维基百科。 然后预训练作为构建的 “知识” 层。

为了支持使用与 BERT 相同的分词器的模型,Elastic 支持 PyTorch 库,这是最流行的机器学习库之一,它支持像 BERT 使用的 Transformer 架构这样的神经网络,支持 NLP 任务并将这些任务合并为数据的一部分流水线到 Elasticsearch。

一般来说,任何具有受支持架构的训练模型都可以部署在 Elasticsearch 中,包括 BERT 和变体,例如:

  • RoBERTa
  • DistilBERT
  • RetriBERT
  • MobileBERT
  • ELECTRA

这些模型按 NLP 任务列出。

目前,这些是支持的任务:

  • Extract information
  1. Named entity recognition
  2. Fill-mask
  3. Question answering
  • Classify text
  1. Language identification
  2. Text classification
  3. Zero-shot text classification
  • Search and compare text
  1. Text embedding
  2. Text similarity

与 classfification 和 regression 的情况一样,导入经过训练的模型后,你可以使用它进行预测(推理 inference)。

对于我们今天的这个演示,我们将使用这些任务之一 -> information extraction:Question answering

此任务允许我们在给定上下文(文本)和问题的情况下获得答案,从提供的文本中提取信息以回答提供的问题。

在这种情况下,它不像具有对话流的聊天机器人,但有助于自动响应常见问题,或者甚至在处理之前未映射的开放式问题时使用对话流。

我们现在要做的是使用我们的 eland 库将 QA 模型导入你的 Elastic Stack,这是一个用于在 Elasticsearch 中探索和分析数据的 Python Elasticsearch 客户端,我们有一些简单的方法和脚本可以让你从中提取模型Hugging Face 模型中心,一个用于构建、训练和部署开源机器学习模型的 AI 社区。

在这种情况下,我们将导入 Hugging Face 上可用的模型 deepset/minilm-uncased-squad2。

将 PyTorch 模型上传到你的集群后,你将能够将该模型分配给特定的机器学习节点,将其加载到内存中并启动本机 libtorch 进程。

一旦模型分配完成,我们就可以进行推理,使用推理处理器来评估模型。 对于这个演示,我们将使用圣诞歌词作为我们的背景,这将允许我们对我们最喜欢的圣诞歌曲提问。

让我们开始吧!在今天的展示中,我将使用最新的 Elastic Stack 8.5.3 来进行展示。

安装

Elasticsearch 及 Kibana

如果你还没安装好自己的 Elasticsearch 及 Kibana,请参阅如下的文章来进行安装:

如果你还没安装好自己的 Elasticsearch 及 Kibana,请参阅如下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch
  • Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana

请注意文章中的 8.x 的安装部分。由于使用 eland 上传模型是白金版或者是企业版的功能,在我们的演示中,我们需要启动白金版试用功能:

 

 

Eland

Eland 可以通过 pip 从 PyPI 安装。在安装之前,我们需要安装好自己的 Python。

$ python --version
Python 3.10.2

可以使用 Pip 从 PyPI 安装 Eland:

python -m pip install eland

也可以使用 Conda 从 Conda Forge 安装 Eland:

conda install -c conda-forge eland

希望在不安装 Eland 的情况下使用它的用户,为了只运行可用的脚本,可以构建 Docker 容器:

git clone https://github.com/elastic/eland
cd eland
docker build -t elastic/eland .

Eland 将 Hugging Face 转换器模型到其 TorchScript 表示的转换和分块过程封装在一个 Python 方法中; 因此,这是推荐的导入方法。

  1. 安装 Eland Python 客户端。
  2. 运行 eland_import_hub_model 脚本。 例如:
eland_import_hub_model --url <clusterUrl> \ 
--hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \ 
--task-type ner 
  • 指定 URL 以访问你的集群。 例如,https://<user>:<password>@<hostname>:<port>。
  • 在 Hugging Face 模型中心中指定模型的标识符。
  • 指定 NLP 任务的类型。 支持的值为 fill_mask、ner、text_classification、text_embedding, question_answering 和 zero_shot_classification。

上传 QA model

在此演示中,我们将使用随机 QA 模型,但你可以随意导入要使用的模型。 你可以在 Hugging Face 网页上阅读有关此模型的更多详细信息。

从上面,我们可以看出来,给定一定的上下文,我们提问,就可以得到我们需要的答案。 

打开我们的终端并使用我们的端点和 model 名称更新以下命令:

eland_import_hub_model --url https://<user>:<password>@<hostname>:<port> \
--hub-model-id <model_name> \
--task-type <task_type>

针对我的情况,我使用如下的命令:

eland_import_hub_model --url https://elastic:3Q5_PqiMCP-=8xcRIvCS@localhost:9200 \
	--hub-model-id deepset/minilm-uncased-squad2 \
	--task-type question_answering \
	--ca-cert /Users/liuxg/elastic/elasticsearch-8.5.3/config/certs/http_ca.crt
	--start

在上面,我使用 --ca-cert 选项来设置我的自签名证书的证书。当然你也可以选择如下的方式来忽略自签名证书:

eland_import_hub_model --url https://elastic:3Q5_PqiMCP-=8xcRIvCS@localhost:9200 \
	--hub-model-id deepset/minilm-uncased-squad2 \
	--task-type question_answering \
	--insecure
	--start

我们可以到机器学习的页面来查看:

 

 

如果你在之前的命令中没有添加 --start 选项,那么你需要点击上面的 play 按钮来进行启动:

 

部署后,State 列的值为 started,Actions 下的 Start deployment 选项将被禁用,这意味着部署已经完。

让我们测试一下我们的模型吧!

复制上面的模型 ID deepset__minilm-uncased-squad2。

在 Kibana 菜单中,单击开 Dev Tools。

在此 UI 中,你将有一个控制台来与你的数据进行交互。

让我们使用推理处理器(inference processor)来推理经过训练的模型。

Christmas song

我们选择为这首歌提问:Mariah Carey - All I Want For Christmas Is You

好吧,2022 年又是第一名。我们使用如下的命令格式来进行推理:

POST _ml/trained_models/<model_id>/deployment/_infer
{
  "docs": [{"text_field": "<input>"}],
  "inference_config": {"question_answering": {"question": "<question_to_be_answered>"}}
}

此 POST 方法包含一个文档数组,其中包含一个与你配置的训练模型输入匹配的字段,通常字段名称为 text_field。 text_field 值是你要推断的输入。 对于提到的 QA 模型,除了我们将提供的文本作为输入外,问题是必需的,inference_config 包含推理的配置,对于 QA 模型,针对你的 text_field 提出问题。

在我添加歌曲歌词的示例中,这将是:

问题:我在意礼物吗?

POST _ml/trained_models/deepset__minilm-uncased-squad2/deployment/_infer
{
    "docs": [{"text_field": "I don't want a lot for Christmas There's just one thing I need I don't care about presents Underneath the Christmas tree I just want you for my own More than you could ever know Make my wish come true All I want for Christmas is you. I don't want a lot for Christmas There is just one thing I need I don't care about presents Underneath the Christmas tree I don't need to hang my stocking There upon the fireplace Santa Claus won't make me happy With a toy on Christmas day I just want you for for my own More than you could ever know Make my wish come true All I want for Christmas is you You baby I won't ask for much this Christmas I won't even wish for snow I'm just gonna keep on waiting Underneath the mistletoe I won't make a list and send it To the North Pole for Saint Nick I won't even stay awake to Hear those magic reindeer click 'Cause I just want you here tonight Holding on to me so tight What more can I do Baby all I want for Christmas is you All the lights are shining So brightly everywhere And the sound of children's Laughter fills the air And everyone is singing I hear those sleigh bells ringing Santa won't you bring me the one I really need Won't you please bring my baby to me Oh, I don't want a lot for Christmas This is all I'm asking for I just want to see my baby Standing right outside my door Oh I just want him for my own More than you could ever know Make my wish come true Baby all I want for Christmas is you All I want for Christmas is you baby All I want for Christmas is you baby."}],
    "inference_config": {"question_answering": {"question": "Do I care about presents?"}}
}

单击播放图标,你可以发送请求。

答案由下面的对象显示:

predicted_value 包含你的答案。显然不在乎礼物,而是在乎的是人 :)

I don't care about presents Underneath the Christmas tree.

此外,你还有 start_offset 和 end_offset 记录您的 predicted_value 的开始和结束字符偏移量以及此预测的概率,即 prediction_probability 字段。 

让我们提出另外一个问题:

问题:圣诞节我想要什么?

我们的命令格式是:

POST _ml/trained_models/deepset__minilm-uncased-squad2/deployment/_infer
{
    "docs": [{"text_field": "I don't want a lot for Christmas There's just one thing I need I don't care about presents Underneath the Christmas tree I just want you for my own More than you could ever know Make my wish come true All I want for Christmas is you. I don't want a lot for Christmas There is just one thing I need I don't care about presents Underneath the Christmas tree I don't need to hang my stocking There upon the fireplace Santa Claus won't make me happy With a toy on Christmas day I just want you for for my own More than you could ever know Make my wish come true All I want for Christmas is you You baby I won't ask for much this Christmas I won't even wish for snow I'm just gonna keep on waiting Underneath the mistletoe I won't make a list and send it To the North Pole for Saint Nick I won't even stay awake to Hear those magic reindeer click 'Cause I just want you here tonight Holding on to me so tight What more can I do Baby all I want for Christmas is you All the lights are shining So brightly everywhere And the sound of children's Laughter fills the air And everyone is singing I hear those sleigh bells ringing Santa won't you bring me the one I really need Won't you please bring my baby to me Oh, I don't want a lot for Christmas This is all I'm asking for I just want to see my baby Standing right outside my door Oh I just want him for my own More than you could ever know Make my wish come true Baby all I want for Christmas is you All I want for Christmas is you baby All I want for Christmas is you baby."}],
    "inference_config": {"question_answering": {"question": "What do I want for Christmas?"}}
}

我们可以提更多的问题:

  • Will Santa Claus make me happy?
  • Are the lights shining?

当然你可以试其它的歌曲或者文字。

我希望你喜欢将 NLP 与 Elastic Stack 结合使用! 随时欢迎反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业报表插件怎么用?

最近因为单位年底要做部门总结汇报&#xff0c;需要使用很多的数据以报表的形式来引证今年的工作情况&#xff0c;内部的 OA、ERP 这些业务系统是指望不上了。作为懂一点 SQL、又经常用 Excel 来给领导做报表的我&#xff0c;在网上一轮操作&#xff08;就是百度啦&#xff09;…

算法通关手册 刷题笔记1 数组基础

算法通关手册 刷题笔记1 数组基础 持续更新中 文章目录算法通关手册 刷题笔记1 数组基础数组操作题目0189 轮转数组AC自己的解法其他解法知识点查漏补缺关于python中的数组赋值python中对象的引用0066 加一AC自己的解法其他解法知识点查漏补缺0724 寻找数组的中心下标AC自己的解…

大数据必学Java基础(一百一十六):Application域监听器

文章目录 Application域监听器 一、认识Application域监听器 二、监听器代码 Application域监听器 一、认识Application域监听器

关于金字塔格式转tiff并且openslide能获取到缩略图等标签信息

我们都知道openslide通过openslide_get_associated_image_names获取相关的图像名称&#xff0c;比如"thumbnail",“label”,“macro"等。那我们将"thumbnail”,“label”,"macro"写入tiff的时候&#xff0c;如何才能保证openslide能够获取到呢&a…

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现(更新中)

【BetterBench原创】2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现&#xff08;更新中&#xff09; 更新进展 2022年12月20日 22:00 发布初步思路 &#xff08;待更新&#xff09;发布初步思路实现代码 …

即时通讯音视频开发视频编解码预测技术

目的是去除空间冗余和时间冗余。因为视频存在大量的空间冗余和时间冗余&#xff0c;包括空间冗余、时间冗余&#xff0c;预测后得到去除大部分空间或时间冗余的残差。 图像空间相邻像素具有很强的相关性&#xff0c;帧内预测技术去除空间冗余。 视频图像在时间上有较强的相关性…

组团出海抢抓跨境电商外贸,有利于2023“开门稳”

组团出海抢抓跨境电商外贸&#xff0c;有利于2023“开门稳” 我国是货物贸易第一大国&#xff0c;强大的生产能力、出色的产业配套、完善的物流供应、充足高效的劳动力&#xff0c;都为我国成为贸易强国提供了有利条件。 近几年&#xff0c;中国跨境电商产业进入快速发展阶段&a…

区块链北大肖老师学习笔记4

第五节 比特币系统的实现 区块链是去中心化的账本&#xff0c;比特币使用的是基于交易的这种账本模式(transaction[交易]-based ledger[账本])。系统当中并不会显示每个账户有多少钱。 比特币系统的全节点要维护一个叫UTXO(unspent transaction output)(还没有被花出去的交易的…

成为2.2亿儿童主动要吃的天然营养,AMSTRONG维小壮做对了什么?

文|螳螂观察&#xff08;TanglangFin&#xff09; 随着疫情防控政策的调整&#xff0c;在人们开始注重提升身体免疫力以抗击病毒的措施中&#xff0c;在国外流行多年的接骨木莓&#xff0c;开始受到国内消费者的青睐。 接骨木莓的功效早已被美国FDA和加拿大FDA双重认证&#…

VUE3-Pinia的使用《三》

pinia的官网是简介 | Pinia。 它的功能和vuex差不多&#xff0c;但是pinia更加优于vuex。主要用于状态管理&#xff0c;管理全局的变量&#xff0c;也可以存储页面A的值&#xff0c;然后在页面B中直接访问&#xff0c;不分父子组件之间的关系&#xff0c;可以任意传值&#xf…

设计模式之状态模式

State design pattern 状态模式的概念、状态模式的结构、状态模式的优缺点、状态模式的使用场景、状态模式的实现示例、状态模式的源码分析 1、状态模式的概念 对有状态的对象&#xff0c;把复杂的判断逻辑提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变…

使用预授权签名加速 BSV 有状态合约更新

状态更新竞争 BSV 智能合约将状态存储在交易链的输出中。 当交易花费包含旧状态的输出并创建包含新状态的输出时&#xff0c;就会发生状态转换。 在任何给定时间&#xff0c;交易链末端的单个输出/UTXO 都具有最新状态。 当多个事务竞争同时更新共享状态时&#xff0c;就会出…

Anchor2

Anchor也是第二季了~~ 来一起来学习Faster R-CNN中的RPN及Anchor 说到RPN和Anchor&#xff0c;应该立马就能想到Faster R-CNN网络框架 首先我先将几类经典的目标检测网络做一个对比&#xff0c;然后开始说说今天要讲的知识。 最开始出现的是R-CNN&#xff0c;如下图&#xff…

什么是编程?程序员主要做啥工作?如何学习呢?

对编程的理解 编程换成通俗的语言可以理解为使用一些英文单词组成的指令发送给计算机&#xff0c;做指定的事情。 编程的种类 如今在互联网市场中&#xff0c;编程的工作一共分为了3大类&#xff1a; 前端编程 后台编程 运维编程 前端编程&#xff1a; 什么是前端&#…

门诊地图导航怎么做,零成本的医院室内导航解决方案

现在很多医院都比较大&#xff0c;科室众多&#xff0c;往往让人不知道要找的科室在哪里&#xff0c;不了解看病的流程&#xff0c;只能去咨询台询问&#xff0c;费时又费力……电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;可高效为病患提供导医服务&#xff0c;并为…

XML介绍和基本用法(一文彻底搞懂XML!)

文章目录1.XML1.1概述1.2标签的规则1.3语法规则1.4xml解析1.5DTD约束1.6schema约束1.XML 1.1概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李…

智能图像水位识别监测 基于OpenCv

智能图像水位识别监测利用OpenCVyolo网络学习模型对河道江河湖泊等区域进行实时监测&#xff0c;当监测到水位刻度尺超标时立即抓拍。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉处理开源软件库&#xff0c;支持与计算机视觉和机器…

【Linux】编辑器的天花板vim

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;前言&…

14.SpringAop

1. Aop简介 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构 OOP(Object Oriented Programming)面向对象编程 作用&#xff1a;在不惊动原始设计的基础上为其进行功能增强。简单的说就是在不改变方法源代码的基…

C语言必背18个经典程序

1、/*输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。*/ #include "stdio.h" main() {int i,j,result;for(i1;i<10;i){for(j1;j<10;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}printf("…