チュートリアル: 自然言語処理 (NLP)
このガイドは具体的なタスクに焦点を当てています: 機械学習で訓練されたモデルをElasticsearchにロードし、ドキュメントを強化するための設定を行うことです。
Elasticsearchは、機械学習モデルを使用するためのさまざまな方法をサポートしています。このガイドでは、KibanaのContent UI内で構成されたインジェストパイプラインを使用して、インジェスト時にドキュメントを強化するために訓練されたモデルを使用します。
このガイドでは、以下の手順を使用して上記を達成します:
- クラウドデプロイメントの設定: Elastic Cloudを使用してデプロイメントをホストします。これにより、機械学習ノードを簡単にスケールできます。
- Elandを使用してモデルをロード: Eland Elasticsearchクライアントを使用して、選択したモデルをElasticsearchにインポートします。モデルがロードされたことを確認したら、インジェストパイプラインで使用できるようになります。
- ML推論パイプラインの設定: 事前定義されたマッピングを持つElasticsearchインデックスを作成し、推論パイプラインを追加します。
- 強化された結果の表示: インデックスにデータをインジェストし、パイプラインがドキュメントを強化する様子を観察します。
テキスト分類モデルをロードし、いくつかの写真コメントデータを強化するための設定を行う手順に従ってください。手順に慣れたら、このガイドを他の機械学習訓練モデルで作業するための青写真として使用してください。
目次:
Elastic Cloudデプロイメントの作成
デプロイメントには、訓練されたモデルをアップロードしてデプロイするための機械学習インスタンスが必要です。
チームにすでにElastic Cloudデプロイメントがある場合は、少なくとも1つの機械学習インスタンスがあることを確認してください。ない場合は、編集して容量を追加します。このチュートリアルでは、単一の機械学習インスタンスに少なくとも2GBのRAMが必要です。
チームにElastic Cloudデプロイメントがない場合は、無料のElastic Cloudトライアルにサインアップすることから始めてください。アカウントを作成すると、アクティブなサブスクリプションが得られ、最初のデプロイメントを作成するように促されます。
手順に従って新しいデプロイメントを作成します。デプロイメントを作成する前に、高度な設定の下の機械学習インスタンスに容量を追加することを確認してください。スケーリングを簡素化するために、このデプロイメントを自動スケール機能をオンにします。自動スケーリングを使用する場合は、機械学習インスタンスの最小RAMを増やす必要があります。このチュートリアルでは、少なくとも2GBのRAMが必要です。詳細については、Elastic Cloudドキュメントのデプロイメントの作成を参照してください。
機械学習を使用してドキュメントを強化する機能は、Enterprise Search 8.5.0で導入されたため、8.5.0以降のバージョンを使用してください。
Elandのクローン
ElasticのElandツールを使用すると、Dockerを介してデプロイメントに訓練されたモデルを簡単にアップロードできます。
Elandは、データを探索および操作するための特化したElasticsearchクライアントであり、訓練されたモデルをElasticsearchにアップロードするために使用できます。
Dockerを使用してElandをクローンしてビルドするには、次のコマンドを実行します:
git clone git@github.com:elastic/eland.git
cd eland
docker build -t elastic/eland .
訓練されたモデルのデプロイ
デプロイメントとモデルをアップロードする方法が整ったので、データに適した訓練されたモデルを選択する必要があります。Hugging Faceには、公開されている訓練されたモデルの大規模なリポジトリがあります。選択するモデルは、データとそれを使用して何をしたいかによって異なります。
このガイドの目的のために、写真コメントのデータセットがあるとしましょう。プラットフォーム上でポジティブな雰囲気を促進するために、各写真の最初のいくつかのコメントがポジティブなコメントであることを望んでいます。このタスクには、distilbert-base-uncased-finetuned-sst-2-english
モデルが適しています。
このモデルをデプロイメントにアップロードするには、いくつかのデータが必要です:
- デプロイメントのURL。これは、デプロイメント管理画面のElasticsearchの横にあるエンドポイントをコピーリンクから取得できます。
https://ml-test.es.us-west1.gcp.cloud.es.io:443
のようになります。ポートが存在しない場合は、ElandがURLにスキーム、ホスト、およびポートを必要とするため、ポートを追加してください。HTTPSのデフォルトポートは443です。 - デプロイメントのユーザー名とパスワード。これは、デプロイメントが作成されたときに一度だけ表示されます。
elastic
とxUjaFNTyycG34tQx5Iq9JIIA
のようになります。 - 訓練されたモデルID。これはHugging Faceから取得します。
distilbert-base-uncased-finetuned-sst-2-english
のようになります。 - 訓練されたモデルのタスクタイプ。これは、モデルが達成するように設計された機械学習タスクの種類です。
fill_mask
、ner
、text_classification
、text_embedding
、zero_shot_classification
のいずれかになります。私たちのユースケースでは、text_classification
を使用します。
これらのオプションをElandに提供することで、選択したモデルをElasticsearchにアップロードできます。
docker run -it --rm --network host \
elastic/eland \
eland_import_hub_model \
--url https://ml-test.es.us-west1.gcp.cloud.es.io:443 \
-u elastic -p <PASSWORD> \
--hub-model-id distilbert-base-uncased-finetuned-sst-2-english \
--task-type text_classification \
--start
このスクリプトは、実行に約2〜3分かかるはずです。モデルがElasticデプロイメントに正常にデプロイされたら、Kibanaの訓練されたモデルページに移動して、準備が整っていることを確認します。このページは、**機械学習
分析メニューの下にあり、次に訓練されたモデル
モデル管理にあります。リストにモデルが表示されない場合は、ジョブと訓練されたモデルを同期**をクリックする必要があるかもしれません。モデルは使用する準備が整いました。
インデックスの作成とML推論パイプラインの定義
KibanaのContent UIを使用して、推論データでドキュメントを強化する準備が整いました。写真コメントをElasticsearchにインジェストする前に、まずML推論パイプラインを作成します。このパイプラインは、受信する写真コメントを推論データで強化し、コメントがポジティブかどうかを示します。
写真コメントがElasticsearchにドキュメントとしてアップロードされると、次のようになります:
Js
{
"photo_id": "78sdv71-8vdkjaj-knew629-vc8459p",
"body": "your dog is so cute!",
...
}
ドキュメントを、アップロードした訓練モデルを使用してコメントがポジティブかどうかを判断する推論プロセッサを通過させたいと考えています。これを行うには、まずElasticsearchインデックスを設定する必要があります。
- Kibanaのホームページから、検索カードをクリックします。
- Elasticsearchインデックスを作成ボタンをクリックします。
- APIを使用を選択し、インデックスに名前を付けます。自動的に
search-
でプレフィックスが付けられます。このデモでは、インデックスにsearch-photo-comments
という名前を付けます。 - インデックスを作成をクリックすると、新しいインデックスの概要ページにリダイレクトされます。
ML推論パイプラインを構成するには、インデックスに既存のフィールドマッピングが必要です。これにより、分析するフィールドを選択できます。これは、Kibana Dev Toolsのindex mapping APIを介して、またはcURLコマンドを使用して簡単に行えます:
Js
PUT search-photo-comments/_mapping
{
"properties": {
"photo_id": { "type": "keyword" },
"body": { "type": "text" }
}
}
今、推論パイプラインを作成する時が来ました。
- 1. 検索の
search-photo-comments
インデックスの概要ページから、パイプラインタブをクリックします。デフォルトでは、Elasticsearchはインデックス固有のインジェストパイプラインを作成しません。 - 2. これらのパイプラインをカスタマイズしたいので、
ent-search-generic-ingestion
インジェストパイプラインをコピーしてカスタマイズする必要があります。このオプションは、ent-search-generic-ingestion
インジェストパイプラインの設定の上にあります。これにより、2つの新しいインデックス固有のインジェストパイプラインが作成されます。
次に、推論パイプラインを追加します。
- 1. 機械学習推論パイプラインセクションを見つけ、推論パイプラインを追加を選択します。
- 2. 推論パイプラインに名前を付け、アップロードした訓練モデルを選択し、分析する
body
フィールドを選択します。 - 3. オプションで、出力を保存するフィールド名を選択します。
positivity_result
と呼びます。
シミュレーターを通じてサンプルドキュメントを実行し、作成する前にパイプラインを確認することもできます。
ドキュメントのインデックス化
この時点で、インデックス時にドキュメントを強化する準備が整いました。
Kibana Dev Consoleから、または単にcURLコマンドを使用して、ドキュメントをインデックス化できます。_run_ml_inference
フラグを使用して、search-photo-comments
パイプラインに、作成したインデックス固有のML推論パイプラインを実行するように指示します。このフィールドは、ドキュメント内でインデックス化されません。
Js
POST search-photo-comments/_doc/my-new-doc?pipeline=search-photo-comments
{
"photo_id": "78sdv71-8vdkjaj-knew629-vc8459p",
"body": "your dog is so cute!",
"_run_ml_inference": true
}
ドキュメントがインデックス化されたら、APIを使用してそれを取得し、強化されたデータを表示します。
Js
GET search-photo-comments/_doc/my-new-doc
Js
{
"_index": "search-photo-comments",
"_id": "_MQggoQBKYghsSwHbDvG",
...
"_source": {
...
"photo_id": "78sdv71-8vdkjaj-knew629-vc8459p",
"body": "your dog is so cute!",
"ml": {
"inference": {
"positivity_result": {
"predicted_value": "POSITIVE",
"prediction_probability": 0.9998022925461774,
"model_id": "distilbert-base-uncased-finetuned-sst-2-english"
}
}
}
}
}
ドキュメントには、強化されたデータを持つ新しいフィールドがあります。ml.inference.positivity_result
フィールドは、機械学習モデルからの分析を含むオブジェクトです。使用したモデルは、分析されたテキストがポジティブであると99.98%の信頼度で予測しました。
ここから、ml.inference.positivity_result.predicted_value
でブーストするための検索クエリを書くことができます。このフィールドは、モデルが十分に自信を持っている場合、トップレベルのpositivity_result
フィールドにも保存されます。
要約
このガイドでは、次のことをカバーしました:
- Elastic Cloudで機械学習インスタンスを持つデプロイメントを設定する。
- Eland Elasticsearchクライアントを使用して機械学習訓練モデルをデプロイする。
- Elasticsearchで訓練モデルを使用するための推論パイプラインを構成する。
- インジェスト時に訓練モデルからの推論結果でドキュメントを強化する。
- 検索エンジンをクエリし、
positivity_result
でソートする。