将机器学习模型与 Elasticsearch 配合使用以标记内容
目标
Databases for Elasticsearch 支持机器学习工作负载。 在本教程中,您将学习如何向 Databases for Elasticsearch 实例供应机器学习模型,然后使用该模型从测试数据集抽取有意义的其他信息。 只有终端命令的一些基本知识才需要供应和了解本教程。
机器学习 是人工智能 (AI) 和计算机科学的一个分支,专注于使用数据和算法来模仿人类学习的方式,逐渐提高其准确性。 通过使用统计方法,训练算法以进行分类或预测,并发现数据挖掘项目中的关键洞察。
这些学习算法被称为“模型”。 在本教程中,我们使用预先构建的自然语言处理 (NLP) 模型,该模型提取书面 (Natural) 语言中句子的含义。 具体而言,我们使用 distilbert-base-uncased-finetuned-conll03-english 模型来尝试识别文本中的人员,位置和组织的名称。
许多其他模型 专门分析其他形式的数据,例如从图像中抽取文本,语音转换为文本或图像中的对象标识。 有关 Elastic 堆栈支持的模型的完整列表,请参阅 兼容第三方 NLP 模型。 模型可以在特定于领域的知识上进行训练,但新模型的训练超出了本教程的范围。
本教程将指导您完成以下操作:
-
供应 Databases for Elasticsearch 实例
-
上传机器学习模型
-
从新闻文章上传标题和摘要的数据集
-
通过 NLP 模型传递数据集
-
查询扩充数据以查看数据上的模型结果。
请参阅此 Elasticsearch 机器学习系列中的其他教程:
提高生产力
要开始供应过程,请安装一些必备的生产力工具:
- 您需要具有 IBM Cloud 帐户。
- Terraform-用于编码和供应基础结构。
- Python
- jq-用于处理配置文件。
获取 API 密钥以向您的帐户供应基础架构
执行 这些步骤 以创建 IBM Cloud API 密钥,该密钥使 Terraform 能够在您的帐户中供应基础结构。 您最多可以创建 20 个 API 密钥。
出于安全原因,API 密钥仅在创建时才可复制或下载。 如果 API 密钥丢失,必须创建新的 API 密钥。
克隆项目
从 GitHub 存储库克隆项目。
git clone https://github.com/IBM/elasticsearch-nlp-ml-tutorial.git
cd elasticsearch-nlp-ml-tutorial/terraform
安装基础结构
供应 Databases for Elasticsearch 实例。
-
在机器上,使用以下字段创建名为
terraform.tfvars
的文档:ibmcloud_api_key = "<your_api_key_from_step_1>" region = "<your_region>" es_password = "<make_up_a_password>"
terraform.tfvars
文档包含您可能要保密的变量,因此 GitHub 存储库会将其忽略。 -
使用以下命令安装基础设施:
terraform init terraform apply --auto-approve
Terraform 脚本输出运行应用程序所需的配置数据,因此将其复制到
scripts
文件夹中:terraform output -json >../scripts/config.json cd ../scripts
安装 Eland
Eland 是 Python Elasticsearch 客户机,用于浏览和分析 Elasticsearch中的数据。 使用类似如下的命令进行安装:
python3 -m pip install 'eland[pytorch]'
上载和分析数据
本教程使用从 BBC News 和 Guardian Web 站点通过其 RSS 订阅源获取的 132 篇文章的小数据集。
这些文件已变换为 JSON 文件,根据 Elasticsearch 批量上载方法的要求进行格式化。
运行 upload.sh
脚本,这将执行以下操作:
-
将 NLP 模型上载到 Elasticsearch。
-
在 Elasticsearch 中创建数据处理管道,以获取任何传入数据并对其进行分析以获取有意义的术语。
-
将预先格式化的数据上载到 Elasticsearch,并将其传递到管道以进行分析。
由于这是一个演示,因此我们将以非安全方式连接到您的数据库。 对于生产,请使用 安全连接。
要运行该脚本,请确保您位于 scripts
目录中,并使用以下命令:
ES_PASSWORD=`cat config.json | jq -r .es_password.value`
ES_PORT=`cat config.json | jq -r .es_port.value`
ES_HOST=`cat config.json | jq -r .es_host.value`
export ES="https://admin:${ES_PASSWORD}@${ES_HOST}:${ES_PORT}"
./upload.sh
查询数据
现在,您有一个名为 test
的索引,它有 132 条记录。 其中每条记录都包含新闻数据 (文章标识,标题和摘要) 以及一个名为 tags
的附加对象。 这是机器学习模型插入其在文本中找到的任何人员 (PER),位置 (LOC) 或组织 (ORG) 的位置。
该索引还包含另一个名为 ml
的对象,该对象显示模型的某些工作方式。 例如,它会告诉您将哪个准确性概率分配给它找到的每个术语。
例如,使用此查询来检索要检查的单个记录:
curl -k "$ES/test/_search?size=1" | jq .
此机器学习模型生成了有价值的信息。 例如,如果运行新闻 Web 站点,那么可能会生成基于标记的内容的页面。 例如,如果您的用户转至类似 www.mynewssite.com/tag/rishi-sunak的页面,那么您的系统必须执行的操作是在新闻文章索引中按该标记进行搜索,以检索提及 Rishi Sunak 的那些用户的列表:
curl -kX POST -d@body.json -H "Content-Type: application/json" "$ES/test/_search" | jq .
scripts
目录中有一个 body.json
文件,您可以使用该文件来执行不同的搜索。
结论
本教程说明如何使用 Databases for Elasticsearch 来利用机器学习的功能,从数据中生成有价值的其他信息。 我们希望您可以将其作为跳板,探索从数据中扩充和创造价值的其他方法。
要停止产生费用,请不要忘记除去所有已部署的基础架构。 在 terraform 目录中,使用以下命令:
terraform destroy