COTOHA
実装
- COTOHAというNTTが提供している自然言語系のAPIを触ってみます。
- 文章と文章の類似度を算出するAPIを使います。
- Ipython形式で実装します。
ライブラリのインポート
import json
import numpy as np
import pandas as pd
import urllib.request
from os import path
情報の定義
- アカウントホームのデータを定義する。
- Developer API Base URLとAccess Token Publish URLは全ユーザー共通だと思いますが、念のため各自登録してお調べください。
base_url = [Developer API Base URL]
developer_id = [Developer Client id]
secret = [Developer Client secret]
token_url = [Access Token Publish URL]
'Content-Type': 'application/json',
}
アクセストークンの取得
- アクセストークンを取得するため、POSTでアクセストークン取得用のAPIにアクセスします。
data = {
'grantType': 'client_credentials',
'clientId': developer_id,
'clientSecret': secret
}
req = urllib.request.Request(token_url, json.dumps(data).encode(), headers=headers, method='POST')
with urllib.request.urlopen(req) as res:
access_info = json.load(res)
print(access_info['access_token'])
単語文章同士の類似度取得
*取得したアクセストークンをヘッダーに詰めて、類似度取得APIにアクセスします。
def similarity_api(s1: str, s2: str):
data = {
's1': s1,
's2': s2,
'type': 'default'
}
headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Bearer {}'.format(access_info['access_token'])
}
url = base_url + 'nlp/v1/similarity'
req = urllib.request.Request(url, json.dumps(data).encode(), headers=headers, method='POST')
with urllib.request.urlopen(req) as res:
body = json.load(res)
return body
similarity_api('近くのレストランはどこですか?', 'このあたりの定食屋はどこにありますか?')
所感
- 単語や文章の類似度の算出は、tf-idf、word2vecやdoc2vecで割と世の中に出回っているため、目新しさはないです。
- ただ、機械学習に慣れていない方には比較的に簡単に扱えるため、便利だと思います。
- また、wikipediaのデータで自分で学習したword2vecのモデルより、対応している単語も多くかつ、類似度の精度も高い印象でした。