簡易Pythonコードで学ぶ、実践的自然言語処理入門|電子テキスト紹介 #5

f:id:lib-arts:20200309234657p:plain

当ブログの内容を元に電子テキストやその印刷版を、技術書典やnoteやboothなどのプラットフォームで販売を行なっているのですが、あまり内容について紹介してこなかったのでちょっとした宣伝も兼ねてご紹介していくシリーズです。
#1では「高校数学の演習から理解する、機械学習アルゴリズム」について、#2では「Python実装を通して学ぶ、統計モデリング入門」について、#3では「Deep Q-Network を通して学ぶ、強化学習超入門」について、#4では「DeepLearning 関連論文の読み方手引き」の上巻についてご紹介しました。

高校数学の演習から理解する、機械学習アルゴリズム|電子テキスト紹介 #1 - Liberal Art’s diary

Python実装を通して学ぶ、統計モデリング入門|電子テキスト紹介 #2 - Liberal Art’s diary

Deep Q-Networkを通して学ぶ、強化学習超入門|電子テキスト紹介 #3 - Liberal Art’s diary

DeepLearning 関連論文の読み方手引き(上巻)|電子テキスト紹介 #4 - Liberal Art’s diary

#5では、実務で用いやすい言語処理についてまとめた、「簡易Pythonコードで学ぶ、実践的自然言語処理入門」についてご紹介します。

以下目次になります。
1. 作成にあたってのコンセプト
2. 簡単な内容の紹介
3. 今後のアップデート予定について
4. まとめ


1. 作成にあたってのコンセプト
テキストを作成するに至った背景やテキストのコンセプトですが、言語処理って難しそうに見える割に用いる考え方を選べば意外と難しくないので、そういったことを掴んでいただけたらということでまとめました。
なるべく簡単に理解できて、実務ですぐに用いることができる内容を中心にまとめているので、費用対効果の高い内容になっていると思います。
実際に動かして理解できるように、Pythonの実装を元に解説を行なっており、仕組みの理解と実装の対応がなるべくつきやすいようにまとめています。

GitHub - lib-arts/nlp_tutorial

本文中で記載した実装については上記のGitHubにJupyterファイルを置いておきましたので、Janome、scikit-learn、gensim、NetworkXなどの関連のモジュールこちらをダウンロードして実行するだけで簡単に試すことができます。


2. 簡単な内容の紹介
2節では簡単に内容についてご紹介していきます。

f:id:lib-arts:20200310000454p:plain
まず第1章では序論として、機械学習の概要や言語処理のベースになるBag of Wordsについての解説を行なった上で、PythonJanomeの環境構築についてまとめています。

f:id:lib-arts:20200310000832p:plain

特に上記のBag of Wordsは重要のため、実装を添えて実際に動かしながら理解できるようにしています。

f:id:lib-arts:20200310000956p:plain

第2章以降の各章のつながりについては上記のようになっています。要素技術と応用タスクを分けて理解しておく方が応用がしやすいので、上記のように全体の関係性を図示しました。

f:id:lib-arts:20200310001310p:plain

第2章では上記のように、言語処理の手法を日本語に適用するにあたって必要となる、形態素解析について解説しています。また、Pythonにおける形態素解析を気軽に行うことのできるライブラリとしてJanomeを紹介しており、Janomeを用いたコードの実行を行うことができるようにしています。

f:id:lib-arts:20200310001544p:plain

上記のようにJanomeの実行結果やそれに伴う取り扱いについても解説を行なっています。

f:id:lib-arts:20200310001827p:plain

第3章では、tf-idfと特徴語の抽出について取り扱っています。特徴語抽出はアウトプットがわかりやすいため、多くのシーンで非常に利用しやすいです。近年ではword_cloudというライブラリを用いた可視化なども可能になっています。

f:id:lib-arts:20200310002716p:plain

また、上記がscikit-learnを用いたtf-idfの実装です。行列の表現形式としてNumPyではなくscipy.sparseを用いているので、その点などもご紹介しています。

f:id:lib-arts:20200310003318p:plain

f:id:lib-arts:20200310003339p:plain
第4章では、Word2vecについて取り扱っています。Word2vecの考え方については近年のBERTを中心とするDeepLearningを用いた言語処理においても非常に大きな役割を果たしています。そのため、近年のトレンドを抑えるという意味でもWord2vecを理解するというのは非常に重要になっています。

f:id:lib-arts:20200310003730p:plain

第5章では、Cos類似度と文書分類について取り扱っています。文書の分類と聞くと難しそうな印象を受けるかもしれませんが、意外と単語に着目するだけでできるケースも多いというのをこちらを通して掴んでいただけたらと思っています。

f:id:lib-arts:20200310004329p:plain

上記の計算式で表すことのできるCos類似度は2つのベクトルの類似度を計算するのにも用いることができるため、そちらをBag of Wordsに応用して文書分類タスクを解いています。

f:id:lib-arts:20200310004353p:plain
第6章では、極性辞書を用いたネガポジ分析について取り扱っています。ネガポジ分析は極性分析(Sentiment Analysis)に含まれると考えて良さそうですが、文章からネガティブとポジティブを読み取るというタスクです。難しそうに見えますが、下記のような極性辞書を用いることで比較的簡易的に実装することができます。

f:id:lib-arts:20200310005105p:plain
極性辞書は上記のように、形容詞を中心に単語のスコアをつけた辞書のことを指します。テキストの中では、公開されている極性辞書を元に簡易的なネガポジ判定を行えるような実装としています。

f:id:lib-arts:20200310005350p:plain

第7章では、言語処理におけるネットワーク分析についてグラフ理論と絡めながら解説を行なっています。具体的な題材としては、第5章で取り扱った文書分類の結果の可視化を行なっています。

f:id:lib-arts:20200310010130p:plain

文書の関連性を上記のようにグラフで可視化を行なっています。


3. 今後のアップデート予定について
今後のアップデートに関しては、word_cloudについての追加を検討しています。word_cloudは仕組み自体はtf-idfなどをベースにするので単純ですが、見栄え良く可視化をするというのはプロジェクトを円滑に進める上で非常に重要なポイントなので、学んでおいて損はないトピックだと思います。
他にもLDAなどのトピックモデリングについては少々難解なため、メインで取り扱わないものの簡単にだけご紹介できると良いのではと思っています。


4. まとめ
#5では、実務で用いやすい言語処理についてまとめた、「簡易Pythonコードで学ぶ、実践的自然言語処理入門」についてご紹介しました。
#6では、データマイニングのプロジェクトマネジメントについて取り扱った手法であるCRISP-DMを中心にプロジェクトマネジメントについて考察を行う、「CRISP-DMをベースに考察するAI・機械学習・Data Scienceプロジェクトのマネジメント」についてご紹介します。