目次


独自のデータを Watson Discovery サービスで使用する

データを収集してクレンジングし、エンリッチして Watson Discovery にインポートする手順の概要

Comments

Watson™ Discovery サービスではデータを分析してエンリッチできるだけでなく、コグニティブ検索エンジンを使用してデータのクエリーを実行できます。このリンク先のコード・パターン「Watson Discovery を利用してデータをインポート、エンリッチ、探索するコグニティブ Node.js Web アプリを作成する」で、独自のデータセットを使用して Watson Discovery サービスでアプリケーションを作成する方法を紹介しています。このチュートリアルでは、Watson Discovery サービスにインポートしてエンリッチできるように独自のデータセットを準備する方法、続いてエンリッチされたデータを使用して検索エンジンを作成する方法を説明します。

例として取り上げる使用ケースは次のとおりです。

  • 構造化されたフィールドとフリー・フォームのテキスト・フィールドが混在する大規模なデータセットがあります。
  • ユーザーがそのデータセットからパターンを見つけるために使用できるアプリケーションを作成します。
  • ユーザーが既存のフィールドをフィルタリング条件としてデータを絞り込めるようにします。
  • Watson Discovery サービスのエンリッチによって追加されたフィールドもフィルタリング条件として使用できるようにします。

データセットを準備する

上述のコード・パターンの例では、2004 年から 2017 年までのサイバー・セキュリティー違反のデータが含まれる、一般公開されたデータセットを使用しました。このデータは Google ドキュメント上にスプレッドシートとして用意されています。このデータセットをコンマ区切り値 (CSV) としてダウンロードするには、「File (ファイル)」 > 「Download as (形式を指定してダウンロード)」の順にクリックし、.csv ファイル形式を選択します。

GitLab のスクリーンショット
GitLab のスクリーンショット

Watson Discovery サービスでは、PDF、Word ドキュメント、HTML ファイル、JSON ファイルなど、さまざまな形式のドキュメントをインポートできますが、CSV ファイルは受け入れません。そのため、データの形式を CSV から JSON に変換するスクリプトを作成して、このリンク先のリポジトリーに用意しておきました。このスクリプトは、CSV ファイル内の行ごとに 1 つの JSON ファイルを作成します。変換後の JSON ファイルは、リポジトリーの data ディレクトリー内にあります。以下は、変換後の JSON ファイルの一例です。

{
    "title": "Netflix Twitter account",
    "alternative_name": "",
    "text": "Dec. 'OurMine' hacked Netflix's Twitter account & sent out mocking tweets.",
    "year": "2017",
    "organisation": "web",
    "method_of_leak": "hacked",
    "no_of_records_stolen": 1,
    "data_sensitivity": 1,
    "source_link": "http://www.reuters.com/article/us-netflix-cyber-idUSKBN14A1GR",
    "source_name": "Reuters"
}

CSV ファイルの構造は維持されていますが、フィールド名のいくつかは変更されています。例えば、CSV ファイル内の story フィールドは、JSON ファイル内では text という名前になっています。JSON ドキュメントを Watson Discovery サービスにインポートすると、この text というフィールドに自動的にエンリッチが適用されます。他のフィールドにもエンリッチを適用するには、データ・コレクション用のカスタム構成を作成します。その方法については後で説明しますが、現時点ではデータの形式を変換することに意味があるので、デフォルトの構成を使用するので構いません。

コード・パターンの README ファイルに、独自の Watson Discovery サービス・インスタンスを作成する方法が詳しく説明されています。独自のコレクションを作成した後、そのコレクション内にデータをアップロードするのはわけのないことです。ファイル・システムから該当するファイルをドラッグしてアップローダー・ウィジェットにドロップするだけで、データをアップロードできます。:

GitLab のスクリーンショット
GitLab のスクリーンショット

ファイルがアップロードされて Watson Discovery サービスがデータセットにエンリッチを適用するプロセスが完了するまでには数分かかる場合があります。

データセットのクエリーを実行する

データを 1 つのコレクションにまとめた後は、データセットに対してさまざまなクエリーを実行して楽しむことができます。Watson Discovery サービスのツールとして、クエリーを作成する際に利用できるいくつかのユーティリティーが用意されています。「Query this collection (このコレクションのクエリーを実行)」ボタンをクリックすると、データの分析情報を要約する画面が表示されます。

GitLab のスクリーンショット
GitLab のスクリーンショット

この画面で「Build your own query (独自のクエリーを作成)」ボタンをクリックすると、クエリー作成フォームが表示されます。このインターフェースで、キーワード、フィルター、集約を指定することによってクエリーを作成できます。まずは、すべてのフィールドを空白のままにして「Run Query (クエリーを実行)」ボタンをクリックしてください。右側のパネルに、このクエリーの実行結果が表示されます。

GitLab のスクリーンショット
GitLab のスクリーンショット

このインターフェースを使用して、コレクションに含まれるデータを探索できます。フィールドの横にあるアイコンをクリックすることで、そのフィールドを展開、縮小できます。これらのフィールドのそれぞれが、前にアップロードした JSON ファイルのうちの 1 つに対応することがわかるはずです。一方、JSON ファイル内のすべてのフィールドに加え、元のファイルには含まれていないフィールドも追加されています。それに該当するのは、idscoreextracted_metadata、および enriched_text フィールドです。

enriched_text フィールドをドリルダウンすると、entitiesdocSentimenttaxonomy などのフィールドを確認できます。前述のとおり、データを Watson Discovery サービスにインポートすると、text フィールドにエンリッチが適用されます。そのプロセスの結果として追加されたのが、これらのフィールドです。

元のフィールドを基準にフィルタリングする

コレクションにアップロードした元の JSON ファイル内のフィールドにもう一度目を向けてください。yearno_of_records_stolenorganisationmethod_of_leak などのフィールドを基準にデータセットを絞り込むと役立つ場合があります。

一例として、method_of_leakhacked に設定されているすべてのレコードが表示されるようにコレクションをフィルタリングしましょう。それには、クエリー・ビルダー内の「Narrow your results (filter) (結果を絞り込む (フィルター)」フィールドに、次のテキストを入力します。

method_of_leak:hacked

「Run query (クエリーを実行)」ボタンをクリックすると、右側の列に、フィルタリングされた結果が一覧表示されます。

GitLab のスクリーンショット
GitLab のスクリーンショット

上記のクエリーに変更を加えて、method_of_leakccidentally published に設定されているすべてのレコードが表示されるようにしてください。続いて、year2017 に設定されているか、organisationhealthcare に設定されているレコードが表示されるようにします。条件をコンマで区切ることで、一度に複数のフィルターを適用できます。例えば、ヘルスケア組織に被害を与えたすべてのハッキングを表示するには、次のようにします。

organisation:'healthcare',method_of_leak:'hacked'

このように、Watson Discovery サービスでは、元のドキュメントに含まれていた元のフィールドを基準に簡単にデータセットのクエリーを実行できるようになっています。

生成されたフィールドを基準にフィルタリングする

次は、enriched_text に含まれるフィールドをもう一度見てください。これらのフィールドは、元のデータセットには含まれていたものではなく、エンリッチ・プロセスで生成されたものです。生成されたフィールドに対しても、簡単にクエリーを実行できます。

一例として、text フィールド内で「bank account」が言及されているすべてのレコードが表示されるようにコレクションをフィルタリングしましょう。それには、クエリー・ビルダー内の「Narrow your results (filter) (結果を絞り込む (フィルター))」フィールドに、次のテキストを入力します。

enriched_text.entities.text:"bank account"

「Run query (クエリーを実行)」ボタンをクリックすると、右側の列に、フィルタリングされた結果が一覧表示されます。

GitLab のスクリーンショット
GitLab のスクリーンショット

同じようにして、このクエリーを enriched_text フィールドに含まれる他のフィールドに適用することもできます。試しに、docSentiment のタイプが「positive」になっている結果だけが表示されるようにフィルターを変更してください。このように、元のデータセットに含まれるフィールドを基準にフィルタリングする場合と同じく簡単に、生成されたフィールドを基準としたフィルターを適用できます。

独自のアプリケーションでクエリーを使用する

このリンク先の API ドキュメントで説明しているように、プログラムによって独自のコレクションに対してクエリーを実行することもできます。例えば、curl を使用して method_of_leak:hacked となっている結果を表示するには、次のクエリーを実行します。

curl -u "{username}":"{password}"
\ "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environment_id}/collections/{collection_id}/query?version=2016-12-01&filter=method_of_leak:hacked&return=text"

{username}{password}{environment_id}{collection_id} の各プレースホルダーを Watson Discovery サービスでの該当するキーで置き換えれば、ツールを使用してクエリーを実行したときと同じ結果が表示されます。

コード・パターンのアプリでは、Node クライアントを使用して Watson Discovery サービスに接続し、サービスに対してクエリーを実行しています。独自のデータセットに対してクエリーを実行するアプリケーションを作成する際は、このコード・パターンを参考にしてください。

独自のデータにエンリッチを適用する

デフォルトの構成を使用する Watson Discovery コレクションに JSON ファイルをアップロードすると、text フィールドにエンリッチが適用されます。アップロードされたデータセット内では、enriched_text キーでエンリッチを検索できます。データの他のフィールドにもエンリッチを適用するには、カスタム構成を作成します。

コレクションのステータスと API 情報を要約する「Your data (ユーザーのデータ)」ページ上に、「Configuration (構成)」というセクションがあります。そのセクションで「Switch (切り替え)」リンクをクリックした後、「Create a new configuration (新しい構成を作成)」をクリックします。カスタム構成に名前を付けて、「Create (作成)」をクリックします。

構成をテストするには、サンプル・ドキュメントをアップロードして使用できます。例えば、001.json ファイルをアップロードしてデフォルト構成を適用すると、次のような内容が表示されます。

GitLab のスクリーンショット
GitLab のスクリーンショット

右側のパネル内のプレビューに表示されている enriched_text フィールドに、指定されたすべてのエンリッチが含まれていることに注目してください。title フィールドからエンティティーを抽出するとしたら、次のような構成をセットアップします。

GitLab のスクリーンショット
GitLab のスクリーンショット

上記の構成を使用してドキュメントをアップロードすると、プレビュー・パネル内に enriched_title という追加フィールドが表示されます。サンプル・ドキュメント内の「Netflix Twitter account」というタイトルから、「Netflix」と「Twitter」の 2 つのエンティティーが抽出され、type:'company’ というラベルが付けられます。構成を微調整することで、データに含まれるどのフィールドにでも、必要となるあらゆるエンリッチを適用できます。

まとめ

このチュートリアルで説明した手順が、独自のデータセットと Watson Discovery サービスを使い始める際に役立つことを願います。下のソーシャル・リンクを使用して、皆さんの成果をコメントでお知らせください!


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


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cognitive computing, ビジネス・アナリティクス, Cloud computing
ArticleID=1066140
ArticleTitle=独自のデータを Watson Discovery サービスで使用する
publish-date=06272019