目次


Watson Retrieve and Rank から Watson Discovery への移行, 第 1 回

Watson Retrieve and Rank から Watson Discovery サービスに移行する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Watson Retrieve and Rank から Watson Discovery への移行, 第 1 回

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Watson Retrieve and Rank から Watson Discovery への移行, 第 1 回

このシリーズの続きに乞うご期待。

このチュートリアルでは、Watson Retrieve and Rank のサンプルを Watson Discovery に移行するプロセスとして、Watson Discovery サービス・インスタンス (Discovery) を作成し、サンプル Watson Retrieve and Rank のデータを使用してこのインスタンスをトレーニングするまでの手順を説明します。チュートリアルで使用するデータ・セットは、このリンク先の Retrieve and Rank の「Getting started tutorial」内で使用しているものと同じですが、独自のデータを使用するサービス・インスタンスを作成する場合も、ここで説明する手法を適用できます。今回のチュートリアルでは Retrieve and Rank API を使用するときに扱うデータを移行する手順を段階的に追っていきます。Retrieve and Rank ツールから Discovery にデータをエクスポートする方法については、次回のチュートリアルで取り上げます。

ユーザーが Retrieve and Rank から Discovery にデータを移行するプロセスを構成する主なステップには、次の 2 つがあります。

  1. コレクション・データを移行する
  2. トレーニング・データを移行する

コレクション・データを移行する際に極めて重要となるのは、ドキュメント ID が変更されないようにすることです。なぜなら、トレーニング・データはこれらのドキュメント ID を使用してグランドトゥルースを参照するからです。Retrieve and Rank から Discovery に移行する際にドキュメント ID が変更されたとしたら、再ランク付けが完全に無効になってしまいます (あるいは、トレーニングが開始されないことさえあります)。Discovery では API アップロード・プロセス内でドキュメント ID を指定できるようになっているため、このドキュメントのガイドラインに従うことで、ドキュメント ID の問題を回避できます。通常、Retrieve and Rank のトレーニング・データは CSV ファイルに格納されるので、このチュートリアルでもサンプル・トレーニング・データを Discovery にアップロードする際は CSV ファイルを使用します。チュートリアルでは、Retrieve and Rank が Retrieve and Rank の「Getting started tutorial」で説明されているのと同じようにセットアップされていることを前提に、ソースからの移行パスを使用します。Retrieve and Rank ツールからの移行を含め、その他のパスについては、別のチュートリアルが間もなく公開される予定です。

このチュートリアルに従うには、以下のものが必要です。

  • cURL。curl.haxx.se から、お使いのオペレーティング・システムに応じたバージョンの cURL をインストールできます。インストールするバージョンは、SSL (Secure Sockets Layer) プロトコルをサポートするものでなければなりません。インストールされたバイナリー・ファイルが PATH 環境変数に含まれていることを確認してください。
  • サンプル Cranfield データ。ここでは Retrieve and Rank の「Getting started tutorial」のサンプル・コレクション・データを使用します。
  • サンプル・データのグランドトゥルース。ここでは Retrieve and Rank の「Getting started tutorial」のサンプル Cranfield グランドトゥルースを使用します。
  • Python 2: Python がインストールされているかどうかを確認するには、コマンド・プロンプトで python --version と入力します。このコマンドの出力で、バージョン番号が 2 で始まっていることを確認してください。Python をインストールする必要がある場合は、このリンク先のページからダウンロードできます。
  • データ・アップロード・スクリプト
  • トレーニング・データ・アップロード・スクリプト

このチュートリアルを開始する前に、次の前提条件が満たされている必要があります。

  • このチュートリアルでは、読者がすでに Watson Discovery Service インスタンスを作成済みであることを前提とします。
  • このチュートリアルでは、読者がすでにサービス資格情報を入手していることを前提とします。
    1. IBM Cloud 上で Watson Discovery Service サービス・インスタンスをアクティブな状態にして、「Service credentials (サービス資格情報)」をクリックします
    2. 「Actions (アクション)」の下にある「View credentials (資格情報を表示)」をクリックします。
    3. ユーザー名とパスワードの値をコピーします。

Cranfield データを Discovery に追加する

  1. 環境を作成します。
    curl -X POST -u "{username}":"{password}" -H "Content-Type: application/json" -d '{
    "name": "my_environment", "description": "My environment" }' https://gateway.watsonplatform.net/discovery/api/v1/environments?version=2017-09-01

    環境 ID をコピーします。
  2. コレクションを作成します。
    curl -X POST -u "{username}":"{password}" -H "Content-Type: application/json" -d '{ "name": "test_collection", "description": "My test collection", "configuration_id": "{configuration_id}", "language_code": "en" }' "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environment_id}/collections?version=2017-09-01"

    コレクション ID をコピーします。
    独自のコレクションを作成するには、デフォルト構成を利用できます (ステップ 1 と 2 を参照)。ツールを使用して環境とコレクションを作成することもできます (ステップ 1 と 2 を参照)。
  3. 検索対象のドキュメントを追加します。
    • ranfield-data.json ファイルをまだダウンロードしていない場合は、このファイルをダウンロードします。このファイルは、Retrieve and Rank 内で使用されているドキュメントのソースです。Cranfield コレクション・ドキュメントは JSON 形式です。JSON 形式は Retrieve and Rank が受け入れるファイル形式であり、Discovery でも有効に機能します。
      注: Discovery では Solr スキーマのアップロードは必要ありません。Discovery は JSON 構造から自動的にスキーマを推測するためです。
    • データ・アップロード・スクリプトをダウンロードします。このスクリプトは、Cranfield JSON を Discovery にアップロードするスクリプトです。
      このスクリプトは JSON ファイルを読み取り、Discovery 内のデフォルト構成を使用して、個々の JSON ドキュメントを Watson Discovery サービスに送信します。Discovery 内のデフォルト構成は、Retrieve and Rank 内のデフォルト Solr 構成と同様の設定になっています。
    • 次のコマンドを実行して、cranfield-data-json データを cranfield_collection コレクションにアップロードします。{username}{password}{path_to_file}{environment_id}{collection_id} は、該当する情報で置き換えてください。他のオプションとして、デバッグを指定する -d や、cURL からの詳細出力を指定する -v を使用することもできます。
      python ./disco-upload.py -u {username}:{password}
      -i {path_to_file}/cranfield-data.json –e {environment_id} -c {collection_id}

      このアップロードが完了するまでには約 20 分かかります。
    • アップロード・プロセスが完了した後、次のコマンドを実行すると、ドキュメントがアップロードされていることを確認できます。このコマンドにより、コレクションの詳細が表示されます。
      curl -u "{username}":"{password}" "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environment_id}/collections/{collection_id}?version=2017-09-01"

出力は次のような内容になります。

{
  "collection_id" : "01743d74-564a-4a12-b270-b58908526a9c",
  "name" : "Cranfield",
  "configuration_id" : "10324002-3abb-4477-b264-76cf59d00695",
  "language" : "en",
  "status" : "active",
  "description" : null,
  "created" : "2017-09-28T18:38:27.552Z",
  "updated" : "2017-09-28T18:38:27.552Z",
  "document_counts" : {
    "available" : 1400,
    "processing" : 0,
    "failed" : 0
  },
  "disk_usage" : {
    "used_bytes" : 3322085
  },
  "training_status" : {
    "data_updated" : "",
    "total_examples" : 0,
    "sufficient_label_diversity" : false,
    "processing" : false,
    "minimum_examples_added" : false,
    "successfully_trained" : "",
    "available" : false,
    "notices" : 0,
    "minimum_queries_added" : false
  }
}

document_counts を調べて、正常にアップロードされたドキュメントの数を確認してください。このサンプル・データ・セットにはアップロードに失敗するドキュメントはないはずですが、他のデータ・セットを使用する場合、アップロードに失敗したドキュメントの数が示される可能性があります。そのような数が示された場合は、notices API を表示することで、エラー・メッセージを確認できます。このリンク先のページで、notices API コマンドを確認してください。

training のセクションには、トレーニングに関する情報が示されます。このセクションについては、トレーニング・データをアップロードした後に見て行きましょう。

トレーニング・データを Discovery に追加する

Discovery では、機械学習モデルを使用してドキュメントを再ランク付けします。このように機械学習モデルを使用するには、モデルをトレーニングする必要があります。トレーニングが行われるのは、適切にランク付けされたドキュメントとサンプル・クエリーをロードした後です。十分なサンプルと十分なバリエーションを Discovery にロードすることで、「優れた」ドキュメントとはどのようなものであるのかを Discovery に教えます。このステップでは、Retrieve and Rank 内で使用されている既存の Cranfield グランドトゥルースを使用して Discovery をトレーニングします。

  1. サンプル Cranfield グランドトゥルース CSV ファイルをまだダウンロードしていない場合は、Retrieve and Rank チュートリアルからダウンロードします。このファイルは、ユーザーがデータに関して尋ねる可能性のある一連の質問からなります。このファイルが、Retrieve and Rank 内のランク付け機能をトレーニングするために必要な情報を提供し、Discovery 内の質問および関連する回答に対する関連性トレーニングを行います。質問ごとに、回答に対する 1 つ以上の識別子 (ドキュメント ID) があります。各ドキュメント ID に組み込まれているラベルは、その回答が質問に対してどれほどの関連性があるのかを示します。ドキュメント ID は、前のステップでダウンロードした cranfield-data.json ファイル内の回答を指します。
  2. トレーニング・データ・アップロード・スクリプトをダウンロードします。このスクリプトは、トレーニング・データを Discovery にアップロードするために使用するスクリプトです。
    • このスクリプトは CSV ファイルを一連の JSON クエリーとサンプルに変換した上で、トレーニング・データ API を使用して Discovery サービスに送信します。
    • Discovery はサービス内部でトレーニング・データを管理します。したがって、新しく生成されたサンプルおよびトレーニング・クエリーは Discovery 自体に保管できるため、別個の CSV ファイル内にサンプルおよびトレーニング・クエリーを保管して、保守する必要はありません。
  3. トレーニング・データ・アップロード・スクリプトを実行して、トレーニング・データを Discovery にアップロードします。{username}{password}{path_to_file}{environment_id}{collection_id} は、該当する情報で置き換えてください。他のオプションとして、デバッグを指定する -d や、cURL からの詳細出力を指定する -v を使用することもできます。
    python ./disco-train.py -u {username}:{password}
    -i {path_to_file}/cranfield-gt.csv –e {environment_id} -c {collection_id}

    このアップロードが完了するまでに 2、3 分かかる場合があります。
  4. データがロードされたら、前のセクションで説明したコレクション詳細のコマンドを使用して、トレーニングのステータスを確認できます。Watson はおよそ 1 時間ごとに 1 回、新しいデータがあるかどうかを自動的にチェックし、新しいデータがある場合はそのデータの処理を開始して機械学習モデルに変換します。モデルのトレーニング中は、training セクションの状態が "processing": false から "processing": true に変わります。モデルのトレーニングが完了すると、training セクションの状態が "available": false から "available": true に変わります。また、"successfully_trained" の日付の値も変わります。エラーが発生した場合は、前のセクションで説明したように notices API を調べることでエラー・メッセージを確認できます。

ドキュメントを検索する

Discovery は自動的にトレーニング済みモデルを使用して、検索結果 (使用可能な場合) を再ランク付けします。query ではなく、natural_language_query を使用して API 呼び出しが行われると、使用可能なモデルがあるかどうかを調べるためのチェックが行われます。モデルが使用可能であれば、Watson はそのモデルを使用して結果を再ランク付けします。この仕組みは、Retrieve and Rank 内で ranker_id を指定して /fcselect エンドポイントを使用するのと同様の仕組みです。Discovery はモデル自体を管理するため、natural_language_query 内で何らかのインジケーターを指定する必要はありません。まずはランク付けされてないドキュメントに対して検索を行い、それからトレーニング済みモデルを使用した検索を行います。

  1. コレクション内でドキュメントを検索するには、cURL コマンドを使用できます。ランク付けされていないドキュメントを確認するために、次のクエリー API 呼び出しを使用したクエリーを実行します。{username}{password}{environment_id}{collection_id} は、該当する値で置き換えてください。このクエリーによって返される結果は、ランク付けされていないドキュメントです。これらの結果には、デフォルトの Discovery ランク付け式が使用されます。他のクエリーを試すには、トレーニング・データ CSV ファイルを開いて最初の列の値をクエリー・パラメーターにコピーしてください。
    curl -u "{username}":"{password}"
    "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environment_id}/collections/{collection_id}/query?version=2017-09-01&query=what
    is the basic mechanism of the transonic aileron buzz&"
  2. 次は、natural_language_query パラメーターを設定して、モデルを使用した検索を実行します。検索を実行する前に、前のセクションで説明したトレーニング済みモデルが用意されていることを確認してください。以下のコードをコンソ-ルに貼り付けて、{username}{password}{environment_id}{collection_id} を該当する値で置き換えます。
    curl -u "{username}":"{password}"
    "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environment_id}/collections/{collection_id}/query?version=2017-09-01&natural_language_query=what
    is the basic mechanism of the transonic aileron buzz&"

    このコマンドは、前にトレーニングしたモデルを使用して再ランク付けした結果を返します。この検索の結果、ならびに前に試した他の検索の結果を比較すると、Retrieve and Rank での結果とは、いくつかの違いがあることに気付くかもしれません。それは、検索操作を単純化して結果を改善するために、検索に使用する手法がいくつか変更されているためですが、全体的な結果の品質はほとんど変わらないはずです。

    再ランク付けされた検索結果を評価した後は、追加のトレーニング・クエリーおよびサンプルと併せてトレーニング・データをアップロードするステップを繰り返し、検索結果を確認することで、Discovery 内で結果を洗練できます。また、最初のステップで説明したように新しいドキュメントを追加して、検索の範囲を広げることもできます。Retrieve and Rank の場合と同様に、トレーニングによって結果を改善するプロセスは、繰り返しの作業です。

次のステップ

このチュートリアルでは、Retrieve and Rank のサンプル・データを使用して Discovery コレクションを作成し、トレーニングする方法を説明しました。このチュートリアルで使用したスクリプトとコードをサンプルとして使用すれば、独自のデータを Discovery に移行して、Discovery の最新の機能と機能強化を利用することができます。データを Watson Retrieve and Rank から移行する別の手法については、第 2 回をお見逃しなく。第 2 回では、検索結果の関連性を評価して改善するためのベスト・プラクティスについても説明します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cognitive computing
ArticleID=1060510
ArticleTitle=Watson Retrieve and Rank から Watson Discovery への移行, 第 1 回: Watson Retrieve and Rank から Watson Discovery サービスに移行する
publish-date=05312018