Elasticsearch - SQL客户端-DataGrip;自然语言处理 NLP (十四)

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch - SQL客户端-DataGrip;自然语言处理 NLP (十四)相关的知识,希望对你有一定的参考价值。

阅读前参考

https://blog.csdn.net/MinggeQingchun/article/details/126856939

一、SQL客户端-DataGrip

官网地址:

DataGrip:由 JetBrains 开发的数据库和 SQL 跨平台 IDE

下载地址:

下载 DataGrip:适用于数据库和 SQL 的跨平台 IDE

1、下载对应版本Elasticsearch驱动到本地maven仓库

<dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>x-pack-sql-jdbc</artifactId>
            <version>7.16.0</version>
        </dependency>

博主本地Maven仓库路径如下

2、新建驱动

3、选择本地maven仓库下载的 ES 驱动

4、新建数据源 

配置连接参数

(1)用户名和账号采用 ES 自带的 elastic 即可

URL 地址 :jdbc:es://http://localhost:9200

(2)如果使用HTTPS请求需配置SSL证书;博主使用Windows下ES,因此没配置证书

5、 创建查询操作窗口 Query Console

此时可能会报错

current license is non-compliant for [jdbc]

6、更改 license 类型

默认情况下,JDBC 客户端必须为白金级别才可以使用

# 查看license 类型
GET _license

 这里可以将当前的 ES 软件的 License 暂时设置为试用版。测试完成后,改回 basic 版即可

# 更改 License 类型 - trial
POST _license/start_trial?acknowledge=true

# 更改 License 类型 - basic
POST _license/start_basic?acknowledge=true

此时再在Query Console 窗口执行 show tables

二、自然语言处理 NLP 

(一)自然语言处理 NLP 

自然语言处理(NLP,Natural Language Processing) 是研究计算机交互语言问题的一门学科

处理自然语言的关键是要让计算机“理解”自然语言,所以自然语言处理又叫做自然语言理解(NLU,NaturalLanguage Understanding),也称为计算语言学(Computational Linguistics)。一方面它是语言信息处理的一个分支,另一方面它是人工智能(AI, Artificial Intelligence)的核心课题之一

简而言之,NLP 是指我们可以使用软件来操作和理解口语或书面文本或自然语言的方式。

2018年,Google 开源了一种用于 NLP 预训练的新技术,称为来自 Transformers 的双向编码器呈现,或 BERT。 BERT 通过在没有任何人工参与的情况下对互联网大小的数据集(如, 维基百科和数字书籍)进行训练来利用 “transfer learning”。 Transfer learning 允许对 BERT 模型进行预训练以进行通用语言理解。一旦模型只经过一次预训练,它就可以被重用并针对更具体的任务进行微调,以了解语言的使用方式。

为了支持类 BERT 模型(使用与 BERT 相同的标记器的模型),Elasticsearch 将首先通过 PyTorch 模型支持支持大多数最常见的 NLP 任务。 PyTorch 是最受欢迎的现代机器学习库之一,拥有大量活跃用户,它是一个支持深度神经网络的库,如 BERT 使用的Transformer 架构

随着 Elasticsearch 8.0 的发布,Elastic 很高兴能够将 PyTorch 机器学习模型上传到 Elasticsearch 中, 以在 Elastic Stack 中提供现代自然语言处理 (NLP)。现在,Elasticsearch 用户能够集成用于构建 NLP 模型的最流行的格式之一,并将这些模型作为 NLP 数据管道的一部分通过我们的Inference processor 整合到 Elasticsearch 中

NLP 任务:

(1)情绪分析:用于识别正面与负面陈述的二元分类

(2)命名实体识别 (NER):从非结构化文本构建结构,尝试提取名称、位置或组织等细节

(3)文本分类:零样本分类允许你根据你选择的类对文本进行分类,而无需进行预训练

(4)文本嵌入:用于 k 近邻 (kNN) 搜索

(二)NLP 在 Elasticsearch 7.x 和 8.x 中的区别

Elasticsearch 一直是进行 NLP 的好地方,但从历史上看,它需要在 Elasticsearch 之外进行一些处理,或者编写一些非常复杂的插件。

Elastic 8.0,用户现在可以在 Elasticsearch 中更直接地执行命名实体识别、情感分析、文本分类等操作——无需额外的组件或编码。 不仅在 Elasticsearch 中本地计算和创建向量在水平可扩展性方面是“胜利”(通过在服务器集群中分布计算)——这一变化还为 Elasticsearch 用户节省了大量时间和精力

Elastic 8.0,用户可以直接在 Elasticsearch 中使用 PyTorch 机器学习模型(例如 BERT), 并在 Elasticsearch 中使用这些模型进行推理。通过使用户能够直接在 Elasticsearch 中执行推 理,将现代 NLP 的强大功能集成到搜索应用程序和体验、本质上更高效(得益于 Elasticsearch的分布式计算能力)和 NLP 本身比以往任何时候都更容易 变得更快,因为你不需要将数据移出到单独的进程或系统中

(三)NLP示例

Apache OpenNLP是一个开源Java库,它使用过程自然语言文本。OpenNLP是一个基于Java机器学习工具包,用于处理自然语言文本。OpenNLP提供了令牌化,句子分割,词性标注,命名实体提取,分块,解析和协同参考分辨率等服务。

OpenNLP支持大多数常用的NLP任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。 OpenNLP:驾驭文本,分词那些事 OpenNLP效率和使用便捷度较好。另外其针对Java开发提供开源的API

使用opennlp演示

https://github.com/spinscale/elasticsearch-ingest-opennlp/releases

注:下载和 Elasticsearch相同版本

1、安装opennlp

将下载下来的插件上传到所有 ES 服务器节点的 plugins 路径中

2、 修改 plugin-descriptor 文件,修改版本号 和 ES版本保持一致

3、下载 NER 模型

bin/ingest-opennlp/download-models

会在 ES目录下的 config/ingest-opennlp-7.16.0.1 目录下看到如下文件

4、配置OpenNLP

修改配置文件:config/elasticsearch.yml

ingest.opennlp.model.file.persons: en-ner-persons.bin
ingest.opennlp.model.file.dates: en-ner-dates.bin
ingest.opennlp.model.file.locations: en-ner-locations.bin

重新启动 Elasticsearch

5、测试

#创建一个支持 NLP 的 pipeline
PUT _ingest/pipeline/opennlp-pipeline

 "description": "A pipeline to do named entity extraction",
 "processors": [
 
 "opennlp" : 
 "field" : "message"
 
 
 ] 

#增加数据
PUT my-nlp-index

PUT my-nlp-index/_doc/1?pipeline=opennlp-pipeline

 "message": "Shay Banon announced the release of Elasticsearch 6.0 in November 
2017"


PUT my-nlp-index/_doc/2?pipeline=opennlp-pipeline

 "message" : "Kobe Bryant was one of the best basketball players of all times. 
Not even Michael Jordan has ever scored 81 points in one game. Munich is really 
an awesome city, but New York is as well. Yesterday has been the hottest day of 
the year."


#查看数据
GET my-nlp-index/_doc/1
GET my-nlp-index/_doc/2

以上是关于Elasticsearch - SQL客户端-DataGrip;自然语言处理 NLP (十四)的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:通过 JDBC 使用 SQL 来查询索引 - DBeaver

《ElasticSearch6.x实战教程》之简单搜索Java客户端(上)

Elasticsearch SQL查询 --- 2022-04-03

安装支持elasticsearch使用sql查询插件

Elasticsearch学习之集群常见状况处理(干货)

Elasticsearch 监控索引数据变化方案