Goalist Developers Blog

センチメント分析用の言葉辞書と遊んでみました。綺麗なグラフをいっぱい描けました。

こんにちは、皆さん。ゴーリストのチナパです!

f:id:c-pattamada:20190228110449p:plain

こういうキャラらしいです。

以前はこちら http://developers.goalist.co.jp/entry/2018/11/16/150000 の辺りに顔の気持ちのを機械学習で当ててみるような記事もありますが、 この度は、顔の気持ちではなく、言葉の気持ちについての記事です。

文書の気持ちを理解するためにはまずは言葉の気持ちを理解しないといけません。今日はセンチメント分析によく利用される「辞書」のデータを調べてみます。

こちらの辞書を使わせていただいてます。

http://www.lr.pi.titech.ac.jp/\~takamura/pubs/pn_ja.dic

同じく英語の辞書もありましたので、そちらもみてみたいです!

http://www.lr.pi.titech.ac.jp/\~takamura/pubs/pn_en.dic

こちらの辞書では言葉、ふりがな、品詞、と 1から-1までの数字があります。 最後の数字の方は「ポジティブ性」や「ネガティブ性」を表そうとしてます。では、中身はどうなのかを調べてみましょう!

まずは開く

必要なインポートは以下

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

先ほどのurlでダウンロードし、パイソンに入れておきましょう。

english_words = pd.read_csv(en_dict_path, sep=':', ['words', 'type', 'score']) jp_words = pd.read_csv(jp_dict_path, sep=':', names=['words', 'reading', 'type', 'score'], header=None)

なんとなく何が入っているのかをみてみましょう print(jp_words.type.unique()) => ['動詞' '形容詞' '名詞' '副詞' '助動詞'] print(jp_words.groupby('type').type.count()) =>

type
副詞      1207
助動詞        2
動詞      4252
名詞     48999
形容詞      665

Pandasの力で割と簡単にできますね。 つまり、圧倒的に名詞が多くて、助動詞は無視できそうですね。

グラッフを書こう!

これで、項目名も設定されます。

sns.set(style='ticks', palette='Set2')
sns.despine()

そして、グラフが綺麗に出るような設定をしました。

では全体のデータの偏りなどをみてみましょう。

sns.distplot(jp_words.score)

f:id:c-pattamada:20190228003327p:plain
日本語単語のネガポジグラフ

おー、意外ですね!全体的に言葉が左に片よっれます。なんででしょうね。英語に比較しましょう!

sns.distplot(englishwords.score)

f:id:c-pattamada:20190228003247p:plain
英語単語のネガポジグラフ

こっちは偏ってないですね。でも非常に真ん中に集まってます。これは、、日本語にはちょっとだけネガティブなニュアンスが入っている言葉が多そうですね。理由を当てようとしますと、この辞書が作られた元のサンプルでのネガティブな気持ちが入っていた日本語文章が多かったとか…しか思い当たらないですね。

さて、最後にもう一つの軸でみたいですね。言葉の種類5つありましたが、それぞれの偏りがどうなのかも調べてみたいです。

軸が分けられたグラフ

つまり、動詞、名詞、などのそれぞれのカテゴリー別にもどんな感じなのかもみてみたいということです。

g = sns.FacetGrid(jp_words, hue='type', height=6)
g.map(plt.hist, 'score')
g.add_legend()
new_labels = ['verb', 'adj', 'adv', 'ex']
for t, l in zip(g._legend.texts, new_labels): t.set_text(l)

f:id:c-pattamada:20190228014530p:plain
名詞が多い!

うげ、、、名詞が多い!何も見えないですね。下の辺の副詞の気配を薄くしか感じないですね。もちろん、名詞のデータが全部のデータの形に非常に似ています。量が圧倒的なので、当然ですが。仕方ありません、名詞を抜いてグラフをみましょう。

sns.FacetGrid(jp_words[jp_words.type != '名詞'], hue='type', height=6)

上記のコードをこう編集しますとできます。

f:id:c-pattamada:20190228014611p:plain
名詞なしの図

なるほどですね、形容詞がすごく極端になってます。動詞が割と多く、名詞よりちょっと左に肩よっています。

結論

これで、pandasとseabornを利用し、持っているデータをより把握できるようなったかなと思います。この次には「なんで単語が左偏ってる?」みたいな質問も聞いて調べるのが次の段階です。そこでまた新たな質問が出てくるかも知れませんし、プロジェクトに対してこの辞書を本当に活かせる方法はなんでしょうかを判断できるようになりますが、そこは時と場合に応じて違う答えだと思います。旅みたいなものです。「データ」を利用して「情報」を得る「情報」を利用して「決断」をする。それがデータサイエンスの中心だと思います。

一緒に旅しましょう〜