PythonからIBM Personality Insights Service APIを叩いてみた
はじめに
IBMが開発しているIBM Personality Insights Service APIは、テキストを入力すると、人格特性(Big-five、Value、Needs)のスコアを出力してくれるというAPIです。
どういうこと?と思う方は以下のリンクから試してみましょう。
Personality Insights
性格診断のちゃんとしたやつ、みたいなイメージですね。入力できる言語は英語、スペイン語、日本語、アラビア語に対応しています。
今回は、このAPIをPython 2.7から叩く方法を紹介します(おそらく3.x系でも同じ)。
手順
手順1:API資格情報の取得
- IBM Bluemix - Next-Generation Cloud App Development Platformにアクセス。アカウントを作成後、ログインする。
- ダッシュボードにアクセスし、スペースを作成する。スペースとは、いわゆる開発環境のことです。データセンターを「米国南部」「シドニー」「英国」から選択するよう要求されますが、(APIを叩くだけなら)気にせずデフォルトのままで大丈夫です。
- スペースの作成後、メニューが表示される。
- その中から、「サービス&API」を選択する。こんな画面が表示される。 この画面の中から、「Personality Insights」を選択。
- Personality Insightsの画面から、スペース名やアプリ名を入力するように要求される。適当に名前を付けて「作成」をクリック。
- 「ダッシュボード」からPerosnality Insightsが利用できるようになる。ダッシュボードからPersonality Insightsにアクセスし、左のメニューバーから「サービス資格情報」をクリック。
- すると以下のような画面が表示される。 ここに表示されているpasswordとusernameの値(赤で隠されているところ)はAPIを叩く際の資格情報となる。後ほどサンプルコードでも出てくる。これにて資格情報の取得は完了!!
手順2:Pythonコードの実装
Requestsというライブラリを使うので、インストールしておく。
pip install requests
以下のようなコードを作成する。
#watson_api.py # -*- coding:utf-8 -*- import json import requests from requests.auth import HTTPBasicAuth #input: plain text (string) --> output: bigfive, needs, and values def get_personality(Text): #endpoint url api_url = "https://gateway.watsonplatform.net/personality-insights/api/v2/profile" #username and pssword for this api api_username = "XXXXX" #手順1で取得したusername api_password = "YYYYY" #手順1で取得したpassword #set query query = { "include_raw": "false", "headers": "false" } #set header headers = { "Content-Type": "text/plain", #入力テキストの形式.今回はstringのテキストを渡す設定. "Content-Language": "en", #入力言語モードの設定.jaとすると日本語の入力を受け付ける. "Accept": "application/json", #応答ファイルの形式.今回はjson形式で受け取る. "Accept-Language": "en", #処理言語モードの設定.jaとすると日本語として処理する. "include_raw": "false" } #set body body = Text #post response = requests.post( api_url, auth = HTTPBasicAuth(api_username, api_password), params = query, headers = headers, data = body ) return response if __name__ == "__main__": #input text text = "sample text. at least 600 words." #統計的に信頼できる値を獲得する場合には最低でも600単語必要. #get personality pers = get_personality(text) j_pers = pers.json() #json format print json.dumps(j_pers, indent = 4)
エンドポイントURLは、手順1で取得した資格情報の"url"とは別物であることに注意しましょう(末尾に /v2/profile が追加されています)。
APIの詳細な設定について知りたい人は、公式のAPIトライアウトページにアクセス!
Personality Insights v2 API Explorer
エラーコードまで丁寧に解説されています。
さて、実行。
python watson_api.py
こんな感じで値が表示されたらOK。
{ "warnings": [], "tree": { "children": [ { "children": [ { "category": "personality", "percentage": 0.9972301565213472, "children": [ { "category": "personality", "name": "Openness", "sampling_error": 0.0597829776, "id": "Openness", "percentage": 0.9972301565213472, "children": [ { "category": "personality", "percentage": 0.9032241090941042, "id": "Adventurousness", "sampling_error": 0.05072314, "name": "Adventurousness" }, { "category": "personality", "percentage": 0.863707003271354, "id": "Artistic interests", "sampling_error": 0.1034981212, "name": "Artistic interests" }, { "category": "personality", "percentage": 0.16516298671132595, "id": "Emotionality", "sampling_error": 0.0474305476, "name": "Emotionality" }, { "category": "personality", "percentage": 0.8630065982824178, "id": "Imagination", "sampling_error": 0.06374967, "name": "Imagination" }, { "category": "personality", "percentage": 0.9741200782232922, "id": "Intellect", "sampling_error": 0.055623082000000004, "name": "Intellect" }, { "category": "personality", "percentage": 0.9999380670028959, "id": "Liberalism", "sampling_error": 0.0831092496, "name": "Authority-challenging" } ] }, { "category": "personality", "name": "Conscientiousness", "sampling_error": 0.07542104720000001, "id": "Conscientiousness", "percentage": 0.271517171388969, "children": [ { "category": "personality", "percentage": 0.8392060674139132, "id": "Achievement striving", "sampling_error": 0.0979948704, "name": "Achievement striving" }, ... }
Big-Five personalityはOpenness、Conscientiousness、Extraversion、Agreeableness、Neuroticism(俗にOCEANと呼ばれたり呼ばれなかったりする)から構成される人格特性です。
返ってきたjson形式のファイルの中で、それぞれの名前が付いたidが含まれるオブジェクト内のpercentageの値が、そのidの人格特性のスコアです。
上の例でいうと、Openness=0.9972301565213472、Conscientiousness=0.271517171388969てな感じですね。
おわりに
このAPIは、最初の30日間は無料トライアル可能で、以降は、月100回までは無料で利用でき、100回を超えると料金が発生します(Bluemixから料金設定は確認できます)。
また、クレジットカード情報を登録した場合、その瞬間に無料トライアル期間は強制的に終了してしまうそうです( ̄エ ̄;)。
たくさん使いたい人は、クレジットカードを登録せずに最初の30日間で使いまくりましょう。
以上!