Re:ゼロから始めるML生活

どちらかといえばエミリア派です

livedoor ニュースコーパスで遊んでみる(3回目)

この前はこんな感じにやってました。

tsunotsuno.hatenablog.com

画面にラベルが出てきたものの、中身を見てみると悲惨なことになっていました。 文書分類の本来の趣旨からいえば、全くダメでした。 ということで、今回はちょっとデータサイエンスチックなやり方でやってみます。

予想・仮説

予想を書いていきます。

  • この前は学習データだけを使って文書ベクトルを算出してるからよくわからん結果になった
    • -> 学習済みの単語ベクトルをそのまま使えばそれなりの語感を反映した空間にマッピングされるはず

ということでやってみました。

学習済みentity vector

下の記事を参考にさせていただくと、なんとなく候補はこの辺でしょうか。

kamonohashiperry.com

名前 ライブラリ
白ヤギコーポレーションのモデル Gensim
東北大学 乾・岡崎研究室のモデル Gensim
Facebookの学習済みFastTextモデル Gensim
NWJC から取得した単語の分散表現データ (nwjc2vec) Gensim
NNLM embedding trained on Google News TensorFlow

gensimの方が使いやすい気がしますが、googleのデータセットを使ってみたいってのもありますね。

方針

要するに、各文書を特徴づける単語の比重に対して単語が持ってる意味(ベクトル)をかけ合わせて、文書を多次元空間にマッピングすることを考えます。なんとなくこんな感じでしょうか。

  1. livedoor ニュースコーパスの書く文書をTF-IDFを計算(scikit-learn)
  2. 学習済みentity vectorとTF-IDFの掛け算で重み付け
  3. TensorBoardで可視化

実装

東北大学 乾・岡崎研究室のモデル

単純に過去使ったことがあったので、そちらを使ってみたいと思います。

過去にやった記事はこちら。

tsunotsuno.hatenablog.com

コードはこんな感じですかね。

※一点補足すると、wikipediaの辞書に載ってない単語が含まれてしまったようなので、強引に「は」という単語に置き換えました。 覚えてたら今度まっとうなやり方に修正します。

動かした実感としては、tf-idfの算出が結構時間かかりますね。 これだけで3,4時間くらいかかりました。(Macbook使用時)

ちゃちゃっとやりたい場合は、記事の数を手動で切り落とすのもありですね。ちゃんとやるときはモンスターマシンを使いましょうってことで。

結果

分類の評価とか細かいところは、置いておいて、見た目的にはまあこんな感じです。 直感的に同じニュースサイトの記事が近くに寄ってれば、それなりによろしいのではないでしょうか。

東北大学 乾・岡崎研究室のモデル

f:id:nogawanogawa:20190324225740p:plain

この独女通信の周りに独女通信しかない感じ、素晴らしいですね。いい感じです。

感想

他にもエンティティベクトルもやろうと思ってたんですが、思いの外時間がかかったので今回はここまでにします。

今回はまずはベースライン実装ということで、単純にtf-idfで出てきた単語にword2vecをかけ合わせて空間にマッピングしました。 ここからどうやって良くしていくか、暇だったらやっていきたいと思います。

もうやりたくないとは言っていたものの、結局やっちゃうところがダメなところなんでしょうね。