はじめに
毎週日曜よる6時30分にフジテレビで放送されている「サザエさん」というアニメの登場人物に「イクラちゃん」というキャラクターがいます。
イクラちゃんは年齢が1歳半くらいで基本的に以下の3つの言葉しか話すことができません。1 2
- ハーイ
- チャーン
- バブー
では、私たちが普段話している言葉をイクラちゃんが話すとどの言葉を発するのか。
今回は一説として、類似度を基に推定してみようと思います。
実装方法
COTOHA APIの類似度算出APIを利用しました。
このAPIはテキストに含まれる単語の意味情報を用いて類似度を算出しているため、異なった単語を含むテキスト間の類似性も推定することができるそうです。
そのため、イクラちゃんがそれぞれの言葉をどのような意味で使い分けているかを含めて推定できそうですね。
ソースコードはこちら
CLIENT_ID, CLIENT_SECRETはご自身で取得したものをご利用ください。
import requests
import json
import numpy as np
BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
CLIENT_ID = ""
CLIENT_SECRET = ""
def get_token(client_id, client_secret):
token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
headers = {
"Content-Type": "application/json",
"charset": "UTF-8"
}
data = {
"grantType": "client_credentials",
"clientId": client_id,
"clientSecret": client_secret
}
r = requests.post(token_url,
headers=headers,
data=json.dumps(data))
return r.json()["access_token"]
def similarity(s1, s2, access_token):
base_url = BASE_URL
headers = {
"Content-Type": "application/json",
"charset": "UTF-8",
"Authorization": "Bearer {}".format(access_token)
}
data = {
"s1": s1,
"s2": s2,
"type": "kuzure"
}
r = requests.post(base_url + "v1/similarity",
headers=headers,
data=json.dumps(data))
return r.json()["result"]["score"]
def said_ikurachan(sentence):
access_token = get_token(CLIENT_ID, CLIENT_SECRET)
ikurachan_words = ["ハーイ", "チャーン", "バブー"]
similarity_arr = []
for word in ikurachan_words:
similarity_arr.append(similarity(sentence, word, access_token))
return ikurachan_words[np.argmax(np.array(similarity_arr))]
実行結果
まずは挨拶系から
said_ikurachan("おはようございます", access_token)
# => 'ハーイ'
said_ikurachan("こんにちは", access_token)
# => 'ハーイ'
said_ikurachan("こんばんは", access_token)
# => 'ハーイ'
挨拶は「ハーイ」でよさそうですね。
次に、名言がどのようになるかを見てみましょう。
said_ikurachan("天才とは1%のひらめきと99%の努力である", access_token)
# => 'チャーン'
said_ikurachan("Stay hungry, stay foolish", access_token)
# => 'チャーン'
said_ikurachan("地球は青かった", access_token)
# => 'チャーン'
名言は「チャーン」でよいかもしれません。
最後に、不満がどのようになるかを見てみましょう。
said_ikurachan("なんであいつのために俺が苦労しないといけないんだ")
# => 'バブー'
said_ikurachan("本当にやる意味あるのかなこれ")
# => 'バブー'
said_ikurachan("なんで自分だけこんな目に遭わないといけないのか")
# => 'バブー'
不満は「バブー」となりそうですね。
おわりに
チャーン。チャーン。
(今回は私たちが発している言葉がイクラちゃんだったらどの言葉を発するかについて、COTOHA APIの類似度算出APIを利用して推定しました。あくまで一説ですのでこれが真実かどうかは分かりませんが、参考になれば幸いです。)