Elasticsearch:使用 NLP 问答模型与你喜欢的圣诞歌曲交谈
创始人
2024-04-27 17:28:21
0

自然语言处理 (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  \ 
--hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \ 
--task-type ner 
  • 指定 URL 以访问你的集群。 例如,https://:@:
  • 在 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://:@: \
--hub-model-id  \
--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//deployment/_infer
{"docs": [{"text_field": ""}],"inference_config": {"question_answering": {"question": ""}}
}

此 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 结合使用! 随时欢迎反馈。

相关内容

热门资讯

安卓如何操控苹果系统,揭秘跨平... 你知道吗?在这个科技飞速发展的时代,安卓和苹果两大操作系统之间的较量可是从未停歇。虽然它们各自有着忠...
安卓系统账户同步数据,畅享无缝... 你有没有遇到过这种情况:手机里存了那么多宝贝照片、重要文件,结果换了个新手机,却发现那些宝贝全都不翼...
安卓系统不停推送广告,安卓系统... 你有没有发现,最近你的安卓手机是不是越来越“热情”了?没错,就是那个不停在你屏幕上跳来跳去的广告!今...
airpods可以和安卓系统,... 你有没有想过,那些炫酷的AirPods竟然也能和安卓手机完美搭配?没错,就是那个我们平时只听说和iP...
安卓系统实体键盘不对,创新与挑... 你是不是也遇到了这个问题?安卓手机的实体键盘突然不对劲了,按下去没反应,或者反应迟钝,简直让人抓狂!...
汽车导航改装安卓系统,安卓系统... 你有没有想过,你的汽车导航系统是不是已经out了?现在,让我来给你揭秘如何给你的爱车来一次科技大变身...
安卓系统如何限制下载,安卓系统... 你有没有发现,手机里的安卓系统越来越智能了?不过,这也意味着有时候我们不小心就会下载一些不想要的软件...
安卓系统调成日语,概要の副標題... 你有没有想过,你的安卓手机竟然可以变成一个日式小天地呢?没错,就是那种动漫里常见的日语界面,是不是听...
男生耳机推荐安卓系统,男生耳机... 耳机可是现代生活中不可或缺的小玩意儿,尤其是对于喜欢听音乐的男生来说,一副好耳机简直就是灵魂的伴侣。...
安卓同版本升级系统,功能优化与... 你知道吗?最近手机界可是热闹非凡呢!各大品牌纷纷推出了安卓同版本升级系统,让我们的手机焕然一新。今天...
安卓更换别的手机系统,轻松切换... 你有没有想过,你的安卓手机用久了,是不是有点审美疲劳了呢?或者,你最近是不是对其他手机系统产生了浓厚...
安卓系统单机神雕侠侣,指尖重温 你有没有想过,在手机上也能体验一把江湖恩怨、侠骨柔肠?没错,就是那个让人心驰神往的《神雕侠侣》!今天...
安卓系统键盘语言切换,安卓系统... 你有没有发现,手机上的安卓系统键盘语言切换功能,简直就像是个神奇的魔法棒,轻轻一点,就能让文字飞舞在...
oppok1安卓系统,性能与体... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是OPPO K1这款新机!这款手机不仅外观时尚,...
安卓系统环境的搭建,从零开始构... 想要在电脑上体验安卓系统的魅力,是不是已经跃跃欲试了呢?别急,今天就来手把手教你如何搭建一个属于自己...
【MySQL】锁 锁 文章目录锁全局锁表级锁表锁元数据锁(MDL)意向锁AUTO-INC锁...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
GCN的几种模型复现笔记 引言 本篇笔记紧接上文,主要是上一篇看写了快2w字,再去接入代码感觉有点...
数据分页展示逻辑 import java.util.Arrays;import java.util.List;impo...
Redis为什么选择单线程?R... 目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、R...