APIからPersonality insightsを使ってWordPressの投稿データを分析してみた

hacknoteのKawaguchiです! 本日はPersonality insightsを使ってみました。

Personality insights(人格分析)は、IBM Watsonサービスの一つであり、文章からその人の個性や人間性を分析できるサービスです。
こちらに自分の今までのWordpressでの投稿データを入れ、人格分析をしてみます。

手順

1.IBMクラウドの利用登録
2.personality insightsのインスタンス作成
3.分析したい文章を準備する(txt、json、csvなど。今回はtxtファイル)
4.コマンドラインツールでコマンド入力し、リクエストデータを送信

1.IBMクラウドの利用登録

まずはこちらからアカウント作成


2.personality insightsのインスタンス作成

“リソースの作成”をクリック


フィルターでpersonality insightsと入力し
“Personality Insights”を選択


該当するもの各々入力し、作成(※ここの”デプロイする地域/ロケーションの選択”によってコマンドラインツールでの入力が一部変わるので注意)


作成したら管理からAPIkeyをコピーしてどこかにメモっておきましょう(左タブにある”サービス資格情報”からも見れます)


3.分析したい文章を準備する

分析したい文章を用意します。最低100単語以上が必須ですが、確度の高い分析結果を得るためには、最低1,200単語以上のテキスト入力が推奨されています。

今回はWordpressの自分の今までの投稿をまとめて分析にかけたいので、まずWordpressのコピー環境(データベース)を用意し、そこからデータを引っ張ってテキストファイルに出力し、それを使用しました。

4.コマンドラインツールでコマンド入力し、リクエストデータを送信

送信したコードはこんなかんじです。curlコマンドでURLの場所に、POSTメソッドでリクエストを送信し、jqコマンドで返ってきたデータ(json)を整形しています。

 curl -X POST -u "apikey:{APIkey}"   \
--header "Content-Type: text/plain"  \
--header "Content-Language: ja"  \
--header "Accept: application/json"  \
--data-binary "@{path_to_file}test.txt"  \
"https://gateway-tok.watsonplatform.net/personality-insights/api/v3/profile?version=2017-10-13&consumption_preferences=true&raw_scores=true"  \
|jq

<以下詳細説明>

一行目 : {APIkey}ですが、これは手順2でコピーしたAPIkeyにあたります。

二行目 : ”Content-Type”は入力コンテンツをプレーンテキスト(text/plain)、HTML(text/html)、または       JSON(application/json)として指定できます。

三行目 : ”Content-Language”は入力テキストの言語を記入します。デフォルトでは英語:enになっています。今回は       日本語なので”ja”で指定しています。(他:es(スペイン),ko(韓国), fr(フランス)…etc)

四行目 : ”Accept”は受信可能なレスポンスデータのメディアタイプを指定します。省略した場合は,すべてのタイプが       受信可能であることを表す「*」が指定されたと見なされます。

五行目 : {path_to_file}は、分析したいテキストファイルがある場所までのパスを指定します。
      (例:”@/home/user1/test.txt)

六行目 : ”https://gateway-tok.watsonplatform.net/personality-insights/api/v3/profile”にリクエストを送信します
      &の後ろはなくても大丈夫です

      version=2017-10-13 : 照会パラメーターによってインターフェース・バージョンを指定して、その更新で       使用可能になった新しいフィーチャーおよび機能を使用します。

      consumption_preferences=true : 消費嗜好性の結果も表示してくれます。

      raw_scores=true : 結果がサンプル母集団と比較されない、筆者のテキストとその特性のモデルのみに基づい       ているスコアが表示されるようになります。

※私はpersonalityinsightsのインスタンス作成時に”東京”を選択したため、サービスエンドポイントが、https://gateway-tok .watsonplatform.net/personality-insights/apiになっています。他の地域選択の場合ここが変わります

詳しくはこちらを参考にしてください。

七行目 : 応答がjsonデータで返ってくるため、jqコマンドを用いてデータを整形して見やすくしています。整形しない       と非常に見づらいです..。

結果の見方

上記のリクエストで以下のような結果が返ってきました(長いので省略しています)。

...

{
  "word_count": 5871,
  "processed_language": "ja",
  "personality": [
    {
      "trait_id": "big5_openness",
      "name": "Openness",
      "category": "personality",
      "percentile": 0.9372076937331174,
      "raw_score": 0.6567710772497886,
      "significant": true,
      "children": [
        {
          "trait_id": "facet_adventurousness",
          "name": "Adventurousness",
          "category": "personality",
          "percentile": 0.902446787609106,
          "raw_score": 0.6447105923794436,
          "significant": true
        }
        ...
      ]
    }
  ],
  "needs": [
    {
      "trait_id": "need_challenge",
      "name": "Challenge",
      "category": "needs",
      "percentile": 0.1565726887688776,
      "raw_score": 0.548196186301491,
      "significant": true
    }
    ...
  ],
  "values": [
    {
      "trait_id": "value_conservation",
      "name": "Conservation",
      "category": "values",
      "percentile": 0.01684160335671242,
      "raw_score": 0.6530251960609705,
      "significant": true
    }
    ...
  ],
  "consumption_preferences": [
    {
      "consumption_preference_category_id": "consumption_preferences_shopping",
      "name": "Purchasing Preferences",
      "consumption_preferences": [
        {
          "consumption_preference_id": "consumption_preferences_automobile_ownership_cost",
          "name": "Likely to be sensitive to ownership cost when buying automobiles",
          "score": 1
        }
        ...
      ]
    }
  ],
  "warnings": []
}


まずパーソナリティーの特性を、ビッグ・ファイブ(big5)価値ニーズの3つに分割して結果が出力されます。今回リクエストでconsumption_preferences=trueにしたため、消費嗜好性の結果も表示されています。それぞれ説明すると

ビックファイブ : 協調性、誠実性、外向性、情緒不安定性、開放性の5つの主要ディメンションを指します
(詳細はこちら)。

ニーズ : 個人の共感を呼ぶ商品の側面を説明します。このモデルには、12 個の特徴ニーズが含まれます
(詳細はこちら)。

価値 : 個人の意思決定に影響を与える動機付け因子を説明します。このモデルには、5つの価値が含まれます
(詳細はこちら)。

・消費嗜好性 : 大きく8つのカテゴリーにグループ分けされており、さまざまな商品、サービス、およびアクティビティーを
       筆者が好む可能性を示します(詳細はこちら)。


結果の見方については以下参考。(詳細はこちら)

<ビックファイブ、価値、ニーズ>
・word_count : 入力テキストの単語数
・processed_language : 入力処理するために使用された言語
・trait_id : 特性の固有のID(big5_{},facet_{},need_{},value_{}の形式があります)
・name : 特性の名前
・category : 特性のカテゴリ
・percentile : 正規化されたスコア(百分位数,0~1の範囲)
・row_score : 生のスコア。サンプル母集団と比較されていないそのままの結果(0~1までの範囲)
・significant : 特性が入力言語にとって意味があるかどうかを示す
・warnings : 入力したテキストに何かしらあったら入ってくるメッセージ
・children : ビッグファイブの各因子のより詳細な結果が入った配列。ビッグファイブに関するフィールドのときのみ返さ       れます

<消費嗜好>
・consumption_preference_category_id : 消費嗜好カテゴリーの固有のID
・name : 消費嗜好名
・score : テキスト筆者が様々な商品、サービス、アクティビティーを好む可能性を示します(0~1までの範囲)
    (詳細はこちら)


数値が高い方が当該する項目の特性、可能性が高いです。

私の結果はOpenness(開放性)が高く、中でもAdventurousness(冒険)が高いのですが、Conservation(不変)が低い模様。また、消費嗜好を見てみると、consumption_preferences_automobile_ownership_costのスコアが高いです。 したがって、上記に載せたサイトから各々まとめてみると、「新しい活動を試してみたり、違うことを経験したりするのに熱心で、自己制約、秩序、および変化への抵抗を重視せず、車を購入するときに所有コストを重視する」という結果でした。