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

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

自然言語処理で遊んでみる(その3:テキスト分類)

しばらく大幅に脱線していましたが、以前こんな感じのことをやっていました。

tsunotsuno.hatenablog.com

今回も参考にさせていただいたのはこちら。

Pythonで動かして学ぶ 自然言語処理入門

Pythonで動かして学ぶ 自然言語処理入門

初学者かつエンジニア向けの大変良い書籍だと思います。 理屈より動くモノ重視な感じがして、個人的にはこういう本の方が実用的かと思ってます。

テキストデータの活用

自然言語処理の基本自体はわかったんですが、実際にそれをどう活用していくか、具体的な話になっていきますね。 内容としては、ざっくりこんな感じでした。

  • テキスト分類
  • 検索
  • 評判分析
  • 情報抽出
  • 系列ラベリング

書いてある事そのままやってもあんまり意味ないので、自分で少しずつ作っていきたいと思います。

テキスト分類

テキスト分類についてはこんな感じに紹介されています。

テキスト分類とは、テキストをその内容にもとづいてあらかじめ決まっているカテゴリに仕分けることです。

(引用:Pythonで動かして学ぶ 自然言語処理入門)

文書の内容に応じて、分類していくタスクになります。 やり方としては次のようなやり方が紹介されています。

ルールベース

ルールベースはざっくり言えば、特定の単語のある/なしを組み合わせて文書をブール代数的に分類するやり方です。 イメージはこんな感じ。

f:id:nogawanogawa:20190402072626j:plain:w500

特に単語の並びを考慮しないのが一般的な気がします。 要するにグループを特徴づける単語がどれだけ含まれているかで分類するわけです。

統計ベース

ルールベースとは変わって、今度は分類過程はある程度ブラックボックスにするやり方です。 教師あり学習の場合は、事前に文書と文書が属するカテゴリのペアで構成される教師データが必要になります。 イメージはこんな感じです。

f:id:nogawanogawa:20190402075002j:plain:w500

ルールベースでは、着目する単語を人間が判断して決定しますが、この方法では分類の判断に使用する情報はすべてコンピュータが自動で重み付けする点が大きく異なります。

SVM

SVMについては正直あんまり詳しくないんですが、こんな感じらしいです。

drumato.hatenablog.com

なるほどです。 本書では線形SVMが紹介されていますが、非線形SVMなるものもあるようで、うまいこと使えばいろいろできるのかもしれないですね。

RNN

LSTM(RNN)については過去に紹介しているので、そちらをご参照。

tsunotsuno.hatenablog.com

tsunotsuno.hatenablog.com

SVMのやり方と大きく違うのは、単語の並びを考慮している点です。 これによって、コンテキストまで意識した分類が可能、、、のハズです。 理屈上は。

感想

非常に勉強になりました。 テキスト分類はちょうどlivedoorコーパスを使って遊んでいたので、そっちの参考にもなりました。