IBM Bluemix から提供されているコグニティブ(Cognitive : 学習型人工知能)サービスの1つ、Personality Insights サービスを紹介します:
2015031601


このサービスは IBM が研究開発しているコグニティブエンジンの1つである WATSON サービスの1つで、与えられたテキスト情報(メール本文など、1人の誰かが書いたテキスト)だけを元に、その人の性格を分析する、というサービスです。残念ながらまだ日本語テキストには対応していませんが、英語メッセージであれば、ベータ版の現在は無料でこの機能を利用することが可能です。


このサービスの API が IBM Bluemix を通じて提供されます。つまり IBM Bluemix をお使いのユーザーであれば誰でもこの API を利用することができることになります。人工知能やその学習、ビッグデータ解析といった複雑な部分は全てブラックボックス化されており、単純にテキストをポストすれば結果を JSON フォーマットで取得できます。

このサービスはデモサイトが用意されています。API を使う前に、まずはこのサービスがどのようなものかをデモサイトを体験することで理解してみましょう:
Personal Insights Demonstration


上記ページを開くと、画面左ペインに英文テキストが表示されています。この中に解析したいテキスト(メール本文など)をコピー&ペーストなどで入力します。最初はデフォルト状態で入力されているテキストをそのまま使っても構いません:
2015031602


なお解析を行うには 100 単語以上からなるテキストを入力する必要があります(短すぎると解析できません):
2015031603


"Analyze" ボタンをクリックすると、このテキストが Personal Insights API に送られ、性格分析が行われます。その結果が画面右側に表示されます:
2015031604


更に下部には結果を視覚化したグラフが表示されています。この視覚化機能も現在は API の一部として提供されていますが、現在では deprecated 扱いになっており、将来的には使えなくなる(D3.js など別途視覚化ライブラリを使ってグラフ化する必要がある)予定になっています:
2015031606


上記のように、現在では与えられたテキストから、その著者の性格を分析して JSON フォーマットで返すという API と、その結果を更に視覚化する、という API の、2つの API が提供されています。ただし後者については将来的に廃止予定となっている、という状況です。まあ視覚化のための要素は JSON で取得できるため、後は何らかのライブラリを使って表示すればいいのだと思っています。グラフ化はあまりコグニティブな要素もないためだと思われます。


実際の使い方は API Reference を参照いただきたいのですが、Personality Insights プロファイル API のエンドポイントである https://gateway.watsonplatform.net/personality-insights/api/v2/profile (実際にはこの値も環境変数から取得できます) に対して、認証情報と解析したいメッセージ本文をプレーンテキストで POST すると、解析結果が以下のような、サンプリング誤差率※も含めたツリー型の JSON フォーマットで取得できる、というものです(赤字はコメント):
{
 "id":"*UNKNOWN*",
 "source":"*UNKNOWN*",
 "word_count":2196,  単語数
 "tree":{
  "id":"r",
  "name":"root",
  "children":[
   {
    "id":"personality",  性格
    "name":"Big 5 ",  性格の5大要素
    "children":[
     {
      "id":"Openness_parent",
      "name":"Openness",  社交性
      "category":"personality",
      "percentage":0.9493716242287923,  94.94%
      "children":[
       {
        "id":"Openness",
        "name":"Openness",  社交性
        "category":"personality",
        "percentage":0.9493716242287923,  94.94%
        "sampling_error":0.14430105599999998,  サンプリング誤差率 14.43%
        "children":[
         {
          "id":"Adventurousness",
          "name":"Adventurousness",  冒険心
          "category":"personality",
          "percentage":0.7224550516937974,  72.25%
          "sampling_error":0.11646272  サンプリング誤差率 11.65%
         },
         {
          "id":"Artistic interests",
          "name":"Artistic interests",  芸術性への興味
          "category":"personality",
          "percentage":0.16797400413558944,  16.80%
          "sampling_error":0.22150304  サンプリング誤差率 22.15%
         },
         {
             :
         }
       },
       {
         :
       }
      ]
     },
     {
       :
     }
   }
  ]
 }
}
※サンプルを元に推定した結果と、実際の値との誤差。この値が小さいほど精度が高い推測値、ということになる

後はアプリケーション側で、この得られた JSON テキストを解析して、一定の誤差率を下回るものだけを対象にするなどして性格分析結果を可視化する、といった処理をすることになると思います。


この Personality Insights API に関しては、解析結果に確実性だけでなくサンプリング誤差率まで含めて提供されるので、アプリケーション側での扱いにも自由度というか、独自性を出しやすい API だと感じました。