たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

【機械学習】pythonをつかった自然言語処理の概要

   

機械学習のなかに、深層学習という領域があります。深層学習は近年発見されたもので、大規模なデータを用いる場合、CNNやRNNといったアルゴリズムを用いることで、特徴量を抽出し、従来の機械学習よりも精度の高い学習ができることがわかっています。今回は、自然言語処理で何ができるのかの概要について紹介しようとおもいます。

※開発環境としてAnacondaがインストールされているものとして以降話を進めます。Anacondaをまだインストールしていない方は、こちらに詳しくありましたので、参考にインストールしてみてください。

画像認識に有効
→ CNN :Convolutional Neural Network

自然言語認識に有効
→ RNN :Recurrent Neural Network(再帰型ニューラルネットワーク)
論文:The Unreasonable Effectiveness of Recurrent Neural Networks

とくに、LSTM Long Short Term Memoryで文脈判断ができるようになったことが大きいといわれています。

自然言語解析では、形態素解析、単語のベクトル化(Word2Vec)などを駆使し、さまざまな文章を解析できます。

LSTM
RNNで問題となる、ニューラルネットワークの勾配消失、データの発散等の欠点を補うため、データの反映強度を調整する「ゲート」という技術を用いることで、より精度の高いネットワークによる学習を可能にします。

Pythonで形態素解析

意味がわかる最小単位に分割する

形態素解析のツール
- MeCab (高速だけど導入が面倒)
- Janome (すべてpythonで書かれていて、使用が簡単)
- KAKASI
- Chasen

Janomeのインストール

Janome (蛇の目) は,Pure Python で書かれた,辞書内包の形態素解析器です。インストールは下記の方法です。

Windowsの場合

anacondaで仮想環境にはいります。
そこで、コマンドプロンプトを立ち上げて、
pip install janome
を実行してください。

ちなみに、
宮沢賢治の銀河鉄道の夜を形態素解析したら、出現単語としてジョバンニが多かったです。


(このアカウントはソフトウェアエンジニアよりな内容のアカウントで、そっちよりの情報を多く発信してます。よかったらフォローどうぞ!)

小説を形態素解析してから、言語ベクトル化すると、おもしろい事実が得られました。登場人物にベクトルの近い単語をしらべることができることです。そのなかから形容詞を列挙すると、その人物の性格を知ることができますよね。なので、小説をベクトル解析すると、客観的に性格を分析することが可能なんじゃないかなと。読んだことのない小説でも、何となく読んだ気になれるかもしれません。

ちなみに、コードはこちらです。またの機会に解説しようと思いますが、興味のある人はぜひ自分でやってみてください。
MorphologicalAnalysis_by_janome/word2vec_gingatetsudou.py at master · shunak/MorphologicalAnalysis_by_janome · GitHub

Word2Vec

Word2Vecというのは、Word To(=2)Vector という意味で、単語をベクトル化するものです。ちなみにこの2を英単語のToになぞらえる表現は、プログラミングの世界ではよく出てきます。

英語論文とかだと、Vector Representation of Wordsとか、Word Embeddingなどで単語のベクトル表現は述べられているようです。

単語をベクトルにすると、似た特徴(セマンティクス)を持つ単語を推測できるようになります。

Word2Vecの論文

gensim (Word2Vecをつかうためのライブラリ)のインストール

公式サイトの手順に従いましょう。
gensim: Installation

ターミナルから、
pip install --upgrade gensim
でOKです。

Word2Vecの効用

単語をベクトル化することで・・・

  • 単語動詞の近似度を測る→ 文脈の理解
  • RNN(時系列に続きを予測)→データが長大なものには適さない
  • LSTM(重要単語を長期記憶。不要単語を忘却)文脈に影響するかどうかを判断し、それを調整する機能をもったニューラルネットワーク

Word2Vecにはふたつのタイプがある

  • CBOW (Continuous Bag of Words) シーバウ
  • Skip-gram
    → ライブラリではモデルを選択するだけ
    (Numpyなどで自作することも可能)

CBOW

前の単語から次に来る単語を予測(確率)
もっというと、これまでの単語の出現頻度をつかって予測をするもの。

Skip-gram

前後の単語を予測

形態素解析の応用可能性

・レビュー等に形態素解析をして、品質管理をする
・スパムフィルタの作成

今回は自然言語処理の概要についてでした。次回以降、コードを書いていろいろ実装していきます!
ではでは!

 - 機械学習, python