IBM Cloud Docs
ELSER (Elastic の自然言語処理モデル) を使用

ELSER (Elastic の自然言語処理モデル) を使用

Elastic Learned Sparse EncodeR(ELSER) は、Elastic によってトレーニングされた自然言語処理 (NLP) モデルであり、スパース・ベクトル表現を使用してセマンティック検索を実行できるようにします。 セマンティック検索では、検索語に対するリテラル・マッチングの代わりに、検索照会のインテントとコンテキストの意味に基づいて結果が取得されます。

このチュートリアルでは、 Databases for Elasticsearch プラチナのインスタンスをプロビジョンし、ELSER モデルをテキストの本文に適用して、検索結果の品質を向上させる方法を確認します。

これは、 機械学習に関する Elasticsearch の機能を探索する 3 つのチュートリアルのうちの 2 番目のチュートリアルです。 Machine Learning は、人工知能 (AI) とコンピューター・サイエンスの 1 部門であり、人間が学習する方法を模倣するためのデータとアルゴリズムの使用に重点を置き、その正確度を徐々に向上させています。 統計手法を使用することで、分類や予測を行い、データ・マイニング・プロジェクトの重要な洞察を明らかにするためにアルゴリズムがトレーニングされます。

この Elasticsearch 機械学習シリーズの他のチュートリアルを参照してください。

Databases for Elasticsearch は有料サービスであるため、このチュートリアルに従うと料金が発生します。

始める前に

プロビジョニング・プロセスを開始するには、いくつかの必須ツールをインストールします。

アカウントにインフラストラクチャーをデプロイするための API キーを取得する

Terraform がインフラストラクチャーをアカウントにプロビジョンできるようにする IBM Cloud API キー を作成します。 最大 20 個の API キーを作成できます。

安全上の理由により、API キーをコピーまたはダウンロードできるのは作成時のみになります。 API キーを紛失した場合は、新しい API キーを作成する必要があります。

プロジェクトの複製

GitHub リポジトリーからプロジェクトを複製します。

git clone https://github.com/IBM/elasticsearch-ml-elser-tutorial.git

Elasticsearch クラスタをインストールする

  1. 複製されたプロジェクトの Terraform フォルダーにナビゲートします。

    cd elasticsearch-ml-elser-tutorial/terraform
    
  2. ご使用のマシンで、以下のフィールドを使用して、 terraform.tfvars という名前の文書を作成します。

     ibmcloud_api_key = "<your_api_key_from_step_1>"
     region = "<your_region>"
     elastic_password = "<make-up-a-password>"
    

    terraform.tfvars ドキュメントには秘密にしておきたい変数が含まれているため、Githubの公開リポジトリからは除外されている。

  3. 以下のコマンドでインフラをインストールする:

    terraform init
    terraform apply --auto-approve
    

最後に、データベースへのアクセス URLをターミナル環境にエクスポートします

 terraform output --json
 export ES="<the url value obtained from the output>"
 cd ..

ELSER モデルのインストール

ELSER モデルを使用するには、その前に ELSER モデルをインストールして開始する必要があります。 以下のようなコマンドを使用してインストールします。

curl -kX PUT "$ES/_ml/trained_models/.elser_model_1?pretty" -H 'Content-Type: application/json' -d'
{
  "input": {
	"field_names": ["text_field"]
  }
}
'

次に、次のように入力して開始します。

curl -kX POST "$ES/_ml/trained_models/.elser_model_1/deployment/_start?deployment_id=for_search&pretty"

開始コマンドを実行する前に、モデルのインストールが完了するまで数分待つ必要がある場合があります。

データの索引およびマッピングの作成

プロジェクト・フォルダーのルートに移動する必要があります。 端末で、次のようなコマンドを使用します。

curl -kXPUT -H"Content-Type: application/json" -d@mapping.json $ES/test_data

これにより、ES インスタンスに test_data という名前の索引が作成されます。 また、いくつかの明示的な マッピング も作成します。 これは、文書、および文書に含まれるフィールドがどのように保管され、索引付けされるかを定義する Elastic の方法です。 マッピング定義は、 mapping.json ファイルに保管されます。 これは、アップロードするデータを分析するときに機械学習アルゴリズムで作成されるすべての追加データ (トークン) を保管するために使用される ml.tokens というフィールドを定義します。 そのデータは、マッピング文書でも明示的に定義されている text というフィールドに含まれます。

データを分析するための INGEST パイプラインを作成します。

ELSER モデルは、 Databases for Elasticsearchのすべてのプラチナ・デプロイメントにプリインストールされています。 必要なのは、それを使用して着信データを分析する パイプライン を作成することだけです。

curl -kX PUT -H"Content-Type: application/json" -d@pipeline.json $ES/_ingest/pipeline/elser-v1-test

pipeline.json 文書にはパイプライン定義があります。 これは、文書がアップロードされたときに文書に対してどのような処理が行われるかを記述します。 この場合、ELSER モデルの使用を定義し、結果のデータを索引の ml.tokens フィールドに入れるように ES に指示します。

これは非常に単純なパイプラインです。 例えば、INGEST エラーを処理するのではなく、単にエラーを破棄します。 しかし、このデモの目的には十分です。

データのアップロード

import.json 文書には、 MS MARCO パッセージ・ランキング・データ・セットのサブセットである msmarco-passagetest2019-top1000 データ・セットからのデータが含まれています。 これは 200 個の照会で構成され、それぞれに関連するテキスト・パッセージのリストが付随しています。 すべての固有パッセージとその ID がそのデータ・セットから抽出され、 Elasticsearchへの 一括アップロード の準備が整いました。

このステップでは、データを Elasticsearch にアップロードし、アップロード時に ELSER アナライザーを介して渡します。

自然言語処理分析の実行は計算主体であるため、このプロセスには数時間 (最大 12 時間) かかります。 パイプライン・バッファーがオーバーランしないようにするために、一括アップロードを 100 エントリー単位で実行します。

そのため、まず、 import.json 文書を 100 項目ずつの小さい文書に分割します (各項目は文書内で 2 行になります)。

split -l 200 -a 4  import.json

これにより、数百の小さな文書が作成されます。 upload.sh スクリプトを実行して、これらをインポートします。

./upload.sh

アップロードされた文書ごとに、ELSER モデルはテキストの内容を推測しようとし、関連性があると判断した単語のグループと関連性スコアを生成します。 以下に、取り込まれた文書の 1 つの例を示します。

{
  "_index": "test_data",
  "_id": "1",
  "_version": 3,
  "_seq_no": 1310,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "text": "This is the definition of RNA along with examples of types of RNA molecules. This is the definition of RNA along with examples of types of RNA molecules. RNA Definition",
    "ml": {
      "tokens": {
        "molecules": 0.9468944,
        "cell": 0.31727117,
        "type": 0.1881346,
        "lab": 0.14050934,
        "example": 0.27423903,
        "strand": 0.11950072,
        "dna": 0.82435495,
        "protein": 0.25066674,
        "term": 0.5622088,
        "definition": 0.21340553,
        "nuclear": 0.03731725,
        "different": 0.026590228,
        "element": 0.42168307,
        "genetic": 0.36145726,
        "types": 0.7244048,
        "characteristics": 0.24549837,
        "adam": 0.15298073,
        "rna": 1.949169,
        "organism": 0.27345642,
        "gene": 0.57350045,
        "substance": 0.006454099,
        "mrna": 1.002312,
        "bond": 0.096653655,
        "structure": 0.1670035,
        "genome": 0.24130683,
        "sequence": 0.21949387,
        "q": 0.028950738,
        "unit": 0.1926791,
        "examples": 1.0590855,
        "material": 0.034060754,
        "chemical": 0.454947,
        "science": 0.20523745,
        "biological": 0.47201967,
        "molecule": 0.92732555,
        "atom": 0.021480415,
        "word": 0.2971402
      },
      "model_id": ".elser_model_1"
    }
  }
}

これにより、テキスト上の実際の単語以外の関係が作成されていることが分かります。 例えば、このスニペットが sciencegenes 、および dna に関するものであることが推論されました。

座ってリラックスしなさい。 インポートには少し時間がかかります。

データ・セットの検索と結果の比較

データ・セットがアップロードされると、データ・セットをテストする準備が整います。特に、ELSER NLP プロセッサーが検索結果の品質に対して行うことができる違いについてテストする準備が整います。 以下の検索照会では、生成されたトークンを使用して、最も関連性が高いと思われる結果が返されます。

curl -k -H"Content-Type: application/json" -d@elserquery.json $ES/test_data/_search | jq .

これを、トークンを使用せず、単に元のテキストを検索する照会と比較します。

curl -k -H"Content-Type: application/json" -d@query.json $ES/test_data/_search | jq .

query.json ファイルおよび elserquery.json ファイル内のテキストを変更することにより、他の照会を試すことができます。 以下のようなことを試してみてください。

what is the best exercise for stiff limbs?

または

explain how the US president is elected

これらすべてのケースで、ELSER 拡張の結果はより関連性が高くなります。

もちろん、すべての検索に適用されるわけではありません。 例えば、 taylor swift を検索すると、両方で同様の結果が生成されます。 そのため、すべては検索のタイプと索引内のデータに依存します。 しかし、ELSER ML モデルを適用することで、多くの検索が大幅に改善される可能性があります。

インフラストラクチャーのティアダウン

Databases for Elasticsearch には料金がかかります。 このチュートリアルを完了したら、プロジェクトの terraform ディレクトリーに移動し、次のコマンドを使用して、すべてのインフラストラクチャーを削除できます。

terraform destroy

さらに準備はできていますか?

ELSER は、ただ 1 つの ML モデルです。 他にも多くのものがあり、 Databases for Elasticsearch Platinum Plan を使用すると、他のものを簡単にデプロイし、代わりにそれらを使用してデータを分析することができます。 チュートリアルをまとめました。 このチュートリアルでは、以下のことを行う方法を説明します。