「・・・あまり強い言葉を遣うなよ」
「弱く見えるぞ」
(Bleach 20巻より)
愛染様の貫禄を読者に強烈に刻み付ける名シーンでした。
日本語の慣用句として広辞苑に登録される日も近いかもしれません(嘘)。
さて、ここで気になるのが「強い言葉」の定義です。
具体的にどのラインを超えたら「強い言葉」なのでしょうか。
「言葉の強さは主観的で定量化できない」と思われるでしょうか?
一つの方法として、感情分析を利用すると「言葉の強さ」をmaginitudeのスコア、すなわち定量的な値として算出できます。
そこで今回は実際に、PythonでGoogle Cloud API Natural Languageを使用して、BLEACHの名言に対して感情分析を行います。
環境
・Google Colaboratory(Google Chrome上で使用します)
自然言語処理とは?
自然言語処理は、コンピュータに自然言語を処理させるということです。
「自然言語」とは何かというと、「人間が普段使っている言語」です。
「人工的に作られた言語であるプログラミング言語」と対比する意味で、自然発生した言語という意味で自然言語と呼ぶんですね。
人工言語の例) Python, JavaScript, Ruby等
自然言語の例) 日本語、英語、中国語等
人間が日常生活で使っている言語は曖昧です。一方で、コンピュータはプログラミング言語のように一意に解釈できる言語で命令しなければいけません。コンピュータが人間の言葉を扱うのは苦手なことなのです。
感情分析とは?
感情分析は自然言語処理の代表的な技術の一つです。
文字通り、テキストデータの感情をプログラミングを用いて分析します。
感情分析には
1.極性辞書と照らし合わせる
2.機械学習モデルを構築する
3.APIを使用する
と三つのやり方がありますが、比較的簡単に実装でき、かつ高精度も期待できるので、今回は「3.APIを使用する」で行います。
感情分析のAPIも多様な選択肢がありますが、今回はGoogle Cloud API Natural Language(以下GoogleNLPと記載)を使用します。
実装してみた
今回はGoogle Colaboratory上というオンラインの環境で実装します。
実際に、Google Cloud APIを使用してテキストを感情分析できるか試してみましょう。
import requests
APIkey = "XXXXXXXXX"
text = """
あまり強い言葉を遣うなよ 弱く見えるぞ
"""
url = 'https://language.googleapis.com/v1/documents:analyzeSentiment?key=' + APIkey
header = {'Content-Type': 'application/json'}
body = {
"document": {
"type": "PLAIN_TEXT",
"language": "EN",
"content": text
},
"encodingType": "UTF8"
}
response = requests.post(url, headers=header, json=body).json()
print("総合magnitude:",response["documentSentiment"]["magnitude"])
print("総合score:",response["documentSentiment"]["score"])
上記コードを実行すると、下記の出力結果が得られました!無事、感情分析できたようです。
総合magnitude: 0.2
総合score: -0.2
あまり強い言葉を遣うなよ 弱く見えるぞ magnitude: 0.2 , score: -0.2
magunitude?score?耳慣れない用語が出てきましたね。
まずscoreはテキストがネガティブかポジティブかどうかを-1.0~1.0の値で表しています(正式には「極性」と言います)。
次にmagnitudeが、テキストの感情の重さを0~∞の値で表しています。
イメージとしては、scoreが感情のベクトル、maginitudeが感情の絶対値と思ってください。
さて、改めて出力結果を見てみましょう。
少しネガ寄りのニュートラルで、強い言葉ではないようです。
いよいよ、愛染が「強い言葉」と表現した、日番谷君のセリフを感情分析にかけてみましょう。
text= "藍染、オレはテメーを殺す"としてコードを実行します。
総合magnitude: 0.1 総合score: 0.1
藍染、オレはテメーを殺す。 magnitude: 0.1 , score: 0.1
おや、magnitudeが先ほどより低いです。実は強い言葉を使っていたのは愛染様の方だったということになります。
「愛染」という人物名詞が余計なノイズになってしまっているようです。
「愛染、」を取り除いて再度実行します。
総合magnitude: 0
総合score: 0
オレはテメーを殺す magnitude: 0 , score: 0
望んだような結果が得られていません。
原因としては、下記のような理由が考えられます。
- 「愛染」という人物名詞が余計なノイズになってしまっている
- テキストが短すぎて、上手く分析できていないようです。
- 日本語だと精度が出にくい(日本語の自然言語処理は難しいです。逆に、英語の自然言語処理は最も研究が進んでいます)
そこで色々と試行錯誤したところ、精度が向上して行きました。
特に、「テキストを英語に翻訳してから感情分析する」というのが最も効果的でした。
ひとまずの結論としては、おそらく**magnitude0.7以上で「強い言葉」**のようです。
皆さんも、今後宿敵やライバルと対峙するときは、magnitude0.7以下のセリフをチョイスすることを心がけましょう。死亡フラグを回避できます。
今後、BLEACHの勝敗と感情分析の相関関係等も調べてみたいですね。
参考
Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ
初心者の最初の一冊としてベストです。
機械学習・深層学習による自然言語処理入門
ある程度Pythonの基礎は理解していることが前提ですが、Python×自然言語処理では最もお勧めです。
また、久保帯人先生待望の新作で、Bleachと世界観を共有するBURN THE WITCHが
Prime Videoで全話無料配信中です!