【Python】word2vecを使って企業を格付けしてみる

プログラミング

いかにもキャッチー?なタイトルで申し訳ありません。先日、word2vecの存在を知ったので、試しで使ってみました。word2vecは応用範囲が広いですが、今回はかんたーんに、企業の格付けに使ってみたいと思います。あまりまとめてないですが、使ったプログラムはGitHubにあげています。

Daisuke0209/ConversationAI
Contribute to Daisuke0209/ConversationAI development by creating an account on GitHub.

また、機械学習を勉強するための参考書を以下で紹介しています!よかったら見ていってください。

機械学習を勉強するためのオススメ参考書(理論・Python・Webアプリ)
統計・機械学習に関しては授業で習ったところありますが、結構忘れてしまっています(。また、Rの演習の授業はありましたが、Pythonは学生のころには使っていません。機械学習・データサイエンスを勉強するにあたり、私が参考にしている参考書を一挙ご紹介したいと思います。

word2vecとは?

word2vecは2層からなるテキスト処理を行うニューラルネットワークだそうです。入力として言葉(文字)を与えてやると、出力はベクトルとなるところです。

word2vecを用いることで言葉の”足し算・引き算”を行うことができます。例えばですが、”王様”に”男”を引いて、”女”を足すと何になるでしょうか。一般的な人の感覚でいうと、”女王”になると思います。そういった感覚的な言葉の足し算・引き算がword2vecを用いることで可能になります。

コーパスの収集・word2vecのインストール・学習

word2vecのインストール・学習に使うデータ(自然言語処理の世界ではコーパスと言われる)の収集・モデルの学習などは以下の記事を参考にさせて頂きました。ちなみに学習に使ったデータはWikipediaの記事になります。

【Python】Word2Vecの使い方 - Qiita
# はじめに 既に様々な場所で取り上げられているWord2Vecですが、改めてPythonを使ったWord2Vecの使い方を紹介します。 使い方と言っても特に難しい事はなく、コーパス(テキストや発話を大規模に集めてデータベース化した言...

データのダウンロード・モデルの学習などでかなり時間がかかります。たぶんトータル5-6時間はかかったと思います。お暇があるタイミングで、試してみてくださいませ。

word2vecで有名な「王様-男+女=?」

word2vecモデルの学習まで終わったら、さっそく使ってみましょう。まずは、学習済みのモデルを引っ張ってきてモデルインスタンスを定義します。

では「王様ー男+女」を計算してみましょう。

上から順に最もそれらしい計算結果を表示しています。このモデルによると「王様ー男+女=お姫様」になるようです。また、女王は3位にランクインしています。まぁ、だいたいOKでしょう。

word2vecを用いて感情分析

では次にword2vecを用いて感情分析をやってみます。といっても大したものではなく、先ほどとやっていることは大差ありません。各感情の言葉を定義し、その言葉との距離(コサイン類似度)を図ってやります。まずは、各感情の言葉を定義してやります。

プルチックの感情の輪

喜怒哀楽という言葉がありますが、1980年にアメリカの心理学者ロバートさんが8つの基本感情を定義しました。

プルチックの感情の輪

根源的にある基本感情としては、

  • 喜び(Joy)
  • 信頼(Trust)
  • 恐れ(Fear)
  • 驚き(Surprise)
  • 悲しみ(Sadness)
  • 嫌悪(Disgust)
  • 怒り(Anger)
  • 期待(Anticipation)

の8つに分類されます。

そこで、あるテキストと上記の8つの感情との距離(コサイン類似度)を計算し、そのテキストから感情を読み取れないか確かめてみます。

word2vecを用いて感情分析をやってみる

さっそくやってみます。まずはテキストをベクトル化する関数を定義します。

では、以下のテキストの感情を計算してみましょう。

”今日が初出勤日!一日でも早く認められるよう頑張ります!”

各感情のmax値が1になるように、正規化しています。では、結果を見てみます。

感情解析レーダー図最も大きい感情は、Joy=喜びとなっています。ようやく社会に貢献できる 学生の喜びを上手くとらえているのでしょうか(;´・ω・)。一方、Anger=怒りも結構大きいです。実は、ヒキニートで働きたくないのでしょうか。。。(;´・ω・)

もう一文試してみます。試すのは以下の文章

“彼女に振られた。もう希望はなくなった。死にたい”

感情解析レーダー図

おおー!Sadness=悲しみがトップになっています。また、Fear=恐れやAnger=怒りも大きく出ています。見事にこの文章の感情を読み取れているような気がします。

word2vecを用いた企業の格付け

これまた大層なことを書いていますが、大したことはやりません。会社の口コミサイトから口コミを引っ張ってきて、Joy-喜び、Sadnessのどちらに近いかを計算し、格付けしてみるだけです。とりあえず使ってみるレベルなので、会社ごとに適当に一つだけ口コミを拾ってきます。今回試すのは以下の会社。公平を期すために、ある口コミサイトの働き甲斐欄のトップに表示されているものだけを拾ってきました。(せめて、全クチコミの平均取れよって感じかもしれませんが、ご容赦を!)

  • 電機大手 O社
  • 鉄鋼大手 J社
  • 化学大手 A社

さっそくやってみます。各社で使う口コミは以下とします。

電機大手 O社

使った口コミは以下です。

”大企業ということもあり、FAや医療など様々な業界と関わることができる。それに伴い、自然と知見は広がる。営業としては、そこそこ自分の裁量で仕事を展開することができると感じた。上層部への提言も全く出来ない風土ではない。”

そこそこポジティブな口コミと思われます。では、これをword2vecに食べさせた結果、喜び-悲しみはいくらになるでしょうか。

喜び-悲しみ=0.208点!

いいのか悪いのかわかりません!なので、次に行きましょう。

鉄鋼大手 J社

使った口コミは以下です。

”総合職の採用人数は少なく、若いうちから業務量は多い。そこでさまざまな経験を積むことができる。”

なんか忙しそうなイメージもありますが、比較的ポジティブな印象を持ちます。ではスコアはいくらになるでしょうか。

喜び-悲しみ=0.212点!

ほとんどO社と変わらんけど、ちょっと勝った!

化学大手 A社

最後は化学大手 A社。使った文章は以下です。

”自分の携わる製品が非常に大きな案件に用いられたり、国内外に広く供給されるため、自分の働きぶり・能力が世の中に役立っているという感触があります。”

素晴らしいコメントです。これは高得点が期待できそうです。その得点は、、、

喜び-悲しみ=-0.007点!

なんと悲しみが勝ってしまいました(;´・ω・)。全然だめじゃん!!

まとめ

word2vecをまったく使ったことが無かったので、とりあえず使ってみました。簡単な感情分析をしてみましたが、簡単な文章に対してはそれなりに当たっているような気がしましたが、口コミに対してはだめでした。そもそも、学習でWikipediaを使うのではなく、他のコーパスを使うべきなのかもしれません。もうちょっと勉強します(;´・ω・)

コメント