Watson API Explorer を実際に使って Watson API を体験してみます。今回は一人の人が書いたテキスト(メールや報告文やインターネットでの書き込みなど)を元にして、その文章の中で使われている単語の傾向や頻度などから、その人の性格を分析する、という Personality Insights API を使ってみます。

なお、このブログエントリはこの続きです。Watson API Explorer そのものの紹介など、まずはこちらの内容を一度確認ください:
Watson API Explorer の使いかた

また、Natrual Language Classifier API についてはこちらで紹介しました。今回はこれの Personality Insights 版になります:
Watson API Explorer で Natural Language Classifier を体験する


実をいうと NLC(Natural Language Classifier) の時と比べて、今回の方がシンプルな紹介になっています。NLC ではデータを学習させて、学習状況を確認して、問い合わせて、、、と色々な API が用意されていましたが、その点では Personality Insights の API は1つだけ(Deprecated な API を含めても2つだけ)なので、その紹介も簡単なのでした。


では実際に Personality Insights を使ってみましょう。まずは Personality Insights を利用するための資格情報を入手する必要があります。 IBM Bluemix にログインし、カタログ画面から Watson カテゴリ内の Personal Insights を選択してインスタンスを作成します:
2016070301


インスタンスを作成したら、そのインスタンスの「サービス資格情報」を確認します。画面内に資格情報が JSON フォーマットのテキストで表示されます。この中の username と password の値が必要になるので、メモしておきましょう。ここまでは前回と同じですね:
2016070302


ここまでの準備ができれば Watson API Explorer で Personality Insights を試してみることができます。まずは Watson API Explorer にウェブブラウザでアクセスします:
2016063000


画面内の "Personality Insights" と書かれたリンクを探してクリックします:
2016070303


すると以下のような Personality Insights API の OpenAPI document が表示されます。
2016070304


画面右上の欄に先ほどメモした username と password をそれぞれ入力します。これで API を実行することが可能になります:
2016070305


実際に性格分析を試してみましょう。性格分析を行うのは画面内リストの上にある POST /v2/profile という API です。 この API を選択します:
2016070306


この API の説明を読むと分かるのですが、性格分析はものすごくシンプルな API を呼ぶだけだったりします。まずリクエストヘッダの中で性格分析を実行するテキスト(後述)の言語を指定する必要があります。 Personality Insights API は日本語テキストにも対応しており、日本語テキストから性格を分析する場合は Content-Language ヘッダの値を "ja" に設定します:
2016070301


そして性格を分析する本文をリクエストボディ(Body)に与えます。シンプルなテキストで与える場合は Content-Type を text/plain にする必要があるので、同時に設定しておきます。なおどの言語のテキストにも言えることですが、ある程度以上の分量(というか単語量)がないと性格分析は動作できないので、それなりの分量のテキストを用意して Body に入力してください。実際にはここで与えるテキストは送信メールや SNS への書き込みなどから自動的に取得して取り出すようなものを使うイメージです:
2016070302


与える情報はこれだけです。最後に "Try it out!" ボタンをクリックして API を実行します:
2016070303


与えたテキストの分量が少なすぎたりすると 200 以外のステータスコードになって失敗しますが、HTTP ステータスコード 200 が返ってくれば成功です。その場合、Response Body には性格分析結果の JSON テキストが返ってくるはずです:
2016070304


なお日本語テキストの場合、動作するためには最低でも 70 単語が必要で、ある程度の精度を求めるには 3,500 単語以上、一般的には 6,000 単語以上必要である、とのことです(という警告メッセージがアウトプットされた JSON テキストの中に書かれています)。なので、例えばメールにしても1回に送信するメールの中身だけだと、動くことは動くが、あまり精度の高い結果にはならないことが予想されます。アプリケーションとして実装するには、それなりの量のインプットデータを入手する仕組みと併せて実装する必要があるように思えます。

アウトプットされた結果の意味も Watson API Explorer の画面で解説されているのですが、簡単に日本語でも紹介しておきます。

API 実行が成功した場合の JSON テキストは以下のようになっているはずです:
{
  "id": "*UNKNOWN*",
  "source": "*UNKNOWN*",
  "word_count": 250,
  "word_count_message": "There were 250 words in the input. We need a minimum of 3,500, preferably 6,000 or more, to compute statistically significant estimates",
  "processed_lang": "ja",
  "tree": {
    "id": "r",
    "name": "root",
    "children": [
      {
        "id": "personality",
        "name": "Big 5",
        "children": [
          {
            "id": "Openness_parent",
            "name": "Openness",
            "category": "personality",
            "percentage": 0.8817962669891322,
            "children": [
              {
                "id": "Openness",
                "name": "Openness",
                "category": "personality",
                "percentage": 0.8817962669891322,
                "sampling_error": 0.06374453499999999,
                "children": [
                  {
                    "id": "Adventurousness",
                    "name": "Adventurousness",
                    "category": "personality",
                    "percentage": 0.6949448384206791,
                    "sampling_error": 0.053405595
                  },
                  {
                    "id": "Artistic interests",
                    "name": "Artistic interests",
                    "category": "personality",
                    "percentage": 0.5663919553503082,
                    "sampling_error": 0.108869125
                  },
                     :
                     :

この結果は結構深い階層構造になっています。まず結果の "tree" 要素の中に性格分析結果が含まれています。その下の "children" の中は3つの要素からなるカテゴリー別の分析結果(の配列)になっていて、最初の1つ目が "Big 5" と呼ばれる手法に従っての性格分析結果になっています。"Big 5" という名前の通り、5つのカテゴリに分けた性格分析がされており、その子要素(children)の最初は "Openness"(開放性)に関する分析結果になっています。Openness の下にも更に細分化された性格分析の結果が含まれており、上記例ですと "Adventurousness"(冒険性)が 0.6949.. つまり約 69.5 %、そのサンプリングエラー値が約 5.3% である、という結果になっています。同様に "Artistic interests"(芸術への理解)の値は約 56.6% で、サンプリングエラー値は約 10.9% である、とされています。このような形での性格分析結果が1つの JSON テキストでまとめて得られてた、ということが分かります。


Watson Personality Insights API による性格分析というのはこのようなものです。つまり入力したテキストに対する分析結果を JSON テキストで返す、という非常にシンプルなものです。この結果をどのように視覚化するか、という部分に関しては原則的には利用者に任されていますが、一例がもう1つの API (POST /v2/visualize ※deprecated)として提供されています。

先ほどの POST /v2/profile の結果の JSON テキストをそのまま POST /v2/visualize を展開した Body に入力します。Content-Type を application/json に設定しておきます:
2016070305


この状態で "Try it out!" ボタンをクリックすると、/v2/profile の結果を使った視覚化処理が行われ、実際にウェブページ内で視覚化を行うための HTML(の一部)が Response Body に返されます:
2016070306


Response Body の中身は HTML 内で使える <script> タグ(<script> ~</script>)なので、これに適当な HTML タグを与えてブラウザで開くと、性格分析結果がこのようなパイチャートのグラフになって表現することができます:
2016070307


ただ、このパイチャート形式のグラフで表現するのはあくまで一例であって、これを使わなければならない、というものではありません。実際に API 自体も deprecated 扱いになっていますし、参考程度に使ってください。

なお、Personality Insights の API そのものの詳細については以下のリファレンスを参照ください:
http://www.ibm.com/watson/developercloud/personality-insights/api/v2/