LoginSignup
3
2

More than 1 year has passed since last update.

自然言語処理の感情分析は「○ね」をポジティブと分類する

Posted at

独自に集めた誹謗中傷の単語一覧をGoogleが提供する感情分析APIでネガポジ分類してみました。

その結果、Googleが提供するAPIでは「○ね」がポジティブと分類される結果となりました。Googleが提供するAPIでこの結果になるということは、これが現時点での自然言語処理の限界ということでしょうか。

今回の実験結果をそのまま記載します。なぜこのような結果になるのか、ご意見があればページ下部のコメント欄に書いてもらえるとありがたいです。

独自に集めた誹謗中傷の単語一覧

SNS上で使われる誹謗中傷の単語のうち、ネガティブな意味になるものだけを集めました。ネガティブかどうかは私の主観です。正規化はされておらず、SNS上で使われている表現をそのまま抽出しています。

死ね 殺す 黙れ 馬鹿 役立たず 無能 やくたたず きいてんのか いいかげんに うるせーよ うるせえ うっせえ 気持ち悪い キモい きもい きしょい うるせえよ うるさい しね くず うざ うざ ころす きえろ ばか だまれ かえれ こら おい きも ごみ ゴミ バカ

先に結論

Googleが提供するNatural Language APIによる感情分析は、日本語の単語に対してかなり間違った分析結果を提供します。例えば、「死ね」をポジティブと分類します。

Microsoftが提供するText Analytics APIによる感情分析は、英語の文章に対してはそこそこよい分類結果を提供します。日本語には対応していません。

Google Natural Language APIで分析した結果

集めた単語をGoogle Natural Language APIで感情分析した結果が下記の表です。

死ね、うっせえ、気持ち悪いがポジティブ、殺すが中立と分類されており、明らかにおかしい結果となっています。

スコアの解釈について
今回は 0.3 を中立の閾値と設定しましたが、閾値は実際の例に合わせて調整することが推奨されています。スコアの解釈については Natural Language API > 感情分析の値の解釈 をご参照ください。

単語 ポジティブ 👍 中立 ネガティブ 👎 スコア
死ね o 0.400
殺す o 0.300
黙れ o 0.300
馬鹿 o -0.900
役立たず o 0.300
無能 o 0.300
やくたたず o 0.300
きいてんのか o -0.400
いいかげんに o 0.000
うるせーよ o -0.100
うるせえ o 0.300
うっせえ o 0.400
気持ち悪い o 0.400
キモい o 0.300
きもい o 0.300
きしょい o 0.000
うるせえよ o -0.700
うるさい o -0.800
しね o 0.400
くず o 0.300
うざ o 0.300
うざ o 0.300
ころす o 0.300
きえろ o 0.300
ばか o 0.400
だまれ o 0.300
かえれ o 0.300
こら o 0.300
おい o -0.200
きも o 0.300
ごみ o -0.500
ゴミ o -0.800
バカ o -0.600

もしかするとGoogleの技術は英語に最適化されており、日本語だから精度が低いのかもしれません。次に、同じ単語を英語に翻訳し同様の分析を試してみます。

Google Natural Language APIで「英語」を分析した結果

前回と同じ分析を英語で行った結果が下記の表です。日本語では単語でしたが、英語では文章になっています。

ポジティブと分類された文章が1つもないという意味では日本語の分析よりはよい結果といえます。しかし、ほとんどの文章が中立と分類されており、あまり納得感のない結果でもあります。

単語 ポジティブ 👍 中立 ネガティブ 👎 スコア
Die o 0.200
I’ll kill you o 0.300
Shut up o 0.300
You’re an idiot o 0.300
You’re useless o 0.300
You’re incompetent o -0.800
You’re useless o 0.300
Are you listening? o -0.100
Stop it already o -0.800
Shut the hell up o -0.800
Shut your ass o 0.300
Shut the fuck up o 0.300
You creep me out o 0.300
You’re creepy o 0.300
You’re creepy o 0.300
You’re disgusting o 0.300
Shut up already o 0.300
Shut up o 0.300
Die o 0.200
You’re garbage o -0.800
You’re annoying o 0.300
Shit o 0.300
I’ll kill you o 0.300
Disappear o 0.300
Idiot o 0.300
Shut your mouth o 0.300
Go home o 0.300
Hey o 0.300
Hey you o 0.300
You creep o 0.300
You’re garbage o -0.800
You’re garbage o -0.800
You're an idiot o 0.300

Googleが提供するNatural Language APIは日本語と英語の両方であまりよい結果になりませんでした。

もしかするとGoogleが提供しているAPIに問題があるだけで、Microsoftが提供する類似のAPIであれば違った結果になるかもしれません。次は、Microsoftが提供するText Analytics APIを試してみます。

Microsoft Text Analytics APIで「英語」を分析した結果

前回と同じ英語の文章をMicrosoft Text Analytics APIで感情分析した結果が下記の表です。

ほとんどの文章がネガティブと分類されており、Googleの結果と比べるとかなり納得感のある結果になっています。

※ Microsoftが提供するAPIでは日本語を分析できませんでした。

単語 ポジティブ 👍 中立 ネガティブ 👎
Die o
I’ll kill you o
Shut up o
You’re an idiot o
You’re useless o
You’re incompetent o
You’re useless o
Are you listening? o
Stop it already o
Shut the hell up o
Shut your ass o
Shut the fuck up o
You creep me out o
You’re creepy o
You’re creepy o
You’re disgusting o
Shut up already o
Shut up o
Die o
You’re garbage o
You’re annoying o
Shit o
I’ll kill you o
Disappear o
Idiot o
Shut your mouth o
Go home o
Hey o
Hey you o
You creep o
You’re garbage o
You’re garbage o
You're an idiot o

ここまでの結果を見る限り、Googleが提供するAPIで日本語を分析した場合に特に結果が悪くなることが分かりました。

今までは話し言葉を入力として与えていたのであまり結果がよくなかったのかもしれません。自然言語処理のために用意された辞書に含まれる単語であれば違った結果になると仮定して、最後に、日本語評価極性辞書に含まれる単語をGoogle Natural Language APIで分析してみます。

Google Natural Language APIで「英語」を分析した結果

日本語評価極性辞書から「死」という漢字が含まれており、かつ、ネガティブな意味に分類されている単語だけを抜粋してGoogle Natural Language APIで分析した結果が下記の表です。

すべてネガティブと分類されてほしいのですが、ポジティブと分類される単語がたくさんあります。特に、「死に場所」と「死に神」はポジティブの度合いが強くなっています。

単語 ポジティブ 👍 中立 ネガティブ 👎 スコア
安楽死 o -0.500
一死 o 0.300
過失致死 o 0.000
過労死 o -0.600
餓死 o 0.400
壊死 o 0.300
急死 o 0.300
枯死 o 0.400
交通死亡事故 o -0.400
o -0.800
死に場所 o 0.600
死に神 o 0.700
死に体 o 0.100
死骸 o 0.300
死角 o 0.300
死期 o 0.300
死球 o 0.400
死去 o 0.300
死刑 o -0.300
死刑判決 o 0.000
死語 o -0.700
死罪 o -0.400
死産 o 0.000
死者 o -0.200
死出の旅 o -0.200
死傷者 o 0.000
死人 o -0.300
死線 o 0.400
死相 o 0.300
死体 o 0.300
死地 o -0.600
死闘 o 0.300
死病 o -0.600
死亡 o -0.600
死亡者 o -0.200
死没 o 0.300
死魔 o 0.300
死滅 o 0.400
死霊 o -0.700
事故死 o -0.800
傷害致死 o -0.700
戦死 o 0.300
戦死者 o 0.000
致死 o 0.000
溺死 o 0.400
凍死 o 0.300
脳死 o 0.000
半死 o 0.400
半死半生 o -0.700
瀕死 o 0.300
変死 o 0.300
万死 o -0.500

最後に

実験前に想定していたよりも間違った分類の割合が非常に多くて驚きました。誹謗中傷の自動分類はどのSNSもまったくうまくいっていませんが、その原因の1つが自然言語処理の技術の未熟さにあるのかもしれません。今後の技術の発展に期待します。参考リンク:Instagramがハラスメントに対処する新しいツール「Limits」のテストをしていることを認める

ドキュメントを見る限り、今回調査したGoogleとMicrosoftのAPIは単語や短い文章ではなく長文に最適化されているような記述があるため、短い文章だとうまくいかないという弱点があるのかもしれません。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2