Elasticsearch で機械学習モデルを使用してコンテンツにタグを付ける
目標
Databases for Elasticsearch は、機械学習ワークロードをサポートします。 このチュートリアルでは、機械学習モデルを Databases for Elasticsearch インスタンスにプロビジョンし、それを使用してテスト・データ・セットから意味のある追加情報を抽出する方法について学習します。 このチュートリアルをプロビジョンして理解するには、端末コマンドの基本的な知識のみが必要です。
機械学習 は、人工知能 (AI) とコンピューター・サイエンスの分野であり、データとアルゴリズムを使用して人間の学習方法を模倣し、精度を徐々に向上させることに重点を置いています。 統計的手法を使用することで、アルゴリズムは、分類または予測を行い、データ・マイニング・プロジェクトにおける重要な洞察を明らかにするようにトレーニングされます。
これらの学習アルゴリズムは「モデル」として知られています。 このチュートリアルでは、作成済みの自然言語処理 (NLP) モデルを使用します。このモデルは、記述された (自然) 言語の文から意味を抽出します。 具体的には、テキスト内の人、場所、および組織の名前を識別しようとする distilbert-base-uncased-finetuned-conll03-english モデルを使用します。
他の多くのモデル は、イメージからのテキスト抽出、テキストへの音声変換、イメージ内のオブジェクト識別など、他の形式のデータの分析に特化しています。 Elastic スタックでサポートされるモデルの完全なリストについては、 Compatible third party NLP modelsを参照してください。 モデルは分野固有の知識でトレーニングできますが、新しいモデルのトレーニングは、このチュートリアルの対象範囲を超えています。
このチュートリアルでは、以下のプロセスを順を追って説明します
-
Databases for Elasticsearch インスタンスのプロビジョニング
-
機械学習モデルのアップロード
-
ニュース記事からの見出しと要約のデータ・セットのアップロード
-
NLP モデルを介したデータ・セットの引き渡し
-
拡張されたデータを照会して、データのモデルの結果を確認します。
この Elasticsearch 機械学習シリーズの他のチュートリアルを参照してください。
生産性の向上
プロビジョニング・プロセスを開始するには、いくつかの必須生産性向上ツールをインストールします。
- IBM Cloud アカウントを持っている必要があります。
- Terraform-インフラストラクチャーをコード化してプロビジョンします。
- Python
- jq-構成ファイルを処理します。
アカウントにインフラストラクチャをプロビジョニングするためのAPIキーを取得する
以下の手順 に従って、Terraform がインフラストラクチャーをアカウントにプロビジョンできるようにする IBM Cloud API キーを作成します。 最大 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
ランドの設置
ランド は、 Elasticsearchでデータを探索および分析するための Python Elasticsearch クライアントです。 以下のようなコマンドを使用してインストールします。
python3 -m pip install 'eland[pytorch]'
データのアップロードと分析
このチュートリアルでは、RSS フィードを介して BBC News Web サイトおよび Guardian Web サイトから取得した 132 件の記事からなる小規模なデータ・セットを使用します。
これらは、 Elasticsearch 一括アップロード方式の要求に従ってフォーマットされた json ファイルに変換されました。
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
データの照会
これで、132 個のレコードを持つ test
という名前の索引が作成されました。 これらの各レコードには、ニュース・データ (記事 ID、見出し、要約) と tags
という追加オブジェクトが含まれています。 これは、機械学習モデルがテキスト内で検出した人物 (PER)、場所 (LOC)、または組織 (ORG) を挿入した場所です。
索引には、 ml
という別のオブジェクトも含まれています。これは、モデルがどのように機能するかを示しています。 例えば、検出された各用語にどの精度の確率が割り当てられているかを示します。
例えば、以下の照会を使用して、検査する単一レコードを取得します。
curl -k "$ES/test/_search?size=1" | jq .
この機械学習モデルは、貴重な情報を生成しました。 例えば、ニュース Web サイトを実行する場合、タグ・ベースのコンテンツのページを生成できます。 例えば、ユーザーが www.mynewssite.com/tag/rishi-sunakのようなページに移動した場合、ニュース記事の索引でそのタグを使用して検索するだけで、R司 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