最近、昨年書かれたこちらの記事を見かけました。
なんだか非常に良さそうな感じで実際に使ってみたので、今回は使ってみたときのメモです。
nlplot is なに?
自然言語の基本的な可視化を手軽にできるようにしたパッケージです。 自然言語を簡単に可視化・分析できるライブラリ「nlplot」を公開しました - ギークなエンジニアを目指す男
何やら簡単にNLPにおける可視化ができるツールらしく、非常に便利そうです。
Githubはこちら。
何やら可視化できるのは、
- N-gram bar chart
- N-gram tree Map
- Histogram of the word count
- wordcloud
- co-occurrence networks
- sunburst chart
- pyLDAvis
らしいです。 確かに、一個一個表示していくのはめんどくさいので、まとめてちゃちゃっと表示出来たら便利そうです。
実際に使ってみる
前置きはこのくらいにして、実際に使ってみます。
前提条件
上記のブログに書かれていますが、
データの形式は下記のようなデータフレームを想定しています。
textのカラムはスペース区切りの文字列 or リスト型のカラムを想定しています。 自然言語を簡単に可視化・分析できるライブラリ「nlplot」を公開しました - ギークなエンジニアを目指す男
ということで、英語などのスペースで単語を区切る言語は普通に突っ込むだけで問題なさそうですが、日本語などのテキストを使う際には自分で形態素解析をして単語に区切り、スペース区切りのテキスト or リスト型にしてから格納し直す必要がありそうです。
あくまで可視化だけが目的ということなので、そりゃそうかという感じですね。
ただ、裏を返すと、形態素解析までやってしまえばそのデータフレームを突っ込むだけでいい感じの可視化ができるので、ユーザーは純粋に自然言語処理の範囲だけに集中することができるので、その点は非常に大きなメリットと思います。
使用するデータ
みんな大好きlivedoorニュースコーパスです。
こんな感じのShellScriptを走らせると取れます。(多分)
#!/bin/sh wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz tar zxvf ldcc-20140209.tar.gz rm ldcc-20140209.tar.gz
配置としてはこんな感じにしてます。
$ tree -L 2 . ├── Untitled.ipynb └── text ├── CHANGES.txt ├── README.txt ├── dokujo-tsushin ├── it-life-hack ├── kaden-channel ├── livedoor-homme ├── movie-enter ├── peachy ├── smax ├── sports-watch └── topic-news
環境
環境はいちいち作るのめんどくさかったので、kaggleのDocker Imageを使ってやります。
コマンドはきっとこんな感じです。
$ docker pull gcr.io/kaggle-images/python $ docker run -v $PWD:/tmp/working -w=/tmp/working -p 8888:8888 --rm -it gcr.io/kaggle-images/python jupyter notebook --no-browser --ip="0.0.0.0" --notebook-dir=/tmp/working --allow-root
表示してみた
さて、ここからは実際に日本語データセットを使用して色々プロットしてみたいと思います。
注意点
githubのサンプルコードのREADMEにもありますが、データ量が大きいと、共起ネットワークとサンバーストチャートの表示に時間がかかることがあるので、ストップワードなどで対象とする単語数は調整してあげる必要がありそうです。
使用したサンプルスクリプト
感想
私がライブラリなどを公開したことないからかも知れませんが、こういうのを作って公開できるってすごいなと思いました。 ブログとサンプルコードさえ読めば、後は普通にコード書けば期待通りのグラフが表示されたので、非常に便利ですね。 ドキュメントとサンプルコード読んでも動かないものが世の中にはあったりするので、普通に動くってそれだけで体験としては大変良いですね。
自分もこういうのを作れるくらい高いレベルのエンジニアになりたいものです…