【機械学習】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
を実行してください。
ちなみに、
宮沢賢治の銀河鉄道の夜を形態素解析したら、出現単語としてジョバンニが多かったです。
銀河鉄道の夜をベクトル化してわかった、主要な登場人物の性格に関係しそうなワード
ジョバンニ→'行ける', 'おもう', 'たべる', '走る','さがす', '悪い',
カムパネルラ→いっしょ,つらい
言語ベクトル解析すると、読んだことのない小説の登場人物のキャラがなんとなくわかったりするのかも。— 歌って踊らないJSB (@jsysbuin) July 27, 2018
(このアカウントはソフトウェアエンジニアよりな内容のアカウントで、そっちよりの情報を多く発信してます。よかったらフォローどうぞ!)
小説を形態素解析してから、言語ベクトル化すると、おもしろい事実が得られました。登場人物にベクトルの近い単語をしらべることができることです。そのなかから形容詞を列挙すると、その人物の性格を知ることができますよね。なので、小説をベクトル解析すると、客観的に性格を分析することが可能なんじゃないかなと。読んだことのない小説でも、何となく読んだ気になれるかもしれません。
ちなみに、コードはこちらです。またの機会に解説しようと思いますが、興味のある人はぜひ自分でやってみてください。
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などで単語のベクトル表現は述べられているようです。
単語をベクトルにすると、似た特徴(セマンティクス)を持つ単語を推測できるようになります。
gensim (Word2Vecをつかうためのライブラリ)のインストール
公式サイトの手順に従いましょう。
gensim: Installation
ターミナルから、
pip install --upgrade gensim
でOKです。
Word2Vecの効用
単語をベクトル化することで・・・
- 単語動詞の近似度を測る→ 文脈の理解
- RNN(時系列に続きを予測)→データが長大なものには適さない
- LSTM(重要単語を長期記憶。不要単語を忘却)文脈に影響するかどうかを判断し、それを調整する機能をもったニューラルネットワーク
Word2Vecにはふたつのタイプがある
- CBOW (Continuous Bag of Words) シーバウ
- Skip-gram
→ ライブラリではモデルを選択するだけ
(Numpyなどで自作することも可能)
CBOW
前の単語から次に来る単語を予測(確率)
もっというと、これまでの単語の出現頻度をつかって予測をするもの。
Skip-gram
前後の単語を予測
形態素解析の応用可能性
・レビュー等に形態素解析をして、品質管理をする
・スパムフィルタの作成
今回は自然言語処理の概要についてでした。次回以降、コードを書いていろいろ実装していきます!
ではでは!